簡體   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