使用谷歌地理编码从地址获取latlong

时间:2013-09-12 08:05:55

标签: c#

我正在使用谷歌地理编码api从地址获取经度和经度。但是它给出了异常

  

远程服务器返回错误:(403)Forbidden。

代码如下:

WebClient client = new WebClient();
Uri uri = GetGeocodeUri(address);
string[] geocodeInfo = client.DownloadString(uri).Split(',');
return new Coordinate(Convert.ToDecimal(geocodeInfo[2]),convert.ToDecimal(geocodeInfo[3]));

例外情况来自“downloadstring”时的第3行。 请帮帮我。

2 个答案:

答案 0 :(得分:1)

之前是否正常工作,现在停止工作了? GeoCoding有使用限制,如果超过这些限制,可以返回403.

https://developers.google.com/maps/documentation/business/articles/usage_limits

剪断:

  

HTTP 403响应

     

对Web服务的请求也可能会收到HTTP 403(禁止)   错误。在大多数情况下,这是由于URL签名无效。至   验证这一点,删除客户端和签名参数,然后重试:

     

如果响应是HTTP 200(OK),则签名是问题。这个   与使用限制无关;请参阅生成有效签名   Maps API for Business文档的Web服务章节   细节。如果响应仍然是HTTP 403(Forbidden)错误,则   签名不一定是问题,可能与使用有关   改为限制。这通常意味着您可以访问Web服务   因为你的申请已被阻止而被封锁   超过使用限制太久或以其他方式滥用网络   服务。如果您遇到,请与Google Enterprise支持小组联系   这个问题。对所有Web服务的请求都需要URL签名。   如果出现HTTP 403(Forbidden)错误,也会拒绝请求   包括客户端参数但缺少签名参数,或   反之亦然。

答案 1 :(得分:0)

var loc = await GetLocation("central park");

public static async Task<GeoCoordinate> GetLocation(string address)
{
    string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address=";

    using (WebClient wc = new WebClient())
    {
        wc.Encoding = Encoding.UTF8;
        string json = await  wc.DownloadStringTaskAsync(url + address);
        dynamic result = await JsonConvert.DeserializeObjectAsync(json);
        var loc = result.results[0].geometry.location;
        return new GeoCoordinate((double)loc.lat, (double)loc.lng);
    }
}