You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostGIS如何查询空间表中shape_area大于1000m²的城市间最小距离

城市最小距离查询PostGIS实现方案

实现逻辑

  • 先筛选所有shape_area > 1000㎡的城市记录
  • 通过自连接配对城市,使用a.city_id < b.city_id避免重复计算同一对城市,同时排除自身配对场景
  • 调用PostGIS提供的ST_Distance函数计算几何距离,由于你使用的26986投影单位为米,计算结果单位直接为米,无需额外转换

具体SQL代码

方案1:获取最小距离对应的城市对明细

SELECT 
    a.city_id AS 城市AID,
    a.city AS 城市A名称,
    b.city_id AS 城市BID,
    b.city AS 城市B名称,
    ST_Distance(a.geom, b.geom) AS 距离_米
FROM cities a
INNER JOIN cities b 
    ON a.city_id < b.city_id
WHERE 
    a.shape_area > 1000
    AND b.shape_area > 1000
ORDER BY 距离_米 ASC
LIMIT 1;

方案2:仅查询全局最小距离数值

SELECT MIN(ST_Distance(a.geom, b.geom)) AS 最小距离_米
FROM cities a
INNER JOIN cities b 
    ON a.city_id < b.city_id
WHERE 
    a.shape_area > 1000
    AND b.shape_area > 1000;

性能优化建议

如果城市数据量较大,可执行以下语句创建索引提升查询效率:

-- 创建空间索引加速几何距离计算
CREATE INDEX idx_cities_geom ON cities USING GIST(geom);
-- 创建普通索引加速条件筛选
CREATE INDEX idx_cities_shape_area ON cities(shape_area);
CREATE INDEX idx_cities_city_id ON cities(city_id);

内容的提问来源于stack exchange,提问作者Anaidm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:06:03