2011-01-28 3 views
8

Простите меня за мое невежество, но после нескольких часов поиска у меня мало шансов.Работа с Google Location API

В любом случае, я пытаюсь написать небольшое настольное приложение, которое позволит пользователю ввести адрес, а затем приблизительное местоположение в координатах GPS. Из того, что я могу сказать, Google предоставляет геокодирования API [1], что позволяет запросы в следующем виде:

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

В то время как я знаком с написанием основных диез приложений, я действительно понятия не имею, куда когда дело доходит до взаимодействия с этим API. Любая помощь, которую вы, ребята, могли бы предоставить, была бы весьма признательна.

ответ

2

Geocode API довольно прост, чтобы получить lat/lon от api, вам нужно только 3 параметра: выход, датчик и адрес.

выходной формат вывода вы хотите, или JSON XML (IIRC)

датчик должен быть логическое значение, указывающее погода или нет значение поступает от датчика, такие как чип GPS.

Адрес должен быть адресом (не забудьте его закодировать), который вы хотите геокодировать.

Это пример, где я Геокодировать мой адрес офиса, и получить JSON в ответ: http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=1+Maritime+Plaza+San+Francisco+CA

Если перейти к тому, что вы должны увидеть что-то вроде:

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

Если взять lat/lon и разместить его на map, вы видите указатель на моем офисном здании.

+0

Я обязательно попробовать это. Я просто хотел сказать спасибо, тем не менее, я очень ценю это. –

+0

Если вы добавите необязательный параметр региона, он будет пытаться более тяжело вернуть туда место. –

0

Если вы делаете это на C#, вы захотите использовать классы HttpWebRequest и HttpWebResponse. Вы можете передать параметризованный URL (вызов API Google) в качестве аргумента метода Create(). Я бы предложил запросить, чтобы данные были возвращены в виде XML-данных. После того, как вы закроете соединение (httpWResp.Close()), вы можете читать с помощью устройства чтения потоков. Обратитесь к документации по методу 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 & адрес = 1 + Maritime + Plaza + San + Francisco + CA ");

HttpWebResponse HttpWResp = (HttpWebResponse) HttpWReq.GetResponse(); // Вставьте код, который использует объект ответа. HttpWResp.Закрыть();

6

Вот пример кода, чтобы получить то, что вы хотите

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


    } 

и вы вспомогательный класс будет

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


} 

Затем вы можете использовать этот код в ваш контроль/WinForms, как это

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

и постройте JS по коду позади, используя StringBuilder или anyting else

13

Полностью документированы .NET библиотека -

Google Maps API веб-служб обертка для .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

Кто-нибудь пробовал этот API для приложения MVC3 C#? В моей стороне это загрузка страницы в течение длительного времени: -? Но когда я запускаю консольное приложение, все работает нормально. – czetsuya

+0

@czetsuya У меня была такая же проблема с последней версией GitHub прошлой ночью. просто появляется, чтобы повесить и никогда не восстановить ... – Killnine

+0

Мы только что исправили это несколько дней назад. Убедитесь, что вы используете последнюю версию. Кроме того, я загружу пакет nuget в ближайшие дни. – Maxim

1

Недавно я должен был построить магазин локатор для проекта, я работаю. Я никогда раньше не использовал ни один из API Google или Bing. Используя этот учебник, я смог получить довольно хорошее представление о API Location. Я бы посоветовал пройти этот учебник, и к концу трех учебников вы должны иметь хорошее понимание.

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

С помощью GuigleAPI nuget вы можете просто сделать:

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

Просто установите его с помощью команды NuGet Install-Package Easyforce.GuigleAPI и ты хороший т o go.

Проверить этот ответ для более подробной информации: https://stackoverflow.com/a/44484010/1550202