前提
表tablename带有空间字段geom
sql语句
#使用 WITH 子查询 target_geom 获取 objectid=1 的几何字段 geom。#主查询中使用 ST_DWithin 函数查找距离目标几何字段 100 米内的所有记录(除 objectid=1 本身)。#因为坐标系为 4326,需要将100米转换为角度,所以使用 100 / 111319.9 来进行转换。111319.9 是1度大约等于多少米的值。WITH target_geom AS (SELECT geom FROM tablename WHERE objectid = 1
)
SELECT t.*,(ST_Distance(target_geom.geom, t.geom))*111319.9 as dist --距离单位为度,用111319.9 转换为米
FROM fjdmdz0610test t, target_geom
WHERE ST_DWithin(t.geom, target_geom.geom, 100/111319.9 ) -- 100米转换为角度
AND objectid != 1
ORDER BY dist
limit 1;
增加空间索引,查询更快
速度比较
数据量大概是4000万条,查询时间从原来的70多秒,提高到1秒