簡體   English   中英

POSTGIS:查找多邊形內的所有點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM