2011-01-28 16 views
8

Wybacz moją ignorancję, ale po kilku godzinach poszukiwań, mam trochę szczęścia.Praca z Google Location API

W każdym razie, ja próbuje napisać mały program komputerowy, który pozwoli użytkownikowi wprowadzić adres, a następnie mają ich przybliżona lokalizacja zwrócony w współrzędnych GPS. Z tego, co mogę powiedzieć, Google zapewnia geokodowanie API [1], która pozwala wnioski w następującej formie:

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

gdy jestem zaznajomiony z pisania podstawowych aplikacji Ostre C, I naprawdę nie mam pojęcia, gdzie zacząć, jeśli chodzi o łączenie się z tym API. Każda pomoc, którą moglibyście zapewnić, byłaby bardzo doceniana.

Odpowiedz

2

przetwarzania danych geograficznych API jest dość proste, aby uzyskać lat/lon z api trzeba tylko 3 params: moc, czujników i adresowych.

wyjściowy format wyjściowy chcesz, JSON lub XML (IIRC)

czujnik powinien być logiczną wskazującą, czy pogoda nie wartość pochodzi z czujnika, takiego jak chip GPS.

adres powinien być adres (nie zapomnij url zakodować) chcesz Geokodując.

To jest przykład, gdzie Geokodując mój adres biura i uzyskać JSON w odpowiedzi: http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=1+Maritime+Plaza+San+Francisco+CA

Jeśli poruszanie się, że powinieneś zobaczyć coś takiego:

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

jeśli wziąć lat/lon dostarczone i umieścić go na map widać wskaźnik na moim biurowcu.

+0

będę spróbować to. Chciałem tylko podziękować w międzyczasie, naprawdę to doceniam. –

+0

Dodanie opcjonalnego parametru regionu spowoduje, że będzie trudniej zwrócić tam swoją lokalizację. –

0

Jeśli robisz to w języku C#, będziesz chciał użyć klas HttpWebRequest i HttpWebResponse. Można przekazać sparametryzowany adres URL (wywołanie google API) jako argument do metody Create(). Sugerowałbym żądanie zwracania danych jako danych XML. Po zamknięciu połączenia (httpWResp.Close()) można odczytać za pomocą czytnika strumieniowego. Zobacz dokumentację na metodzie 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 & address = 1 + Maritime + Plaza + San + Francisco + CA ");

HttpWebResponse HttpWResp = (HttpWebResponse) HttpWReq.GetResponse(); // Wstaw kod korzystający z obiektu odpowiedzi. HttpWResp.Blisko();

6

Oto przykładowy kod, aby dostać to, czego chcesz

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


    } 

i pomocnika klasa byłaby

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


} 

Następnie można użyć tego kodu w kontroli/WinForms jak to

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

i zbuduj JS na kodzie za pomocą StringBuilder lub w innym miejscu

13

pełni udokumentowane NET biblioteka -

Mapy Google Web Services API otoki 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

Ktoś wypróbował ten interfejs API w aplikacji MVC3 C#? W mojej stronie to ładowanie strony przez długi czas: -? Ale kiedy uruchamiam aplikację konsolową, wszystko działa dobrze. – czetsuya

+0

@czetsuya Miałem ten sam problem z najnowszą wersją na GitHub ostatniej nocy. po prostu wydaje się powiesić i nigdy nie odzyskać ... – Killnine

+0

Naprawiliśmy to kilka dni temu. Upewnij się, że korzystasz z najnowszej wersji. Dodatkowo prześlę pakiet nuget w ciągu następnych dni. – Maxim

1

Niedawno miałem zbudować Store Locator dla projektu pracuję nad. Nigdy wcześniej nie korzystałem z żadnego z interfejsów API Google ani Bing. Korzystając z tego samouczka, udało mi się całkiem dobrze zrozumieć interfejs API lokalizacji. Sugerowałbym przejście przez ten samouczek i do końca trzech tutoriali powinieneś mieć dobre zrozumienie.

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

Korzystając GuigleAPI nuget można po prostu zrobić:

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

Wystarczy zainstalować go z Nuget polecenia Install-Package Easyforce.GuigleAPI i jesteś dobry iść.

Sprawdź tę odpowiedź więcej szczegółów: https://stackoverflow.com/a/44484010/1550202