場所を含むテーブルを作成しました。その位置は、(緯度、経度)ポストグラムで表されます。私は同じのために使用されるコマンドは、次のとおりPostgresが距離結合クエリを使用して正しい結果を返す
私はPostgresの私が自分の空間座標とともに(緯度、経度で表現さ位置を含むテーブルを作成し
で(経度、緯度)等の空間座標を挿入(度) )ポストグルで。私は同じのために使用されるコマンドは以下のとおりです。CREATE TABLE spatialTest(
name character varying(100),
the_geo geography
);
\copy spatialTest(name,the_geo) FROM 'testSpatial.csv' DELIMITERS E'\t' CSV;
testSpatial.csvは、以下の値が含まれます。
A SRID=4326;POLYGON((0.178773 -127.681841,0.178711 -127.681962,0.179125 -127.682083,0.179176 -127.682006,0.179153 -127.681986,0.179143 -127.681962,0.179147 -127.681935,0.179166 -127.681913,0.179195 -127.681897,0.179244 -127.681886,0.179284 -127.681887,0.179336 -127.681904,0.179464 -127.681757,0.179489 -127.681736,0.179429 -127.681680,0.179370 -127.681516,0.179221 -127.681331,0.179184 -127.681185,0.179051 -127.681264,0.178822 -127.681499,0.178761 -127.681698,0.178796 -127.681703,0.178839 -127.681721,0.178857 -127.681736,0.178861 -127.681740,0.178871 -127.681756,0.178873 -127.681782,0.178859 -127.681809,0.178843 -127.681825,0.178812 -127.681839,0.178773 -127.681841))
B SRID=4326;POINT(0.628912 -127.700922)
は、今私はお互いの50キロの距離内にあるすべての空間位置を見つけたいです。そうするために私は、次のコマンドを使用:
select s1.name, s2.name from spatialTest s1,
spatialTest s2 where ST_DWithin(s1.the_geo, s2.the_geo, 50000);
はしかし、私の驚きに、私はAとBは50キロ(正確には50.0995キロよりも大きな距離によって互いに分離されているが、ことがわかったクリスを使用して見つかりました。 Venessの測地線の公式(緯度と経度の点と線分の距離を計算する))が、結果としてポストグルに返されます。誰かが私がどこに間違っているのか理解してもらえますか?
私はPostgreSQLの9.6develと私が使用していますPostGISのバージョンをされて使用しています:PostGISのは= "2.2.1 r14555"
あなたはPostgresの「バグ」メーリングリストでそのための答えを得ました" - あなたはそれをやりました?そして、なぜあなたは適切なPostgresのリリースを使用していないのですか? –
あなたのコードとサンプルデータが私にエラーを返します: 'ERROR:解析エラー - 無効なジオメトリ ヒント:" SRID = 4326; POINT(0.628912、 - " - ジオメトリ内の位置26の解析エラー。コード例 –
*「ポストグルでの(緯度、経度)で表される空間座標」*経度、緯度順で引数を渡す必要があると思います。つまり、最初の引数は緯度ではなく経度です。 –