Postgis计算点与点之间的距离

Postgis calculate the distance between points

我有一个 table 超过 15k 行。

table 有 locationID、isEmpty、经度和纬度字段。

我想计算具有 isEmpty 字段 = 1 的每个点与其他点之间的距离,然后使用 Postgis 将结果插入新 table。

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

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

在 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;
    

ST_DWithin 地理类型是以米为单位的距离和 152m~500ft

我没有测试过,所以如果有什么不对请给我留言