使用Google Location API

Bil*_*nce 8 c# geolocation

原谅我的无知,但经过几个小时的搜索,我没有运气.

无论如何,我正在尝试编写一个小型桌面应用程序,允许用户输入地址,然后在GPS坐标中返回其大致位置.据我所知,Google提供了一个地理编码API [1],允许采用以下形式的请求:

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

虽然我熟悉编写基本的C Sharp应用程序,但我真的不知道在与这个API接口时从哪里开始.你们可以提供的任何帮助将不胜感激.

Max*_*xim 13

完整记录的.NET库 -

适用于.NET的Google Maps Web Services API包装器 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);
Run Code Online (Sandbox Code Playgroud)


Nav*_*mad 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;
        }


    }
Run Code Online (Sandbox Code Playgroud)

而你的帮助班就是

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


}
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的控件/ winforms中使用这个代码

            GeoResponse response = new GeoResponse();
            response = GoogleMaps.GetGeoCodedResults(TextBoxPostcode.Text);
Run Code Online (Sandbox Code Playgroud)

并使用StringBuilder或其他任何方法在后面的代码上构建JS


Unk*_*ech 2

Geocode API 相当简单,要从 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
        }
      }
    }
  } ]
}
Run Code Online (Sandbox Code Playgroud)

如果您获取提供的经纬度并将其放在地图上,会看到我的办公楼上有一个指针。