Postgis计算点之间的距离

时间:2016-11-28 22:17:18

标签: sql postgresql postgis

我有一个超过15k行的表。

该表具有locationID,isEmpty,经度和纬度字段。

我想计算每个点之间的距离isEmpty field = 1和其他点,并使用Postgis将结果插入到新表中。

请告知编写执行此要求的sql语句的最佳做法

1 个答案:

答案 0 :(得分:3)

好的,谢谢你的解释 - 现在它更清楚。

在Postgis中,你不必计算所有距离,以找出在一定距离内有多少其他点。

  1. 向数据库添加扩展程序

    CREATE EXTENSION postgis;
    
  2. 现在添加一个几何类型的列

    ALTER TABLE mytable ADD COLUMN geom geometry;
    
  3. 您需要一些索引

    CREATE INDEX mytable_geom_idx ON mytable USING gist(geom);
    
  4. 现在填充新列

    UPDATE mytable SET geom = ST_SetSRID(ST_MakePoint(lon, lat),4326);
    
  5. 现在查询:

    Select a.locationID, count(*)
    from mytable a 
    join mytable b on a.locationID!=b.locationID 
      and ST_Dwithin(a.geom::geography,b.geom::geography,152) 
    where a.isEmpty=1
    group by 1;
    
  6. ST_DWithin的地理类型是以米为单位,距离为152m~500ft

    我没有测试过,所以如果某些内容无效,请写一条评论