6

NodaTime は既に olson データベース内に緯度/経度と国コードのデータを持っているため、緯度/経度 (Windows ストア アプリの GeoLocator.GetGeopositionAsync によって返される緯度/経度など) を指定して、タイムゾーンと国コードを特定できるかどうか疑問に思っていました。それから?

これに似たもの:var zone = session.GetZoneForLocation(latitude, longitude);これはhttps://github.com/mj1856/Raven.TimeZonesからのものです

私は特に NodaTime のようなオフライン ソリューションを検討しており、Web サービスを使用していません。

4

1 に答える 1

7

NodaTime 内に存在する緯度/経度データは、Olson データのzone.tabファイルから取得されます。これにより、ゾーンが参照として使用するマップ上のポイントの位置が得られます。

それが利用可能な唯一のデータである場合、任意の場所に対してできる最善の方法は、最も近い点を見つけることです。場合によっては、これで正確なタイム ゾーンが得られますが、多くの場合はそうではありません。

次の例を考えてみてください(私の拙いアートワークを許してください)

                            タイムゾーンのサンプルアート

2 つの四角形は異なるタイム ゾーンを表します。各四角形の黒い点は、zone.tab にあるような参照場所です。青い点は、入力クエリに渡す場所を表します。明らかに、この場所は左側のオレンジ色のゾーン内にありますが、基準点までの最も近い距離だけを見ると、右側の緑がかったゾーンに解決されます。

そのため、この操作を実行するには、zone.tab データ (野田時間で見つかったものなど) では不十分です。代わりに、単一の点だけでなく、境界を定義する形状の観点からゾーンを説明するものが必要です。幸いなことに、Eric Muller は親切にもこれらの形状を提供し、パブリック ドメインに置いてくれました。このデータはここにあります

あなたが見つけた私のRaven.TimeZonesプロジェクトはまさにそれを行います。Eric のシェープファイルからデータをインポートし、RavenDB の地理空間機能を使用してそのデータのインデックスとクエリを実行します。

私の実装を直接使用することも、必要な部分をコピーすることもできます。完全にオフラインで動作し、Web サービスの呼び出しは行いません。ただし、操作するには RavenDB のライセンスが必要です。

RavenDB を使用できない場合は、複雑な空間クエリをサポートする他のデータベースを使用して同様のアプローチを取ることができます。

特に、RavenDB は現在純粋な WinRT 環境では実行できないため、これを Windows ストア アプリで直接使用することはできません。地理空間クエリを実行できる WinRT 用の組み込みデータベースがあるかどうかはわかりません。ご存知の方がいらっしゃいましたら、ぜひお知らせください。

アップデート

タイム ゾーン ルックアップ メソッドの統合リストは、こちらにあります。

于 2013-10-02T18:51:58.587 に答える