[英]POSTGIS: find all the points within a polygon
我有一個包含點的表
CREATE TABLE Points
{
pointID BIGSERIAL PRIMARY KEY NOT NULL,
thePoint GEOGRAPHY(POINT)
}
CREATE TABLE Polygons
{
polygonID BIGSERIAL PRIMARY KEY NOT NULL,
aPolygon GEOGRAPHY(POLYGON) NOT NULL,
}
我希望找到每個多邊形中包含的所有點。 即結果應該看起來像
polygonID| pointID
-------------------
1 | 1
1 | 2
1 | 5
1 | 7
2 | 2
2 | 3
...
我設法使用ST_CoveredBy(thePoint, aPolygon)
一點一點地找出它是否在多邊形中。 基於此,幼稚的解決方案將在所有點和多邊形上進行嵌套循環,但是可以肯定的是,有一種更有效,更正確的方法來實現這一目標。
這是一種對地理類型起作用的方法。 順便說一句,也許值得閱讀有關幾何和地理數據類型的手冊 。 據我了解,還有更多可用於幾何的功能,但是您必須參與投影。 最好的選擇取決於您在做什么...
SELECT polygonID, pointID
FROM Points INNER JOIN Polygons
ON ST_covers(polygons.aPolygon,Points.thePoint );
PostgreSQL有polygon @> point
select * from points join polygons on polygons.aPolygon @> points.thePoint;
自從我對PostGIS進行任何操作以來已經過去了一段時間,但是我將嘗試一下。
SELECT polygonID, pointID FROM Points, Polygons WHERE ST_CONTAINS(Points.thePoint , polygonID.aPolygon);
答案是在您的問題中:“在...內”。 使用ST_DWithin運算符 。
SELECT polygonID, pointID
FROM Points
JOIN Polygons ON ST_DWithin(Points.thePoint, polygons.aPolygon, 0);
最后一個參數0
是多邊形內的距離。 這對於選擇例如位於多邊形10 m以內的點也很有用,如果源數據中存在定位錯誤,這將很有用。
ST_Intersects(Points.thePoint, polygons.aPolygon)
也應該起作用。
如果您想了解更多關於這些運算符的含義的信息,請參閱DE-9IM ,但並非所有人都具有對應的地理位置類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.