web-dev-qa-db-ja.com

SQL Server 2008 GEOGRAPHY STDistance()の値

Geography.STDistance()を使用して、2つの単一ポイントの位置間の距離を返しています。戻り値にどの測定が使用されているか知りたいのですが?それは、KM、マイル、またはおそらく他の何かにありますか?

250kを超える結果が返されますが、TSQLが過去の場所(つまり、存在しない)であるため、TSQLで何か問題が発生しているかどうかはわかりません。

declare @p1 geography

declare @p2 geography

SELECT @p1 = Location from tblLocations where Id = 1
SELECT @p2 = Location from tblLocations where Id = 2

select @p1.STDistance(@p2)
37
Chris

戻り値の測定は、地理データタイプの 空間参照識別子(SRID) に依存すると思います。デフォルトは4326で、メートル単位です。チェックできるDBのテーブルがありますSelect * from sys.spatial_reference_systems

63
SPE109

GEOMETRYタイプでSTDistanceを使用するときに答えを探してここに到着した人々をカバーするためだけに、結果は「座標値自体と同じ測定単位で表されます」(「SQL Server 2008の空間データの開始」から)WGS84/SRIDの場合4326データは度単位です。

次のSQLは、SQL Server 2008 R2以降で実行する必要があります。 (エジンバラウェイバリーとロンドンチャリングクロスステーションの地図の位置データのソース):

DECLARE @edinGeom GEOMETRY = GEOMETRY::STGeomFromText('POINT(-3.1917 55.9517)', 4326)
DECLARE @cxGeom GEOMETRY = GEOMETRY::STGeomFromText('POINT(-0.1252 51.5083)', 4326)
SELECT @edinGeom.STDistance(@cxGeom), sqrt(square(3.1917-0.1252) + square(55.9517-51.5083)) AS 'Distance from Pythagoras';

DECLARE @MetersPerMile FLOAT = 1609.344;
DECLARE @edinGeog GEOGRAPHY = GEOGRAPHY::STGeomFromText('POINT(-3.1917 55.9517)', 4326)
DECLARE @cxGeog GEOGRAPHY = GEOGRAPHY::STGeomFromText('POINT(-0.1252 51.5083)', 4326)
SELECT @edinGeog.STDistance(@cxGeog), @edinGeog.STDistance(@cxGeog)/@MetersPerMile;

GEOMETRYタイプを使用した最初の3行の結果は次のとおりです。

STDistance Geom: 5.39881707506376、ピタゴラスからの距離: 5.39881707506376

GEOGRAPHYタイプの結果は次のとおりです。

STDistance Geog: 534226.761544321、マイルに変換: 331.953119745885

2点間の距離としてBingマップに示されているものとうまく結びついている、GEOGRAPHY計算からの「331マイル」程度(明らかにこれは何かの証拠ではありませんが、同様の基本的な計算を示唆しています)。

GEOMETRY計算によって出力された数値は、結果が度数で非常に明確であることを示しています。値は明らかにピタゴラスを使用して計算されています(ポイントとポリゴン間の距離を取得している場合、基になる計算はより複雑になります)。

11
Nij