Google Maps v3地理编码服务器端

本文关键字:编码 服务器端 Maps v3 Google | 更新日期: 2023-09-27 18:12:40

我正在使用ASP。. NET MVC 3和Google Maps v3。我想在一个动作中做地理编码。这是将一个有效地址传递给Google,并获得纬度和经度。我所见过的关于地理编码的所有在线示例都处理了客户端地理编码。你如何使用c#在一个动作中做到这一点?

Google Maps v3地理编码服务器端

我不确定我是否正确理解了你的意思,但这就是我的做法(如果你感兴趣的话)

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;
}