Работа с Google Location API - PullRequest
       4

Работа с Google Location API

8 голосов
/ 28 января 2011

Простите за мое невежество, но после нескольких часов поиска мне не везет.

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

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

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

Ответы [ 6 ]

13 голосов
/ 19 мая 2011

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

Оболочка API Карт Google для .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);
6 голосов
/ 18 февраля 2011

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

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 или любой другой

2 голосов
/ 28 января 2011

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

выведите желаемый формат вывода: json или xml (IIRC)

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

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

Это пример, в котором я геокодирую адрес своего офиса и в ответ получаю 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
        }
      }
    }
  } ]
}

Если вы возьмете предоставленный широту / долготу и поместите его на карту , вы увидите указатель на мое офисное здание.

1 голос
/ 11 июня 2017

Используя 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 и все готово.

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

1 голос
/ 09 февраля 2012

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

Создание приложения ASP.NET для поиска магазинов с использованием Google Maps API (часть 1)

Создание приложения ASP.NET для поиска магазинов с использованием Google Maps API (часть 2)

Создание приложения ASP.NET для поиска магазинов с использованием API Карт Google (часть 3)

0 голосов
/ 18 февраля 2011

Если вы делаете это в 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&address=1+Maritime+Plaza+San+Francisco+CA");

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

...