如何从C#代码调用Google Geocoding服务

vai*_*hah 43 c# google-api

我在C#中有一个类库.从那里我必须致电谷歌服务并获得经纬度.

我知道如何在页面上使用AJAX,但我想直接从我的C#类文件中调用Google Geocoding服务.

有没有办法做到这一点,还是有任何其他服务,我可以用它.

Chr*_*son 103

你可以这样做:

string address = "123 something st, somewhere";
string requestUri = string.Format("https://maps.googleapis.com/maps/api/geocode/xml?key={1}&address={0}&sensor=false", Uri.EscapeDataString(address), YOUR_API_KEY);

WebRequest request = WebRequest.Create(requestUri);
WebResponse response = request.GetResponse();
XDocument xdoc = XDocument.Load(response.GetResponseStream());

XElement result = xdoc.Element("GeocodeResponse").Element("result");
XElement locationElement = result.Element("geometry").Element("location");
XElement lat = locationElement.Element("lat");
XElement lng = locationElement.Element("lng");
Run Code Online (Sandbox Code Playgroud)

您还需要验证响应状态并捕获任何WebExceptions.看看Google Geocoding API.

  • 这不再起作用,您必须获取一个API密钥并在查询字符串中使用它。 (3认同)

小智 33

我没有评论的声誉,但只是想说Chris Johnsons代码就像一个魅力.对于像我这样愚蠢的人来说,集会是:

using System.Net;
using System.Xml.Linq;
Run Code Online (Sandbox Code Playgroud)

  • 不知道集会是不是愚蠢的.很多人都很欣赏有人发布这个 (13认同)

Pas*_*cal 7

您还可以使用经常与Asp.Net Web Api或Asp.Net 5.0一起使用的HttpClient类.

你还有一个免费的http状态代码,asyn/await编程模型和HttpClient的异常处理很容易.

var address = "paris, france";
var requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false", Uri.EscapeDataString(address));

using (var client = new HttpClient())
{
    var request = await client.GetAsync(requestUri);
    var content = await request.Content.ReadAsStringAsync();
    var xmlDocument = XDocument.Parse(content);

}
Run Code Online (Sandbox Code Playgroud)


JP *_*ons 5

这是一个老问题。但是我今天遇到了同样的问题,并提出了一个解决方案:C# GeoCoding / Address Validation API(支持包括谷歌地图在内的多个提供商)。

IGeocoder geocoder = new GoogleGeocoder() { ApiKey = "this-is-my-optional-google-api-key" };

IEnumerable<Address> addresses = await geocoder.GeocodeAsync("1600 pennsylvania ave washington dc");

Console.WriteLine("Formatted: " + addresses.First().FormattedAddress);
// Formatted: 1600 Pennsylvania Ave SE, Washington, DC 20003, USA

Console.WriteLine("Coordinates: " + addresses.First().Coordinates.Latitude + ", " + addresses.First().Coordinates.Longitude);
// Coordinates: 38.8791981, -76.9818437
Run Code Online (Sandbox Code Playgroud)

这是相应的 NuGet 包:

安装包Geocoding.Google