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

如何在PostgreSQL中查找与我的地块相邻的地块

解决方案

1. 基础正确SQL语句

你之前的SQL未筛选有效结果,也未对应实际表结构(parcels和Myparcel),试试这条语句:

SELECT p.地块编号, p.geom
FROM parcels p
JOIN Myparcel mp ON ST_Touches(p.geom, mp.geom);

这条语句会直接返回所有与自有地块边界接触的相邻地块编号及几何信息。

2. 排查可能的问题

如果上述语句仍无结果,检查以下几点:

  • 坐标系一致性:确认parcels和Myparcel的geom字段使用相同空间参考系。若不同,用ST_Transform统一:
    SELECT p.地块编号, p.geom
    FROM parcels p
    JOIN Myparcel mp ON ST_Touches(p.geom, ST_Transform(mp.geom, ST_SRID(p.geom)));
    
  • 几何有效性:检查地块几何是否合法,验证语句如下:
    -- 检查自有地块
    SELECT ST_IsValid(geom) FROM Myparcel;
    -- 检查parcels表中无效几何的地块
    SELECT 地块编号, ST_IsValid(geom) FROM parcels WHERE ST_IsValid(geom) = false;
    
    若存在无效几何,用ST_MakeValid修复后再查询:
    SELECT p.地块编号, p.geom
    FROM parcels p
    JOIN Myparcel mp ON ST_Touches(ST_MakeValid(p.geom), ST_MakeValid(mp.geom));
    
  • 严格边界接触:若需要仅线接触(排除点接触),改用ST_Relate判断拓扑关系:
    SELECT p.地块编号, p.geom
    FROM parcels p
    JOIN Myparcel mp ON ST_Relate(p.geom, mp.geom, 'FF*TT****');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:35:23