Postgis计算点与点之间的距离
Postgis calculate the distance between points
我有一个 table 超过 15k 行。
table 有 locationID、isEmpty、经度和纬度字段。
我想计算具有 isEmpty 字段 = 1 的每个点与其他点之间的距离,然后使用 Postgis 将结果插入新 table。
请告知编写执行此要求的 sql 语句的最佳做法是什么
好的,谢谢你的解释 - 现在更清楚了。
在 Postgis 中,您不必计算所有距离即可找到某个距离内有多少其他点。
向数据库添加扩展
CREATE EXTENSION postgis;
现在添加一个几何类型的列
ALTER TABLE mytable ADD COLUMN geom geometry;
你需要一些索引
CREATE INDEX mytable_geom_idx ON mytable USING gist(geom);
现在填充新列
UPDATE mytable SET geom = ST_SetSRID(ST_MakePoint(lon, lat),4326);
现在查询:
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
我没有测试过,所以如果有什么不对请给我留言
我有一个 table 超过 15k 行。
table 有 locationID、isEmpty、经度和纬度字段。
我想计算具有 isEmpty 字段 = 1 的每个点与其他点之间的距离,然后使用 Postgis 将结果插入新 table。
请告知编写执行此要求的 sql 语句的最佳做法是什么
好的,谢谢你的解释 - 现在更清楚了。
在 Postgis 中,您不必计算所有距离即可找到某个距离内有多少其他点。
向数据库添加扩展
CREATE EXTENSION postgis;
现在添加一个几何类型的列
ALTER TABLE mytable ADD COLUMN geom geometry;
你需要一些索引
CREATE INDEX mytable_geom_idx ON mytable USING gist(geom);
现在填充新列
UPDATE mytable SET geom = ST_SetSRID(ST_MakePoint(lon, lat),4326);
现在查询:
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
我没有测试过,所以如果有什么不对请给我留言