SQL Server2008の新しいgeography列とSTGeomFromText関数で遊んでいます。これが私のコードです(AdventureWorks2008で動作します)
DECLARE @region geography;
set @region = geography::STGeomFromText('POLYGON((
-80.0 50.0, -90.0 50.0,
-90.0 25.0, -80.0 25.0,
-80.0 50.0))', 4326);
SELECT @region;
私の質問は、コード内の4326についてです。これは、空間参照IDであると想定されています。私がMSDNに行くとき、それについては多くはありません。値を56に変更すると、値がsys.spatial_reference_systemsテーブルにある必要があるというエラーが表示されます。
次のコマンドを実行すると、そのテーブルを確認できます。
select * from sys.spatial_reference_systems
そのテーブルにはwell_known_text列がありますが、あまりわかりません。 4326の値は次のとおりです。
GEOGCS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84", 6378137, 298.257223563]], PRIMEM["Greenwich", 0], UNIT["Degree", 0.0174532925199433]]
誰かがこの謎を私に説明できますか? SRIDとは何ですか?
それで私は昨日レーダー/マッピングの専門家であった元軍人と話をすることになった。基本的に、彼はその番号(4326)が何であるか、それがどこから来たのか、そしてなぜそこにあるのかを正確に知っていました。
これは、地理を計算するための業界標準です。問題は、地球が完全な球体ではなく(中央で膨らんでいる)、SRID4326がそれを説明していることです。
私が述べたように、テーブルsys.spatial_reference_systemsは、すべてのコードとそれらが何であるかをリストします。しかし、短いバージョンでは、別のものを使用する特別な理由がない限り、実際には4326のみを使用することになります。
地球をマッピングするシステムはたくさんあります。たとえば、米国のある州をマッピングするとします。最南東のポイントを0,0に設定し、このポイントに従って他のすべての空間座標をマップできます。一方、マップ全体にまたがるいくつかの空間データをマップしたい場合があります。いずれの場合も、0,0としていくつかのポイントを選択する必要があります。さらに、ある種の測定単位を選択する必要があります:マイル/キロメートル/度/あなたにより適した他の魔法の単位。何年にもわたって、そのようなシステムの多くが開発されました。それぞれに独自のゼロ点、独自の座標、地球が平らであるかどうかに関する独自のルールがあります。 SRIDまたはSRSは、そのようなシステムのIDです。このIDを使用すると、あるシステムで表現されたポイントを別のシステムにマッピングできますが、かなり複雑な計算が必要になる場合もあります。
そして約4326SRID。 「WGS84」( http://en.wikipedia.org/wiki/World_Geodetic_System )システムとも呼ばれます。これは、球形(平らではない)の地球上の点を表す最も一般的なシステムです。度、分、秒の表記を使用し、そのx座標とy座標は通常緯度と経度と呼ばれます。
最も使用されている非球体地球投影はUTMと呼ばれます。ここでそれについて読むことができます: http://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system
とにかく、あるシステムから別のシステムへの空間変換を行っていない限り、データが使用するシステムについてはあまり気にしません。
座標を比較するには、同じSRIDを使用する必要があります。そうしないと、キロメートルとマイルを比較することになります。または同様のもの。
私はこのウェブサイトを見つけました: http://spatialreference.org/ref/epsg/4326/ あなたが使用しようとしているSRIDを理解するのに非常に役立ちます。便利な地図、いくつかの境界ボックス情報、その他のリンクを提供します。
他のSRIDの場合は、URLの末尾の数字を目的の数字に変更するだけです。
返される距離は、地理タイプに対して定義した "空間参照識別子(SRID)" によって異なります。
以下の例では、デフォルトの [〜#〜] srid [〜#〜] の4336が使用されています。 STGeomFromText の2番目の引数を参照してください。これは、返される距離がメートル単位であることを意味します。これは、カタログビューをクエリすることで見つかります spatial_reference_systems つまり、select srs.unit_of_measure from sys.spatial_reference_systems as srs where srs.spatial_reference_id = 4326
STGeomFromText の代わりに、 parse を使用できます。これは、 [〜#〜] srid [〜#〜] が4326であると想定し、明示的に指定する必要はありません。
2点間の距離を計算するときは、両方の地理タイプに同じ [〜#〜] srid [〜#〜] を使用する必要があります。そうしないと、エラーが発生します。例:
DECLARE @address1 GEOGRAPHY
DECLARE @address2 GEOGRAPHY
DECLARE @distance float
SET @address1 = GEOGRAPHY::STGeomFromText ('point(53.046908 -2.991673)',4326)
SET @address2 = GEOGRAPHY::STGeomFromText ('point(51.500152 -0.126236)',4326)
SET @distance = @address1.STDistance(@address2)
SELECT @distance --this is the distance in meters