40

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)
4

2 に答える 2

71

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

于 2010-07-26T14:42:36.567 に答える
13

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

次のSQLは、SQL Server2008R2以降で実行する必要があります。(エジンバラウェイバリー駅とロンドンチャリングクロス駅のビングマップの位置データのソース):

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

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

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

于 2014-12-12T10:13:20.073 に答える