2011-01-28 18 views
8

Perdóneme por mi ignorancia, pero después de varias horas de búsqueda, estoy teniendo poca suerte.Trabajando con la API de Google Location

De todos modos, intento escribir una pequeña aplicación de escritorio que permita al usuario ingresar una dirección y luego devolver su ubicación aproximada en coordenadas de GPS. De lo que puedo decir, Google ofrece una API de geocodificación [1] que permite a las peticiones de la siguiente forma:

http://maps.googleapis.com/maps/api/geocode/output?parameters

mientras estoy familiarizado con la escritura de aplicaciones básicas do sostenido, que realmente no tienen idea de dónde comenzar cuando se trata de interactuar con esta API. Cualquier ayuda que ustedes puedan proporcionar sería muy apreciada.

Respuesta

2

La API Geocode es bastante simple, para obtener lat/lon de la API solo necesita 3 parámetros: salida, sensor y dirección.

de salida el formato de salida que desee, JSON o XML (IIRC)

sensor debe ser un tiempo que indica booleano o no el valor proviene de un sensor tal como un chip GPS.

dirección debe ser la dirección (no olvide url codificarlo) que desea geocodificar.

Este es un ejemplo, donde GeoCode mi dirección de oficina, y obtener JSON en respuesta: http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=1+Maritime+Plaza+San+Francisco+CA

Si se desplaza a que se debe ver algo como:

{ 
    "status": "OK", 
    "results": [ { 
    "types": [ "street_address" ], 
    "formatted_address": "1 Maritime Plaza, San Francisco, CA 94111, USA", 
    "address_components": [ { 
     "long_name": "1", 
     "short_name": "1", 
     "types": [ "street_number" ] 
    }, { 
     "long_name": "Maritime Plaza", 
     "short_name": "Maritime Plaza", 
     "types": [ "route" ] 
    }, { 
     "long_name": "San Francisco", 
     "short_name": "San Francisco", 
     "types": [ "locality", "political" ] 
    }, { 
     "long_name": "San Francisco", 
     "short_name": "San Francisco", 
     "types": [ "administrative_area_level_3", "political" ] 
    }, { 
     "long_name": "San Francisco", 
     "short_name": "San Francisco", 
     "types": [ "administrative_area_level_2", "political" ] 
    }, { 
     "long_name": "California", 
     "short_name": "CA", 
     "types": [ "administrative_area_level_1", "political" ] 
    }, { 
     "long_name": "United States", 
     "short_name": "US", 
     "types": [ "country", "political" ] 
    }, { 
     "long_name": "94111", 
     "short_name": "94111", 
     "types": [ "postal_code" ] 
    } ], 
    "geometry": { 
     "location": { 
     "lat": 37.7953907, 
     "lng": -122.3991803 
     }, 
     "location_type": "ROOFTOP", 
     "viewport": { 
     "southwest": { 
      "lat": 37.7922431, 
      "lng": -122.4023279 
     }, 
     "northeast": { 
      "lat": 37.7985383, 
      "lng": -122.3960327 
     } 
     } 
    } 
    } ] 
} 

Si se toma el lat/lon proporcionado y colocarlo en un map ve un puntero en mi edificio de oficinas.

+0

voy a estar seguro de probar esto. Solo quería agradecer mientras tanto, realmente lo aprecio. –

+0

Si agrega el parámetro de región opcional, tratará más arduamente de devolver una ubicación allí. –

0

Si haces esto en C#, querrás utilizar las clases HttpWebRequest y HttpWebResponse. Puede pasar la URL parametrizada (llamada a la API de google) como argumento del método Create(). Sugeriría solicitar que los datos se devuelvan como datos XML. Después de cerrar la conexión (httpWResp.Close()), puede leer usando un lector de flujo. Consulte la documentación del método GetResponseStream(): http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.getresponsestream.aspx

HttpWebRequest HttpWReq = (HttpWebRequest) WebRequest.Create ("http://maps.googleapis.com/maps/api/geocode/xml?sensor=false & dirección = 1 + Maritime + Plaza + San + Francisco + CA ");

HttpWebResponse HttpWResp = (HttpWebResponse) HttpWReq.GetResponse(); // Insertar código que usa el objeto de respuesta. HttpWResp.Cerca();

6

Aquí hay un código de ejemplo para obtener lo que desea

using System; 
using System.Web; 
using System.Net; 
using System.Runtime.Serialization.Json; 

namespace GoogleMapsSample 
{ 
    public class GoogleMaps 
    { 

