2011-10-29 16 views
11

Estoy usando ASP.NET MVC 3 y Google Maps v3. Me gustaría hacer geocodificación en una acción. Eso es pasar una dirección válida a Google y recuperar la latitud y la longitud. Todas las muestras en línea sobre geocodificación que he visto se han ocupado de la geocodificación del lado del cliente. ¿Cómo harías esto en una acción usando C#?Google Maps v3 geocodificación del lado del servidor

Respuesta

16

No estoy seguro de si he entendido bien, pero esta es la forma en que lo hace (si está interesado)

void GoogleGeoCode(string address) 
{ 
    string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address="; 

    dynamic googleResults = new Uri(url + address).GetDynamicJsonObject(); 
    foreach (var result in googleResults.results) 
    { 
     Console.WriteLine("[" + result.geometry.location.lat + "," + result.geometry.location.lng + "] " + result.formatted_address); 
    } 
} 

utilizando los métodos de extensión here & Json.Net

+0

Agradable - gracias por compartir. Funciona bien. Su muestra está usando Google Maps v3 ¿verdad? – thd

+0

No, no es javascript api. Utilicé los documentos de http://code.google.com/apis/maps/documentation/geocoding/ ('Formatos de salida JSON) –

+0

Si planificaba almacenar el lat y el lng en una tabla de base de datos, ¿seguiría funcionando? – RyeNyeTheComputerScienceGuy

2

solución de LB trabajó para mi. Sin embargo, me encontré con algunos problemas de encuadernación en tiempo de ejecución y tuve que lanzar los resultados antes de que pudiera usarlos

public static Dictionary<string, decimal> GoogleGeoCode(string address) 
    { 
     var latLong = new Dictionary<string, decimal>(); 

     const string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address="; 

     dynamic googleResults = new Uri(url + address).GetDynamicJsonObject(); 

     foreach (var result in googleResults.results) 
     { 
      //Have to do a specific cast or we'll get a C# runtime binding exception 
      var lat = (decimal)result.geometry.location.lat; 
      var lng = (decimal) result.geometry.location.lng; 

      latLong.Add("Lat", lat); 
      latLong.Add("Lng", lng); 
     } 

     return latLong; 
    } 
Cuestiones relacionadas