谷歌地图v3地理编码服务端

11

我正在使用ASP.NET MVC 3和Google Maps v3。我想在一个动作中进行地理编码。也就是将有效地址传递给Google并获取经纬度。所有我看到的有关地理编码的在线示例都涉及客户端地理编码。您如何使用C#在动作中完成此操作?

3个回答

16

我不确定我是否正确理解了您的意思,但这是我处理它的方式(如果您有兴趣)

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.Net


很好 - 謝謝分享。它運作得很好。你的範例是使用 Google Maps v3 對吧? - thd
不,这不是JavaScript API。我使用了http://code.google.com/apis/maps/documentation/geocoding/(`JSON输出格式`)中的文档。 - L.B
如果我打算将经纬度存储到数据库表中,这样是否仍然适用? - RyeNyeTheComputerScienceGuy

2

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

0

由于新的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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接