Postgresql PostGIS:选择多边形节点的简单查询

Postgresql PostGIS:选择多边形节点的简单查询,postgresql,geospatial,postgis,Postgresql,Geospatial,Postgis,我知道这很简单,但不管怎样:(也在问) 输入: 常规OSM建筑。shp表 PostGIS点定位 半径(在上述位置附近),比如说500米 结果: 我想从这个半径范围内的所有建筑物的所有角点取回位置,它们与位置的距离小于距离(比如200米) 我正在努力从多边形表中获取点接受WHERE子句的结果 谢谢,另外,您只需要半径内的顶点,而不需要多边形的属性?如果是,则可以使用子查询执行此操作,该子查询首先提取所有顶点,然后使用ST_DWithin查询子查询的结果: WITH vertices AS (SEL

我知道这很简单,但不管怎样:(也在问)

输入:

  • 常规OSM建筑。shp表
  • PostGIS点定位
  • 半径(在上述位置附近),比如说500米
  • 结果:

    我想从这个半径范围内的所有建筑物的所有角点取回位置,它们与位置的距离小于距离(比如200米)

    我正在努力从多边形表中获取点接受WHERE子句的结果


    谢谢,

    另外,您只需要半径内的顶点,而不需要多边形的属性?如果是,则可以使用子查询执行此操作,该子查询首先提取所有顶点,然后使用ST_DWithin查询子查询的结果:

    WITH vertices AS (SELECT (ST_DumpPoints(geom)).geom FROM buildings)
        SELECT geom from vertices 
        WHERE ST_DWithin(geom, ST_GeomFromText('POINT(5 45)',4326), 100);
    
    为了获得更好的性能,您还可以在子查询中添加相同的WHERE条件:

    WITH vertices AS (SELECT (ST_DumpPoints(geom)).geom FROM buildings
                        WHERE ST_DWithin(geom, ST_GeomFromText('POINT(5 45)',4326), 100)
                      )
        SELECT geom from vertices 
        WHERE ST_DWithin(geom, ST_GeomFromText('POINT(5 45)',4326), 100);
    

    我不完全理解为什么在性能提高的版本中我们需要第二个呢?似乎第一个查询将完成所有的工作,因此,也许我们根本不需要外部查询?还是我缺少一些基本的SQL?谢谢,1)是的,第一个版本可以完成这项工作,但是第二个版本可能会更快,特别是如果你有大量数据的话。在子查询中使用where条件时,它不会查询多边形,因为多边形与主查询无关。2) 您需要外部查询,因为您只需要半径内的顶点,而不需要半径内多边形的所有顶点(我希望我正确地解释了您的问题)@Tommasco Di Bucchianico第二个条件是每个顶点和点之间的线不与周围的任何其他建筑相交。谢谢,为了检查交叉点,您必须首先构建线。这是一个复杂的话题,请问另一个问题。@Tommasco Di Bucchianico谢谢,请访问: