You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于几何关联为PostgreSQL建筑表添加街区属性字段

嘿,这事儿好办,我给你梳理一套完整的实现方案,一步步来就行:

第一步:给建筑表新增字段

首先得先在你的建筑表里加上qd_setorqd_fiscal这两个字段,根据你提供的街区表示例,这两个字段是字符串类型,用VARCHAR就行,长度可以根据实际数据调整:

-- 替换成你的建筑表实际名称,比如假设表名叫edificios
ALTER TABLE edificios
ADD COLUMN qd_setor VARCHAR(10),
ADD COLUMN qd_fiscal VARCHAR(10);
第二步:通过空间关联更新字段值

接下来要把街区表的关联信息同步到建筑表里,这里用PostgreSQL的UPDATE...FROM语法结合PostGIS的空间函数来实现。因为街区是包含建筑的,优先用ST_Contains更准确;如果你的数据存在建筑和街区边界重叠但不完全包含的情况,可以换成ST_Intersects

UPDATE edificios e
SET qd_setor = q.qd_setor,
    qd_fiscal = q.qd_fiscal
FROM quadras_opurb q
WHERE ST_Contains(q.wkb_geometry, e.wkb_geometry);

注意:如果有部分建筑不在任何划定的城市更新街区范围内,这两个字段会是NULL。要是想给这类建筑做标记,可以额外执行一条更新语句:

UPDATE edificios
SET qd_setor = 'SEM_SETOR',
    qd_fiscal = 'SEM_FISCAL'
WHERE qd_setor IS NULL;
第三步:优化空间查询性能(可选但推荐)

如果你的表数据量很大,空间关联更新可能会比较慢。建议给两个表的几何字段创建空间索引,能大幅提升查询效率:

-- 给街区表的几何字段建索引
CREATE INDEX idx_quadras_opurb_geom ON quadras_opurb USING GIST (wkb_geometry);

-- 给建筑表的几何字段建索引
CREATE INDEX idx_edificios_geom ON edificios USING GIST (wkb_geometry);
验证结果

更新完成后,可以查询几条数据确认关联是否正确:

SELECT ed_id, ed_distrito, qd_setor, qd_fiscal FROM edificios LIMIT 10;

之后你就可以直接用新增的字段筛选数据,再也不用每次都做几何相交判断啦,比如:

-- 筛选属于qd_setor为041的所有建筑
SELECT * FROM edificios WHERE qd_setor = '041';

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

火山引擎 最新活动