【问题标题】:C# How to geocode an addressC#如何对地址进行地理编码
【发布时间】:2015-12-18 04:03:09
【问题描述】:

我正在使用它对地址进行地理编码

var address = "123 something st, somewhere";
var requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false", Uri.EscapeDataString(address));

var request = WebRequest.Create(requestUri);
var response = request.GetResponse();
var xdoc = XDocument.Load(response.GetResponseStream());

var result = xdoc.Element("GeocodeResponse").Element("result");
var locationElement = result.Element("geometry").Element("location");
var lat = locationElement.Element("lat");
var lng = locationElement.Element("lng");

这似乎有效,但仔细观察后发现它不起作用。

例如,如果我输入一个有效的地址,它会很好地对其进行地理编码。 但是,如果我输入了无效的地址,有时它仍然会很好地对其进行地理编码,结果会有一些其他地址。

例如,如果我提供地址“kl13jk5”,它不会对其进行地理编码并且响应将为空。这就是地址“kl13jk5”无效的预期结果。

但是,如果我输入“kl13jk5 denver”,我将收到带有格式地址的响应,例如<formatted_address>DENVER CO, USA</formatted_address>,但我希望得到 null,因为“kl13jk5 denver”不是有效地址。

我上面的代码有什么问题?

【问题讨论】:

    标签: c# geocoding


    【解决方案1】:

    您的代码没有问题,谷歌在找不到确切位置时会返回大致地址。如果您想知道它是否是 excat 匹配,您可以检查结果。检查location_type 的值,它会有GEOMETRIC_CENTER、'APPROXIMATE' 等值,从中您可以判断谷歌是在猜测它还是找到了实际地址。 check location_type here 还有partial_match

    【讨论】:

    • 是的,但是如果地址无效,location_type将为null,因此抛出NullReference异常
    • @dbnex14 如果它为空,那么地址根本不存在。如果它不为空,那么您可以检查 location_type 和 partial_match。
    • 在 Google 地理编码链接 (developers.google.com/maps/documentation/geocoding/intro) 上,我可以看到部分匹配的解释,但提供的 XML(或 Json)中没有部分匹配
    • @dbnex14 xdoc.Element("GeocodeResponse").Element("result").Element("partial_match")
    猜你喜欢
    • 2011-02-04
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多