質問

タイトルから推測できるように、一組の座標に基づいてタイム ゾーン (または単に UTC オフセット) を見つける必要があります。さまざまなソリューションを探しており、いくつかの Web サービスがありますが、アプリケーションにオフラインでアクセスできる必要があります。タイムゾーンは完全に経度に基づいていないため、それほど簡単ではないようです...

世界のすべての国とそのタイムゾーンを含む ESRI シェープファイルをクエリしようと考えましたが、少し複雑なようです。それが解決策である場合、この機能を提供する .NET ライブラリをご存知ですか?

役に立ちましたか?

他のヒント

私は、クライアントアプリケーションでこれを解決しました。技術は世界の色分けされた円筒状のマップを作成することで、各時間帯は、固有の色を有します。 LAT-ロンスは、座標をピクチャに変換され、座標の色は、その色のタイムゾーンへの相互参照。読み出された

これ短いのexplainationは、私はまったく同じものではありませんが、それは全体のアイデアを取得します。私は実際にカップルの辞書を埋め、そこから検索を行いました。 (私は私のマップを処理し、バイナリデータにそれを回した後)最初の演出は、投入するために、リソースファイルの2Mを取りました。 (赤道に近い緯度のための)理論的な最大誤差は+/-およそ15マイルされている必要があります。残念ながら、私の出発マップの精度はより+/- 100マイルのようでした。

だから私は、プロジェクトをやり直しています。私は今クランチの両方より正確で、より高いREZマップを作成し、そこに数日してきました。カップル日以上、それが行われる必要があります。私は唯一の「間抜けな領域を」リソースと数学(世界のほとんどは数学的に経度から導出することができる)を直接計算することができ、世界の90%を計算することを選択しない限り、リソースファイルは20Mの周りになります。わからない多くのリソースファイルは20Mが、いくつかのかもしれないだったことを気にします。いずれにしても、いくつかの興味があるように思われる場合、私はここでそれを実行するために必要なコードとリソースファイル1のパブリックコードサイトの一つを投稿しようとするでしょう。全く興味がないように思われる場合、私は気にしません。

ただ、再反復ビットに、あなたのアプリケーションに必要なコードはわずか数行ですが、リソースファイルが(/それを縮小O wが、私の新しいものが22Mを実行している)大きいです。また、高速である(最初の演出は、100M /秒走りました)。これは、ファイルのロードを必要としませんし、それは少し時間がかかります。 2Mのバージョンが目立った遅延がなかったが、22M(まだありませんが)可能性があります。

TZ のデータベースを確認してください。私はそれが(市、国、ESTなどのように)タイムゾーンに名前を関連付け知っています。しかし、私はどこかに座標の拡張機能があると考えています。

私はテーブルをエクスポートしようとしましたが、それは...しかし、それは難しいが、とにかくやっていることはなかったテキストにgeometryの種類をエクスポートすることができていないようです..あなたは、マニホールドは、数年前に生産さシェープファイルをGoogleに必要これが世界のすべてのcontriesをマッピングし、そのタイムゾーンが...そして、あなたには、いくつかのプログラムを使用してSQL Server 2008にそのデータをエクスポートする必要があります..私はマニホールドを使用し、私が使用してデータを照会すると...(上記のEnterprise Editionまたはを使用することを忘れないでください)次のストアドプロシージャ:

USE [MyDb]
GO
/****** Object:  StoredProcedure [dbo].[GetTimeZone]    Script Date: 11/18/2009 21:23:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetTimeZone]
    @Latitude float,
    @Longitude float
AS
    /* SET NOCOUNT ON */

DECLARE @g geometry

/* Validation */
IF @Latitude > 90 OR @Latitude < -90 OR @Longitude > 180 OR @Longitude < -180
    RAISERROR('Latitude or longitude out of range', 16, 1)

IF @Latitude IS NULL OR @Longitude IS NULL
    RAISERROR('Latitude or longitude cannot be null', 16, 1)

SET @g = geometry::Point(@Longitude, @Latitude, 4326);

IF EXISTS(SELECT * From TimeZones WHERE Shape.STContains(@g) = 1)
    /* Point exists on map, get the info */
    SELECT Name, LocalSumme, Offset, AreaI FROM TimeZones WHERE Shape.STContains(@g) = 1
ELSE
    /* Point is an international water */
    IF(@Longitude >= 0)
        SELECT NULL AS Name, NULL AS LocalSumme, FLOOR((@Longitude + 7.5) / 15) AS Offset, NULL AS AreaI
    ELSE
        SELECT NULL AS Name, NULL AS LocalSumme, -FLOOR((-@Longitude + 7.5) / 15) AS Offset, NULL AS AreaI
全国の海域がマップされていないため、

シェープファイルに問題があります。私は多分g.STBuffer @使用してのけれども()この問題に対処する..

ソリューションは、新しい空間データ型を使用してSQL Server 2008にESRIシェープファイルをエクスポートすることでした。

誰もがよりよい解決策を持っている場合は、投稿してみましょう!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top