Database PostGIS几何数据库查询

Database PostGIS几何数据库查询,database,geometry,postgis,Database,Geometry,Postgis,我有几个包含多个多边形的表。我需要在这些多边形中找到可以在java测试类中使用的点。我一直在做的是发送一个查询来返回所有的多多边形,选择一个顶点作为一个点,大多数情况下它是有效的 但是,这些表表示风险数据,100分之一、200分之一等,因此一些点在表之间共享(风险较高的多多边形由风险较低的多边形封装)。我可以使用什么查询来返回一个点,该点位于1个表中的1个多边形内,但不在我指定的任何其他表中 这些表分别是river_100_1k、river_200_1k和river_1000_1k,您可以进行多

我有几个包含多个多边形的表。我需要在这些多边形中找到可以在java测试类中使用的点。我一直在做的是发送一个查询来返回所有的多多边形,选择一个顶点作为一个点,大多数情况下它是有效的

但是,这些表表示风险数据,100分之一、200分之一等,因此一些点在表之间共享(风险较高的多多边形由风险较低的多边形封装)。我可以使用什么查询来返回一个点,该点位于1个表中的1个多边形内,但不在我指定的任何其他表中


这些表分别是river_100_1k、river_200_1k和river_1000_1k,您可以进行多次左连接:

SELECT a.gid, a.the_geom FROM pointsTable a
LEFT JOIN river_100_1k b 
ON ST_Intersects(a.the_geom, b.the_geom)
LEFT JOIN 
river_200_1k c
ON NOT ST_Intersects(a.the_geom, c.the_geom) -- Not Intersects
LEFT JOIN
river_1000_1k d 
ON NOT ST_Intersects(a.the_geom, d.the_geom) -- Not Intersects
WHERE 
AND c.gid IS NULL AND d.gid IS NULL AND b.gid=2 AND c.gid=2 AND d.gid=2 ; 

我不确定我是否理解正确,但这是你应该走的道路

您可以执行多重左连接:

SELECT a.gid, a.the_geom FROM pointsTable a
LEFT JOIN river_100_1k b 
ON ST_Intersects(a.the_geom, b.the_geom)
LEFT JOIN 
river_200_1k c
ON NOT ST_Intersects(a.the_geom, c.the_geom) -- Not Intersects
LEFT JOIN
river_1000_1k d 
ON NOT ST_Intersects(a.the_geom, d.the_geom) -- Not Intersects
WHERE 
AND c.gid IS NULL AND d.gid IS NULL AND b.gid=2 AND c.gid=2 AND d.gid=2 ; 

我不确定我是否理解正确,但这是你应该走的道路

使用
ST_-PointOnSurface(polygon)
获取多边形内的点。

使用
ST_-PointOnSurface(polygon)
获取多边形内的点