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

C#如何对地址进行地理编码,c#,geocoding,C#,Geocoding,我用这个来给一个地址进行地理编码 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 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
”,我将得到一个格式化地址的响应,例如美国丹佛公司
denver
,但我希望得到空值,因为“
kl13jk5 denver
”不是有效地址


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

你的代码没有问题,谷歌在找不到确切位置时会返回大致地址。如果你想知道这是否是一场比赛,你可以检查结果。检查
location\u type
的值,它会有
GEOMETRIC\u CENTER
,“APPROXIMATE”等值,从这些值可以判断谷歌是在猜测还是找到了实际地址。
还有
partial\u match

是,但如果地址无效,位置类型将为null,因此会出现null引用异常thrown@dbnex14如果为空,那么地址就根本不存在。如果它不为null,那么您可以检查位置类型和部分匹配。在Google Geocoding链接(),我可以看到部分匹配是什么,但提供的XML(或Json)中没有部分匹配them@dbnex14
xdoc.Element(“地理编码响应”).Element(“结果”).Element(“部分匹配”)