我在C#中有一个类库。从那里我必须拨打谷歌服务&获取纬度&经度。如何从C#代码调用Google地理编码服务
我知道如何在页面上使用AJAX,但我想直接从我的C#类文件调用Google地理编码服务。
有没有办法做到这一点或有任何其他服务,我可以使用这个。
我在C#中有一个类库。从那里我必须拨打谷歌服务&获取纬度&经度。如何从C#代码调用Google地理编码服务
我知道如何在页面上使用AJAX,但我想直接从我的C#类文件调用Google地理编码服务。
有没有办法做到这一点或有任何其他服务,我可以使用这个。
你可以做这样的事情:
string address = "123 something st, somewhere";
string requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false", Uri.EscapeDataString(address));
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");
你也想验证响应状态和捕捉任何WebExceptions。看看Google Geocoding API。
什么是locationElement? – 2013-04-29 09:32:50
我留下了一条线,编辑它。 – 2013-04-29 09:37:02
确保添加'使用System.Xml.Linq;'(和对应的引用,如果缺少 - System.Xml.Linq.dll)。 – 2015-03-12 18:15:45
您可以调用Web服务并使用json/xml响应。
这将返回一个JSON响应,你可以工作。
正如你可以阅读使用条款,你只允许使用他们的网络服务,如果你显示谷歌地图。
在这里你可以找到有关该服务的所有信息:https://developers.google.com/maps/documentation/geocoding/
要了解如何处理JSON响应,看看这个话题:Google Maps v3 geocoding server-side
编辑: 我刚刚发现这篇文章:http://www.codeproject.com/Tips/505361/Google-Map-Distance-Matrix-and-Geocoding-API-V3-we
我没有测试这一点,但也许它为你工作:)
编辑2:该代码项目的例子似乎并没有工作:(在那里提到的url总是返回相同的,无论输入什么地址点...
但是,你应该尝试使用JSON或XML结果,因为这是我想说的最佳做法。
我没有评论的声望,但只是想说,Chris Johnsons的代码就像一个魅力。对于任何愚蠢的我,该组件是:
using System.Net;
using System.Xml.Linq;
不知道程序集并不愚蠢,很多人都明白有人发布这个 – 2016-05-27 01:55:32
您也可以使用它往往与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);
}
这可能不是很多,但我只是想在@克里斯约翰逊代码一个改进,如果你只是想获得的纬度和经度值双形式克里斯 - 约翰逊的VAR纬度和VAR LNG具有价值用这种格式< lat> ... number ...</LAT>
所以,如果你传递值是一个字符串得到的数值,你必须对这个答案做这样
double latitude = Double.Pars(lat.Value)
double longitude = Double.Pars(lng.Value)
这可能有点为时已晚,但对于那些仍然得到这里寻找一种简单的方式来使用谷歌地理编码API,我写了这个简单的nugget called Guigle API,它可以这样使用:
GoogleGeocodingAPI.GoogleAPIKey = "YOUR API KEY";
AddressResponse result = await GoogleGeocodingAPI.SearchAddressAsync("100 Market St, Southbank");
OR
var result = await GoogleGeocodingAPI.GetCityFromCoordinatesAsync(11.1111, 22.2222);
var city = result.Item1;
var country = result.Item3;
我喜欢的一件事是,您可以从API响应中获得完整的对象,因此您可以轻松访问所有内容,并且可以使用Linq和其他集合帮助器轻松地从中获取数据。例如,对于地址,您将这些类型多:
public class AddressResponse
{
public List<Address> Results { get; set; }
public string Status { get; set; }
}
public class Address
{
public List<AddressComponent> AddressComponents { get; set; }
public string FormattedAddress { get; set; }
public Geometry Geometry { get; set; }
public string PlaceId { get; set; }
public List<string> Types { get; set; }
}
所以,你可以这样做:
(...)
var state = addressComponentes.FirstOrDefault(r => r.Types.Contains(AddressType.administrative_area_level_1.ToString()))?.ShortName;
该方法易于使用,并有详细的解释总结。
您可以用的NuGet命令安装安装,包装Easyforce.GuigleAPI
如果你只是想在源代码中的项目可以用GitHub。随时为您的贡献PR =)
这是一个古老的问题。但是今天我有同样的问题,以及与此想出了一个解决方案:https://github.com/chadly/Geocoding.net
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
下面是相应的NuGet:
安装,包装Geocoding.Google
你有没有试过到目前为止的事情 – 2013-04-29 08:44:37
看看'HttpWebRequest'类 – 2013-04-29 08:51:26
@SonerGönül我正试图在本教程中这样做http://friism.com/c-and-google-geocoding-web-service-v3 – 2013-04-29 08:57:14