C# 如何对地址进行地理编码

C# How to geocode an address

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

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> 但我希望得到空值,因为“kl13jk5 denver”不是有效地址。

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

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