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

Gir*_*ish 5 c# nodatime

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

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

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

Mat*_*int 6

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嵌入式数据库.如果有人知道是否有,请告诉我们.

更新

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