.NET如何查找CivicAddress?
此代码返回一个空字符串。我能做些什么来退货.NET如何查找CivicAddress?,.net,windows-phone-7,.net,Windows Phone 7,此代码返回一个空字符串。我能做些什么来退货 CivicAddressResolver civicResolver = new CivicAddressResolver(); CivicAddress c = civicResolver.ResolveAddress(new GeoCoordinate(39,77)); textBlock1.Text = c.City; 这里真的没有足够的信息来评论任何事情。我们需要知道地址的作用。你想要它归还什么?似乎无论你在做什么,都找不到你发送的long/
CivicAddressResolver civicResolver = new CivicAddressResolver();
CivicAddress c = civicResolver.ResolveAddress(new GeoCoordinate(39,77));
textBlock1.Text = c.City;
这里真的没有足够的信息来评论任何事情。我们需要知道地址的作用。你想要它归还什么?似乎无论你在做什么,都找不到你发送的long/lat(我猜)
根据您要执行的操作,如果找不到您要查找的CivicAddress,则应返回空CivicAddress,然后在分配给textBlock1控件之前执行空检查。的MSDN文档建议,在尝试访问c.City之前检查c.IsUnknown将是一个好主意。来自: 此方法未在中实现 当前版本 我认为这就是为什么您在Windows Phone 7上没有得到结果的原因。
希望这个功能很快就可以使用。(最好通过OTA更新。)
如果您没有在电话中这样做,请适当地重新标记此问题。这表明您可以访问大量数据:世界上任何城市/城镇的街道/地址号码,无论他们选择支持哪个子集。我很难相信这会包括在手机上。也许最终会通过网络服务提供?在这种情况下,使用CivicAddressResolver.ResolveAddressAsync方法将非常有用。任何平台都不支持获取civic地址。我一直在考虑在桌面上使用它,发现我也有同样的行为。因此,我对.NET reflector进行了一些挖掘,发现resolve address调用实际上没有任何与调用所暗示的语义匹配的实现:
public CivicAddress ResolveAddress(GeoCoordinate coordinate)
{
if (coordinate == null)
{
throw new ArgumentNullException("coordinate");
}
if (coordinate.IsUnknown)
{
throw new ArgumentException("coordinate");
}
return coordinate.m_address;
}
也就是说,没有实际解决公民地址的坐标问题。它只返回从未设置的默认初始化地址
当我深入研究实际实现时,我发现它会检查是否可以从底层位置提供程序查询lat/long或civic地址。如果它可以查询lat/long,它将始终只查询lat/long,而永远不会获得公民地址
回到.NETAPI的语义,这意味着您要查找一个lat/long位置,然后对一个civic地址执行单独的解析。这不是底层(COM)API的实际工作方式。当您在API中查询某个位置时,您需要一份lat/long报告或civic address报告-您没有得到一份报告,然后再解析到另一份
因此,简而言之,我的结论是.NET实现是半生不熟的,而且从来没有经过适当的测试。我将围绕底层的COM API编写自己的.NET包装,不幸的是,这不是WinPhone所能做的。然而,奇怪的是,
CivicAddress
和CivicAddressResolver
都是框架类……我知道,但我想返回一些东西。通过添加这一点,我只会限制more=uYou想要返回一个地址,而这个方法一开始可能没有返回地址?似乎您需要一个默认地址,当CivicAddressResolver无法解析您提供的坐标时,可以返回该地址。如果是这样的话,检查IsUnknown仍然是处理这种情况的正确方法。(默认值可以是。)