2011-01-28 24 views
8

Perdonami per la mia ignoranza, ma dopo alcune ore di ricerche, ho avuto poca fortuna.Utilizzo dell'API Location di Google

In ogni caso, sto tentando di scrivere una piccola applicazione desktop che consentirà a un utente di inserire un indirizzo e di restituire la posizione approssimativa in coordinate GPS. Da quello che posso dire, Google fornisce un API geocoding [1] che permette le richieste di questo modulo:

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

Mentre ho familiarità con la scrittura di applicazioni di base C Sharp, davvero non hanno alcuna idea di dove inizia quando si tratta di interfacciare con questa API. Qualsiasi aiuto che voi ragazzi potreste fornire sarebbe molto apprezzato.

risposta

2

L'API Geocode è piuttosto semplice, per ottenere lat/lon dall'api sono necessari solo 3 parametri: output, sensore e indirizzo.

uscita il formato di output desiderato, JSON o XML (IIRC)

sensore deve essere un tempo booleano che indica o meno il valore proviene da un sensore come un chip GPS.

l'indirizzo deve essere l'indirizzo (non dimenticare di codificare l'URL) che si desidera geocodificare.

questo è un esempio, dove ho geocoding il mio indirizzo ufficio, e ottenere JSON in risposta: http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=1+Maritime+Plaza+San+Francisco+CA

Se navigare a che si dovrebbe vedere qualcosa di simile:

{ 
    "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 
     } 
     } 
    } 
    } ] 
} 

Se si prende il lat/lon fornito e posto su un map si vede un puntatore sul mio edificio per uffici.

+0

sarò sicuro di provare questo fuori. Volevo solo dire grazie, nel frattempo, lo apprezzo davvero. –

+0

Se aggiungi il parametro regione facoltativo, tenterà più difficile di restituire una posizione lì. –

0

Se si esegue questa operazione in C#, si desidera utilizzare le classi HttpWebRequest e HttpWebResponse. È possibile passare l'URL con parametri (chiamata API google) come argomento al metodo Create(). Suggerirei di richiedere che i dati vengano restituiti come dati XML. Dopo aver chiuso la connessione (httpWResp.Close()), puoi leggere usando un lettore di stream. Vedere la documentazione sul metodo 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 & indirizzo = 1 + Maritime + Plaza + San + Francisco + CA ");

HttpWebResponse HttpWResp = (HttpWebResponse) HttpWReq.GetResponse(); // Inserisci codice che utilizza l'oggetto risposta. HttpWResp.Vicino();

6

Ecco un codice di esempio per ottenere quello che vuoi

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; 
     } 


    } 

e classe di supporto sarebbe

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() 
     { } 
    } 


} 

quindi è possibile utilizzare questo codice nel vostro controllo/WinForms come questo

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

e creare il JS sul codice dietro usando StringBuilder o altro

13

libreria .NET completamente documentato -

Google Maps API dei servizi Web wrapper per .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

Qualcuno ha provato questa API sull'app MVC3 C#? Al mio fianco sta caricando la pagina da molto tempo: -? Ma quando eseguo un'applicazione per console tutto funziona correttamente. – czetsuya

+0

@czetsuya Ho avuto lo stesso problema con l'ultima versione su GitHub ieri sera. sembra appendere e non recuperare mai ... – Killnine

+0

L'abbiamo appena risolto pochi giorni fa. Assicurati di essere in esecuzione sull'ultima versione. Inoltre, caricherò un pacchetto nuget nei prossimi giorni. – Maxim

1

Recentemente ho dovuto costruire una Store Locator per un progetto cui sto lavorando. Non ho mai usato prima nessuna delle API di Google o Bing. Usando questo tutorial sono stato in grado di ottenere una buona conoscenza dell'API Location. Suggerirei di passare attraverso questo tutorial e alla fine dei tre tutorial dovresti avere una buona comprensione.

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

Utilizzando GuigleAPI nuget si può semplicemente fare:

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

Basta installarlo con il comando NuGet Installare-Pacchetto Easyforce.GuigleAPI e sei buono a andare.

Controllare questa risposta per maggiori dettagli: https://stackoverflow.com/a/44484010/1550202

Problemi correlati