我在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.
小智 33
我没有评论的声誉,但只是想说Chris Johnsons代码就像一个魅力.对于像我这样愚蠢的人来说,集会是:
using System.Net;
using System.Xml.Linq;
Run Code Online (Sandbox Code Playgroud)
您还可以使用经常与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)
这是一个老问题。但是我今天遇到了同样的问题,并提出了一个解决方案: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 包:
归档时间: |
|
查看次数: |
87535 次 |
最近记录: |