我有一个超过15k行的表。
该表具有locationID,isEmpty,经度和纬度字段。
我想计算每个点之间的距离isEmpty field = 1和其他点,并使用Postgis将结果插入到新表中。
请告知编写执行此要求的sql语句的最佳做法
答案 0 :(得分:3)
好的,谢谢你的解释 - 现在它更清楚。
在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
我没有测试过,所以如果某些内容无效,请写一条评论