     /// <summary> 
     /// 
     /// </summary> 
     /// <param name="address"></param> 
     /// <returns></returns> 
     public static GeoResponse GetGeoCodedResults(string address) 
     { 
      string url = string.Format(
        "http://maps.google.com/maps/api/geocode/json?address={0}&region=dk&sensor=false", 
        HttpUtility.UrlEncode(address) 
        ); 
      var request = (HttpWebRequest)HttpWebRequest.Create(url); 
      request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
      request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
      DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(GeoResponse)); 
      var res = (GeoResponse)serializer.ReadObject(request.GetResponse().GetResponseStream()); 
      return res; 
     } 


    } 

y que clase de ayuda sería

namespace GoogleMapsSample 
{ 
    [DataContract] 
    public class GeoResponse 
    { 
     [DataMember(Name = "status")] 
     public string Status { get; set; } 
     [DataMember(Name = "results")] 
     public CResult[] Results { get; set; } 

     [DataContract] 
     public class CResult 
     { 
      [DataMember(Name = "geometry")] 
      public CGeometry Geometry { get; set; } 

      [DataContract] 
      public class CGeometry 
      { 
       [DataMember(Name = "location")] 
       public CLocation Location { get; set; } 

       [DataContract] 
       public class CLocation 
       { 
        [DataMember(Name = "lat")] 
        public double Lat { get; set; } 
        [DataMember(Name = "lng")] 
        public double Lng { get; set; } 
       } 
      } 
     } 

     public GeoResponse() 
     { } 
    } 


} 

continuación, puede utilizar este código en tu control/WinForms como este

  GeoResponse response = new GeoResponse(); 
      response = GoogleMaps.GetGeoCodedResults(TextBoxPostcode.Text); 

y construye el JS en el código detrás de usar StringBuilder o anyting else

13

totalmente documentado NET -

Maps Google Web Services API envoltorio para .NET https://github.com/maximn/google-maps/

//Directions 
DirectionsRequest directionsRequest = new DirectionsRequest() 
{ 
     Origin = "NYC, 5th and 39", 
     Destination = "Philladephia, Chesnut and Wallnut", 
}; 

     DirectionsResponse directions = MapsAPI.GetDirections(directionsRequest); 

//Geocode 
GeocodingRequest geocodeRequest = new GeocodingRequest() 
{ 
     Address = "new york city", 
}; 


GeocodingResponse geocode = MapsAPI.GetGeocode(geocodeRequest); 

Console.WriteLine(geocode); 

//Elevation 
ElevationRequest elevationRequest = new ElevationRequest() 
{ 
     Locations = new Location[] { new Location(54, 78) }, 
}; 


ElevationResponse elevation = MapsAPI.GetElevation(elevationRequest); 

Console.WriteLine(elevation); 
+0

¿Alguien ha probado esta API en la aplicación MVC3 C#? En mi lado está cargando la página por mucho tiempo: -? Pero cuando ejecuto una aplicación de consola todo está funcionando bien. – czetsuya

+0

@czetsuya Tuve el mismo problema con la última versión en GitHub anoche. parece que se cuelga y nunca se recupera ... – Killnine

+0

Lo arreglamos hace unos días. Por favor, asegúrese de ejecutar la última versión. Además, subiré un paquete nuget en los próximos días. – Maxim

1

Recientemente tuve que construir un localizador de tiendas para un proyecto que estoy trabajando. Nunca antes había usado alguna de las API de Google o Bing. Utilizando este tutorial, pude obtener una buena comprensión de la API de ubicación. Sugiero que revises este tutorial y al final de los tres tutoriales debes entenderlo bien.

Building a Store Locator ASP.NET Application Using Google Maps API (Part 1)

Building a Store Locator ASP.NET Application Using Google Maps API (Part 2)

Building a Store Locator ASP.NET Application Using Google Maps API (Part 3)

0

Mediante el uso de GuigleAPI nuget puede simplemente hacer:

GoogleGeocodingAPI.GoogleAPIKey = "YOUR API KEY"; 
var result = await GoogleGeocodingAPI.GetCoordinatesFromAddressAsync("100 Market St, Southbank"); 
var latitude = result.Item1; 
var longitude = result.Item2; 

sólo tiene que instalar con el comando Nuget Instalar Paquete Easyforce.GuigleAPI y eres bueno para ir.

Comprobar esta respuesta para más detalles: https://stackoverflow.com/a/44484010/1550202

Cuestiones relacionadas