2017-10-09 6 views
1

私はpostgresの2つの地域が交差しているがfalseを返す地理上の9.6ST_Intersectsは地理

ST_Intersectsは上のPostGIS 2.3を使用しています、何かを把握しようとしています。 デバッグするために、私はジオメトリを使用して同じクエリを試して、2つは交差しました。

誰かが私にそれを説明するのを助けることができますか?

例:

私はこのクエリを実行しています:

select ST_intersects(ST_GeogFromText('POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))'), ST_GeogFromText('POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))')) from table limit 1; 

私が手:

st_intersects 
--------------- 
f 
(1 row) 

と私は実行します。

select ST_intersects(ST_GeomFromText('POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))'), ST_GeomFromText('POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))')) from table limit 1; 

私が手:

st_intersects 
--------------- 
    t 
(1 row) 
+0

1.質問を確認してください - この2つのクエリの違いは ';'最後に。 2.地理情報はありません... – Jendrusk

+0

ありがとう、私は最初のクエリを更新しました、diffrenceはST_GeogFromTextまたはST_GeomFromTextを使用しています –

答えて

0

ST_Intersects -- returns True if Geometries/Geography spatially intersect in 2DPOLYGON(頂点が5つの場合)からLINESTRINGに変換すると、クエリは同じ結果を返します。テスト:

SELECT 
ST_Intersects(
ST_GeomFromText('SRID=4326;LINESTRING(12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890)'), 
ST_GeomFromText('SRID=4326;LINESTRING(-170 -47,174 -47,174 77,-170 77,-170 -47)')); 


SELECT 
ST_Intersects(
ST_GeogFromText('SRID=4326; LINESTRING(12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890)'), 
ST_GeogFromText('SRID=4326; LINESTRING(-170 -47,174 -47,174 77,-170 77,-170 -47)')); 

更新::実は

Polygonを使用してはST_Intersectsのためだけで結構です。 Linestringはあなたが望むものではないことを認識しています。問題は、これらの2つのポリゴンが球座標系で離れていることです。チェック:

SELECT 
ST_Distance(
ST_GeomFromText('SRID=4326;POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))'), 
ST_GeomFromText('SRID=4326;POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))')); 

==> 0

SELECT 
ST_Distance(
ST_GeogFromText('SRID=4326;POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))'), 
ST_GeogFromText('SRID=4326;POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))')); 

==>所望の出力を得るために、次のようにあなたはもちろんgeometry型にgeographyをキャストすることができ6743507.32

SELECT 
ST_Intersects(
ST_GeogFromText('SRID=4326;POLYGON((12.856 41.890,12.856 41.935,12.811 41.935,12.811 41.890,12.856 41.890))')::geometry, 
ST_GeogFromText('SRID=4326;POLYGON((-170 -47,174 -47,174 77,-170 77,-170 -47))')::geometry); 
+0

ありがとう、私はあなたの答えを理解していない、それは 'POLYGON' 2dではないのですか? –

+0

alslo、どちらのクエリもfalseを返す –

+0

@GuyDoulberg悪い。各頂点は2つの座標を持っているので、 'POLYGON'は実際には2Dです - 私は頂点を次元と混同しました。私は私の答えを更新しました。 – Krishna