緯度/経度の位置がポリゴン内にあるかどうかを確認するにはどうすればよいですか?


8

住所の緯度/経度情報をPostGISテーブルに保存するシステムに取り組んでいます。Lat / Longをジオメトリデータタイプに格納するには、ST_GeometryFromText関数を使用しています。

たとえば、次の関数呼び出しは、指定されたLong / Lat位置に対するジオメトリ値を取得します。

 myPointGeo =  ST_GeometryFromText('POINT(40.758871 -73.985114)');

同様に、ポリゴンを次のように幾何学的表現に変換します。

myPolygonGeo =  ST_GeometryFromText('POLYGON ((40.7566484549725 -73.9878561496734, 40.7556894646734 -73.9853026866913, 40.7545841705587 -73.9860537052154, 40.7548036054111 -73.9881458282471, 40.7559820394514 -73.9887895584106, 40.7566484549725 -73.9878561496734 ))')

上記の緯度/経度の位置がこのポリゴン内にあるかどうかを確認したいと思います。これには、ST_Within関数を使用しています。しかし、 'myPointGeo'は実際にはポリゴン内に存在しますが、ST_Withinはfalseを返します。私はこのようにST_Withinを使用しています:

 St_Within(myPointGeo,myPolygonGeo)

ここで何が悪いのですか?この目的のために他の関数を使用する必要がありますか?


今日も同じ状況で上陸しました。そして、このリンクにある説明は私を助け、うまく機能していますpostgis.refractions.net/documentation/manual-1.4/…偶然にも、そこでの例と使用しているデータ型は同じです。複製は簡単です
sidd.k

また、ドキュメントはST_MakePointの使用を推奨しています。一般的に、ST_MakePoint
chrismarx

回答:


18

ST_Intersectsの方がうまくいくと思います。2つのジオメトリが交差するかどうかについて、trueまたはfalseを返します。だからあなたは次のようなことをしたいでしょう:

SELECT ST_Intersects(myPointGeo, myPolygonGeo);

またはあなたがすることができます:

SELECT a.id, b.id 
FROM pointTableName a, polygonTableName b 
WHERE ST_Intersects(a.myPointGeo, b.myPolygonGeo);

回答ありがとうございます
Md Amiruzzaman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.