postgis查询,该多边形表具有相交的几何图形,在传递的地理坐标列表中有一个或多个点

7jmck4yq  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(399)

我在postgres中有一个名为polygon的polygons表(使用postgis扩展),它有两个字段(geom,id)。
如果我想查询与输入地理坐标几何体相交的多边形的id,那么我可以用下面的查询来完成。

SELECT id, geom 
FROM polygon 
WHERE ST_Intersects(polygon.%s, ST_GeometryFromText(POINT(latitude logitude), 4326));

但是现在我有了一个用例,我在请求中获得了很多地理坐标(~60k),现在我将其分解为每个1k地理坐标的列表,并查询与每个地理坐标相交的多边形的id。
我正在努力学习如何写作。如果有人对此有疑问,或者有更好的解决方案,请提出建议。

nbnkbykc

nbnkbykc1#

请记住,坐标对的正确顺序是 lon, lat ,因此使用 lat, lon 在您的查询中将返回错误的结果。您的查询还缺少单引号 ' 在wkt坐标周围,例如。 'POINT(1 2)' .
总之,您可以使用 ORDER BY , LIMIT 以及 OFFSET ,例如。
获得前1000张唱片

SELECT id, geom FROM polygon
WHERE ST_Intersects(geom, 'SRID=4326;POINT(1 2)')
ORDER BY id
LIMIT 1000 OFFSET 0;

通过改变 OFFSET 值可以检索下一页。

LIMIT 1000 OFFSET 1000;

以此类推。。

LIMIT 1000 OFFSET 2000;

编辑:使用多个输入点应用此查询的一种方法是使用 CTE / subquery (见注解),例如。

WITH j(g) AS (
  VALUES 
    ('SRID=4326;POINT(1 1)'),
    ('SRID=4326;POINT(1 2)') 
    -- ... add as many geometries as you want
)
SELECT id, geom FROM polygon, j
WHERE ST_Intersects(geom, g::geometry)

相关问题