download a copy of GMap.Net library from:
http://greatmaps.codeplex.com/
add a reference to GMap.Net.Core to your project
Step 2: Get address or (lat, lon) from (lat, lon) or address
The following two methods allow you to retrieve address from (lat, lon) or (lat, lon) from a given address. The code also uses simple cache technique to store the retrieved results.
public static string FindAddress(double lat, double lng) { int latE6 = (int)(lat * 1000000); int lngE6 = (int)(lng * 1000000); string foldername = "location_cache"; if (!Directory.Exists(foldername)) { Directory.CreateDirectory(foldername); } string filename = string.Format("{0}\\{1}_{2}.txt", foldername, latE6, lngE6); if (File.Exists(filename)) { StreamReader reader = new StreamReader(filename); string data=reader.ReadToEnd(); reader.Close(); return data; } string address = ""; GeoCoderStatusCode status; var pos = GMapProviders.GoogleMap.GetPlacemark(new PointLatLng(lat, lng), out status); if (status == GeoCoderStatusCode.G_GEO_SUCCESS && pos != null) { address = pos.Address; StreamWriter writer = new StreamWriter(filename); writer.WriteLine(address); writer.Close(); } return address; } public static bool FindLatLngByAddress(string address, out double lat, out double lng) { string address64 = EncodeTo64(address); string foldername = "address_cache"; if (!Directory.Exists(foldername)) { Directory.CreateDirectory(foldername); } string filename = string.Format("{0}\\{1}.txt", foldername, address64); if (File.Exists(filename)) { StreamReader reader = new StreamReader(filename); string data = reader.ReadToEnd(); reader.Close(); string[] latlng=data.Split(new char[]{','}); lat = double.Parse(latlng[0].Trim()); lng = double.Parse(latlng[1].Trim()); return true; } lat = 0; lng = 0; GeoCoderStatusCode status; PointLatLng? point=GMapProviders.GoogleMap.GetPoint(address, out status); if (status == GeoCoderStatusCode.G_GEO_SUCCESS && point != null) { lat = point.Value.Lat; lng = point.Value.Lng; StreamWriter writer = new StreamWriter(filename); writer.WriteLine(string.Format("{0},{1}", lat, lng)); writer.Close(); return true; } return false; } static public string EncodeTo64(string toEncode) { byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode); string returnValue = System.Convert.ToBase64String(toEncodeAsBytes); return returnValue; }
No comments:
Post a Comment