我在Postgres (使用PostGIS扩展)中有一个名为多边形的多边形表,它有两个字段(geom,id)。
如果我想查询与输入地理坐标几何相交的多边形的id,那么我可以使用下面的查询。
SELECT id, geom
FROM polygon
WHERE ST_Intersects(polygon.%s, ST_GeometryFromText(POINT(latitude logitude), 4326));但是现在我有了一个用例,我在请求中得到了很多地理坐标(~60k),现在我把它分解成1k个地理坐标的列表,并查询与每个地理坐标相交的多边形的id。
我在为如何写作而挣扎。如果有人对此有更好的解决方案,请建议。
发布于 2020-07-24 09:56:16
请记住,坐标对的正确顺序是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)https://stackoverflow.com/questions/63069541
复制相似问题