2016-05-23 5 views
1

私は2つのポイントを持っており、それらの差を計算する必要があります。postgresql(PostGIS)とSQL(Sptial)の結果の差異

私はSQLで以下のクエリを使用しています。罰金と結果を実行している

SELECT geography::Point(27.185425, 88.124582, 4326).STDistance(geography::Point(27.1854258, 88.124500, 4326)); 

ITSは次のとおりです。同じポイントで今

8.12599260290125 

私はPostgreSQLのクエリの下に実行していたとき。

SELECT ST_Distance(ST_GeomFromText('POINT(27.185425 88.124582)',4326),ST_GeomFromText('POINT(27.1854258 88.124500)', 4326)); 

今すぐ結果である:

8.20039023523232 

2点間の距離を計算するときに結果に差がある理由を誰も教えてもらえますか?

+0

球状の形状を使用できますか? http://postgis.net/docs/ST_Distance.html vs http://postgis.net/docs/ST_DistanceSphere.htmlまたはさらにhttp://postgis.net/docs/ST_Distance_Spheroid.html? –

+0

私はあなたのすべてのリンクをチェックしましたが、私のための助けはありません。 GEOGRAPHY(POINT、4326)データ型の緯度と経度の値を格納しています –

+0

この計算の内部動作に関する詳細は見つかりませんでした。その違いは基礎となるデータ型/計算ロジック、具体的には丸めであると思われます。私はあなたが非常に結果に独立した方法を見つけることをお奨めします。注:SybaseとSQL Serverの間には、以前のNUMERICデータ型との計算の相違がありました。 – Alex

答えて

0

ここであなたを見つけたことがいくつかあります。

ポイントを使用するSQL Serverのバージョンでは、座標の順序はLat Lonです(例:Y X)。OGC Pointの構成はX YまたはLon Latです。

最後の問題は、PostGISクエリがオブジェクトをジオメトリとして扱い、デカルト距離を計算することです。明示的にそれらを地理学にする必要があります。

PostGISクエリを実行するには、いくつかの方法があります。私は座標の順序を入れ替えました

SELECT ST_Distance(ST_GeomFromText('POINT(88.124582 27.185425)',4326)::geography, 
       ST_GeomFromText('POINT(88.124500 27.1854258)',4326)::geography); 

SELECT ST_Distance(ST_GeogFromText('SRID=4326;POINT(88.124582 27.185425)'), 
       ST_GeogFromText('SRID=4326;POINT(88.124500 27.1854258)')); 


SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist 
FROM (SELECT 
ST_GeogFromText('SRID=4326;POINT(88.124582 27.185425)') As gg1, 
ST_GeogFromText('SRID=4326;POINT(88.124500 27.1854258)') As gg2 
) As foo ; 
関連する問題