start google developers address c# google-api

c# - address - https developers google com maps documentation geocoding start



Cómo llamar al servicio Google Geocoding desde el código C# (7)

Es una vieja pregunta. Pero hoy tuve la misma pregunta y encontré esto como una solución: C # GeoCoding / API de validación de direcciones (compatible con varios proveedores, incluido Google Maps).

IGeocoder geocoder = new GoogleGeocoder() { ApiKey = "this-is-my-optional-google-api-key" }; IEnumerable<Address> addresses = await geocoder.GeocodeAsync("1600 pennsylvania ave washington dc"); Console.WriteLine("Formatted: " + addresses.First().FormattedAddress); // Formatted: 1600 Pennsylvania Ave SE, Washington, DC 20003, USA Console.WriteLine("Coordinates: " + addresses.First().Coordinates.Latitude + ", " + addresses.First().Coordinates.Longitude); // Coordinates: 38.8791981, -76.9818437

Aquí está el paquete correspondiente de NuGet:

Install-Package Geocoding.Google

Tengo una biblioteca de clase en C #. Desde allí tengo que llamar al servicio de Google y obtener latitud y longitud.

Sé cómo hacerlo usando AJAX en la página, pero quiero llamar al servicio Google Geocoding directamente desde mi archivo de clase C #.

¿Hay alguna manera de hacer esto o hay otros servicios que puedo usar para esto?


No tengo la reputación de comentar, pero solo quería decir que el código de Chris Johnsons funciona a la perfección. Para cualquier persona tan estúpida como yo, las asambleas son:

using System.Net; using System.Xml.Linq;


Podrías hacer algo como esto:

string address = "123 something st, somewhere"; string requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false", Uri.EscapeDataString(address)); WebRequest request = WebRequest.Create(requestUri); WebResponse response = request.GetResponse(); XDocument xdoc = XDocument.Load(response.GetResponseStream()); XElement result = xdoc.Element("GeocodeResponse").Element("result"); XElement locationElement = result.Element("geometry").Element("location"); XElement lat = locationElement.Element("lat"); XElement lng = locationElement.Element("lng");

También querrá validar el estado de respuesta y capturar cualquier WebExceptions. Echa un vistazo a la API de geocodificación de Google .


Puede llamar al servicio web y trabajar con la respuesta json / xml.

http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true

Esto devuelve una respuesta json con la que puedes trabajar.

Como puede leer en los términos de uso, solo se le permite usar su servicio web si muestra un mapa de Google.

Aquí puede encontrar toda la información sobre el servicio: https://developers.google.com/maps/documentation/geocoding/

Para ver cómo manejar la respuesta json, consulte este tema: Google Maps v3 geocodificación del lado del servidor

EDITAR: Acabo de encontrar este artículo: http://www.codeproject.com/Tips/505361/Google-Map-Distance-Matrix-and-Geocoding-API-V3-we

No probé esto, pero tal vez funcione para ti :)

EDIT2: El ejemplo de proyecto de código no parece funcionar :( la url mencionada allí devuelve siempre lo mismo, sin importar qué punto de dirección sea la entrada ...
Sin embargo, debería intentar trabajar con el resultado JSON o XML de todas formas, ya que esta es la mejor práctica que diría.


Puede que no sea mucho, pero solo quiero hacer una mejora en el código de @Chris Johnson si solo desea obtener el valor de lat y lng en forma doble que var lat y var lng de chris johnson tiene valor con este formato <lat>. ..number ... </ lat>

Entonces, si pasa el valor es una cadena para obtener el valor numérico que tiene que hacer así

double latitude = Double.Pars(lat.Value) double longitude = Double.Pars(lng.Value)


Puede que sea un poco tarde para esta respuesta, pero para aquellos que todavía están buscando una forma fácil de usar la API de geocodificación de Google, escribí este sencillo nugget llamado API de Guigle y se puede usar así:

GoogleGeocodingAPI.GoogleAPIKey = "YOUR API KEY"; AddressResponse result = await GoogleGeocodingAPI.SearchAddressAsync("100 Market St, Southbank");

O

var result = await GoogleGeocodingAPI.GetCityFromCoordinatesAsync(11.1111, 22.2222); var city = result.Item1; var country = result.Item3;

  • Una cosa que me gusta de esto es que obtiene objetos completos de las respuestas de la API, por lo que tiene un acceso fácil a todo y puede usar Linq y otros ayudantes de recopilación para recuperar datos fácilmente. Por ejemplo, para direcciones, tienes estos tipos y más:

    public class AddressResponse { public List<Address> Results { get; set; } public string Status { get; set; } }

    public class Address { public List<AddressComponent> AddressComponents { get; set; } public string FormattedAddress { get; set; } public Geometry Geometry { get; set; } public string PlaceId { get; set; } public List<string> Types { get; set; } }

Así que puedes hacer algo como:

(...) var state = addressComponentes.FirstOrDefault(r => r.Types.Contains(AddressType.administrative_area_level_1.ToString()))?.ShortName;

  • También se puede utilizar para consultas de la API de Google Places.
  • Todos los métodos tienen una opción sobrecargada que le permite pasar su propio HttpClient si va a hacer varias llamadas para que pueda abrirlo / cerrarlo usted mismo.
  • Lo sentimos, aún no está completamente implementado / probado, pero para estas búsquedas básicas está funcionando totalmente.

Los métodos son fáciles de usar y tienen resúmenes con una explicación detallada.

Puede instalarlo con el comando nuget Install-Package Easyforce.GuigleAPI

Si solo desea el código fuente, el proyecto está disponible en GitHub . Siéntase libre de hacer un RP por su contribución =)


También puede usar la clase HttpClient que se usa a menudo con Asp.Net Web Api o Asp.Net 5.0.

También tiene un código de estado http gratuito, el modelo de programación asyn / await y el manejo de excepciones con HttpClient es tan sencillo como circular.

var address = "paris, france"; var requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false", Uri.EscapeDataString(address)); using (var client = new HttpClient()) { var request = await client.GetAsync(requestUri); var content = await request.Content.ReadAsStringAsync(); var xmlDocument = XDocument.Parse(content); }