繁体   English   中英

使用NodaTime获取纬度和经度的国家/地区代码

[英]Get country code by latitude and longitude using NodaTime

由于NodaTime已经在olson数据库中有纬度/经度和国家代码数据,我想知道我们是否可以指定任何纬度/经度(比如GeoLocator.GetGeopositionAsync在Windows应用商店应用中返回的任何纬度/经度)并确定时区和国家/地区代码从中?

与此类似的东西: var zone = session.GetZoneForLocation(latitude, longitude); 这是来自https://github.com/mj1856/Raven.TimeZones

我特别关注像NodaTime这样的离线解决方案,而不是使用Web服务。

NodaTime中存在的lat / lon数据来自Olson数据中的zone.tab文件。 这将给出区域中用作参考的的位置。

如果这是您可用的唯一数据,那么您可以为任意位置做的最好的事情就是找到最近的点。 某些情况下,这将为您提供准确的时区,但在许多情况下,它不会。

考虑以下示例(请原谅我可怜的艺术作品)

时区示例艺术

两个方块代表不同的时区,每个方块中的黑点是参考位置,例如您在zone.tab中可以找到的位置。 蓝点表示您要传递给输入查询的位置。 显然,这个位置位于左侧的橙色区域内,但是如果我们只看到距离参考点的最近距离,它将会解析到右侧的绿色区域。

因此,zone.tab数据(例如在Noda Time中找到)不足以执行此操作。 相反,我们需要根据定义边界的形状来描述区域,而不仅仅是单个点。 幸运的是,Eric Muller非常善于提供这些形状并将它们置于公共领域。 你可以在这里找到这些数据

我发现的我的Raven.TimeZones项目正是如此。 它从Eric的shapefile导入数据,并使用RavenDB的地理空间特征来索引和查询该数据。

你当然可以直接使用我的实现,或者从你需要的任何部分复制它。 它完全脱机工作,不进行Web服务调用。 但它确实需要RavenDB的许可才能运行。

如果您无法使用RavenDB,则可以使用支持复杂空间查询的任何其他数据库采用类似的方法。

特别是 - RavenDB目前无法在纯WinRT环境中运行,因此您无法在Windows应用商店应用中直接使用它。 我不确定是否有任何可以执行地理空间查询的WinRT嵌入式数据库。 如果有人知道是否有,请告诉我们。

更新

可以在此处找到时区查找方法的综合列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM