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