我正在使用ASP.NET MVC 3和Google Maps v3。我想在一个动作中进行地理编码。也就是将有效地址传递给Google并获取经纬度。所有我看到的有关地理编码的在线示例都涉及客户端地理编码。您如何使用C#在动作中完成此操作?
我正在使用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);
}
}
L.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密钥,我遇到了一些问题。为了让事情正常运行,我修改了代码,将密钥附加到地址并将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;
}