1 public List<Location> GetGeoPoints(string encoded) 2 { 3 List<Location> poly = new List<Location>(); 4 int index = 0, len = encoded.Length; 5 int lat = 0, lng = 0; 6 while (index < len) 7 { 8 int b, shift = 0, result = 0; 9 do 10 { 11 b = encoded.ToCharArray()[index++] - 63; 12 result |= (b & 0x1f) << shift; 13 shift += 5; 14 } while (b >= 0x20); 15 int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 16 lat += dlat; 17 18 shift = 0; 19 result = 0; 20 do 21 { 22 b = encoded.ToCharArray()[index++] - 63; 23 result |= (b & 0x1f) << shift; 24 shift += 5; 25 } while (b >= 0x20); 26 int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 27 lng += dlng; 28 29 double latResult = ((double)lat / 1E5) * 1E6 * Math.Pow(10, -6); 30 double lngResult = ((double)lng / 1E5) * 1E6 * Math.Pow(10, -6); 31 Location p = new Location(latResult, lngResult); 32 poly.Add(p); 33 } 34 return poly; 35 }