Google Maps v3地理编码服务器端
本文关键字:编码 服务器端 Maps v3 Google | 更新日期: 2023-09-27 18:12:40
我正在使用ASP。. NET MVC 3和Google Maps v3。我想在一个动作中做地理编码。这是将一个有效地址传递给Google,并获得纬度和经度。我所见过的关于地理编码的所有在线示例都处理了客户端地理编码。你如何使用c#在一个动作中做到这一点?
我不确定我是否正确理解了你的意思,但这就是我的做法(如果你感兴趣的话)
void GoogleGeoCode(string address)
{
string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address=";
dynamic googleResults = new Uri(url + address).GetDynamicJsonObject();
foreach (var result in googleResults.results)
{
Console.WriteLine("[" + result.geometry.location.lat + "," + result.geometry.location.lng + "] " + result.formatted_address);
}
}
使用这里的扩展方法&Json。净
B的解决方法对我有效。然而,我遇到了一些运行时绑定问题,不得不在使用它们之前强制转换结果
public static Dictionary<string, decimal> GoogleGeoCode(string address)
{
var latLong = new Dictionary<string, decimal>();
const string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address=";
dynamic googleResults = new Uri(url + address).GetDynamicJsonObject();
foreach (var result in googleResults.results)
{
//Have to do a specific cast or we'll get a C# runtime binding exception
var lat = (decimal)result.geometry.location.lat;
var lng = (decimal) result.geometry.location.lng;
latLong.Add("Lat", lat);
latLong.Add("Lng", lng);
}
return latLong;
}
由于新的Google API要求使用有效的API Key,我遇到了一些问题。为了使事情正常工作,我修改了代码,将密钥附加到地址并将url更改为https
:
public Dictionary<string, decimal> GoogleGeoCode(string address)
{
var latLong = new Dictionary<string, decimal>();
string addressReqeust = address + "&key=your api key here";
const string url = "https://maps.googleapis.com/maps/api/geocode/json?sensor=true&address=";
dynamic googleResults = new Uri(url + addressReqeust).GetDynamicJsonObject();
foreach (var result in googleResults.results)
{
//Have to do a specific cast or we'll get a C# runtime binding exception
var lat = (decimal)result.geometry.location.lat;
var lng = (decimal)result.geometry.location.lng;
try
{
latLong.Add("Lat", lat);
latLong.Add("Lng", lng);
}
catch (Exception ex)
{
}
}
return latLong;
}