1. 引言在空间数据处理中矢量数据的裁剪与合并拼接是两类高频且基础的操作。裁剪通常指用一个面如行政区边界去切割另一个面或线得到相交部分合并拼接则指把多个相邻或重叠的几何对象融合成一个整体或把分散的要素拼接为连续图层。本文以 PostGIS 为例结合 POLYGON 等几何类型梳理常用函数、SQL 写法和注意事项。2. 矢量数据裁剪矢量裁剪的核心是求两个几何对象的交集常用函数包括 ST_Intersection、ST_ClipByBox2D 和 ST_Intersects 过滤。2.1 ST_Intersection 裁剪ST_Intersection 返回两个几何对象的公共部分是最通用的裁剪方式。例如用一个矩形窗口裁剪一个多边形得到落在窗口内的部分。-- 用矩形窗口裁剪多边形 SELECT ST_Intersection( geom, ST_MakeEnvelope(112.66592, 26.10227, 112.75225, 26.24774, 4326) ) AS clipped_geom FROM polygon_table;2.2 ST_ClipByBox2D 快速裁剪当裁剪窗口是轴对齐矩形时ST_ClipByBox2D 比 ST_Intersection 更快因为它只做矩形裁剪不处理任意多边形相交的复杂情况。-- 使用边界框快速裁剪 SELECT ST_ClipByBox2D( geom, ST_MakeEnvelope(112.66592, 26.10227, 112.75225, 26.24774, 4326) ) AS clipped_geom FROM polygon_table;2.3 结合 ST_Intersects 过滤大批量裁剪时先用 ST_Intersects 做空间索引过滤只对真正相交的要素执行 ST_Intersection可显著提升性能。SELECT a.id, ST_Intersection(a.geom, b.geom) AS clipped_geom FROM target_table a JOIN clip_table b ON ST_Intersects(a.geom, b.geom);2.4 实战按 PID 裁剪并更新数据库实际业务中表里往往存有多条多边形记录一条数据就是一个多边形。下面演示查询 PID2 的所有多边形与给定矩形面做裁剪去掉矩形内的部分并把结果更新回数据库。-- 1. 查询 PID2 的所有多边形与矩形面做差集去掉矩形内的部分 WITH rect AS ( SELECT ST_GeomFromText( POLYGON((112.66592 26.24774, 112.75225 26.24774, 112.75225 26.10227, 112.66592 26.10227, 112.66592 26.24774)), 4326 ) AS geom ), clipped AS ( SELECT id, ST_Difference(p.geom, r.geom) AS new_geom FROM polygon_table p CROSS JOIN rect r WHERE p.pid 2 ) -- 2. 更新数据库用裁剪后的几何覆盖原几何 UPDATE polygon_table SET geom c.new_geom FROM clipped c WHERE polygon_table.id c.id;说明ST_Difference 返回第一个几何减去与第二个几何相交部分后的结果正好满足「去掉矩形内的部分」的需求。若某个多边形完全落在矩形内裁剪后几何可能为空更新前可用 ST_IsEmpty 判断按业务决定是保留空几何还是删除该记录。3. 矢量数据合并拼接合并拼接通常指把多个几何对象融合为一个整体或把相邻要素拼接成连续图层。常用函数包括 ST_Union、ST_Collect 和 ST_MakeValid。3.1 ST_Union 融合ST_Union 会把多个几何对象融合为一个消除重叠部分并合并边界适合把相邻多边形拼接成完整区域。-- 把同一区域的多块多边形融合为一个整体 SELECT ST_Union(geom) AS merged_geom FROM parcels WHERE district_id 101;3.2 ST_Collect 聚合拼接ST_Collect 把多个几何对象收集为一个集合MultiPolygon 或 GeometryCollection不做边界融合适合保留原始要素边界的拼接场景。-- 收集多个多边形为一个 MultiPolygon SELECT ST_Collect(geom) AS collected_geom FROM parcels WHERE district_id 101;3.3 ST_MakeValid 修复后合并实际数据常存在自相交、重复点等拓扑错误直接 ST_Union 可能失败。先用 ST_MakeValid 修复再合并更稳妥。-- 修复无效几何后再融合 SELECT ST_Union(ST_MakeValid(geom)) AS merged_geom FROM parcels WHERE district_id 101;4. 完整示例裁剪并拼接下面用一个完整示例演示先按行政区边界裁剪原始多边形再把裁剪结果拼接为一个整体。-- 1. 裁剪只保留落在目标区域内的部分 WITH clipped AS ( SELECT ST_Intersection(a.geom, b.geom) AS geom FROM raw_polygon a JOIN boundary b ON ST_Intersects(a.geom, b.geom) WHERE b.name 目标区域 ) -- 2. 拼接把裁剪结果融合为一个整体 SELECT ST_Union(geom) AS final_geom FROM clipped;5. 注意事项坐标系一致裁剪和合并前务必确保参与运算的几何对象使用相同坐标系SRID否则结果可能错位。拓扑有效性合并前建议先执行 ST_MakeValid避免自相交、重复点等错误导致函数失败或结果异常。性能优化大批量裁剪时先建空间索引并用 ST_Intersects 过滤再执行 ST_Intersection可大幅减少计算量。结果验证合并后可用 ST_IsValid 和 ST_Area 检查结果是否有效、面积是否符合预期。6. 总结PostGIS 中矢量数据的裁剪与合并拼接核心是掌握 ST_Intersection、ST_ClipByBox2D、ST_Union、ST_Collect 等函数的适用场景。裁剪时优先用空间索引过滤提升性能合并前先修复拓扑错误保证结果有效。结合坐标系统一和结果验证可以稳妥地完成从原始多边形到目标区域的裁剪与拼接。
企业数字化 ERP 产品动态
相关推荐
高速冲击测试中DIC方案的选型逻辑 高速冲击测试对测量系统的要求完全不同于静态或准静态测试。子弹撞击、爆炸载荷、高速成形、弹道穿透等场景中,载荷作用时间从毫秒级到微秒级不等,试件变形速度可以达到每秒几十米甚至上百米。普通工业相机根本无法满足这类测试的时间分辨率要求… · 2026/9/25 21:18:56
davidondrej-skills 路线图与社区:如何编写并推送你的 Agent Skill 到 GitHub davidondrej-skills 路线图与社区:如何编写并推送你的 Agent Skill 到 GitHub 【免费下载链接】skills access to david ondrejs personal agent skills 项目地址: https://gitcode.com/gh_mirrors/skills46/skills
davidondrej-skills 是开发者 David Ondre… · 2026/9/25 21:18:50
React 组件与 Props React 组件与 Props 前置:React:第一个 Vite 应用 目标:会拆组件,会用 TypeScript 给 props 定类型。 引言
页面一大就该拆。组件是复用单位;props 是父传给子的只读数据。 动手
完整代码:react2/02-comp… · 2026/9/25 21:18:50
SDN核心原理与落地实践:解耦控制与数据平面 1. 从“看不懂的路由器指示灯”说起:SDN不是新概念,而是网络控制权的一次移交你有没有过这种经历:家里新换了一台标着“支持SDN”的光猫,说明书里写着“智能调度、弹性扩展”,可你连它的管理页面都找不到入口ÿ… · 2026/9/25 21:51:18
Edge下载无反应?六类常见原因与完整排查修复指南 1. 从一次真实的下载失灵说起上周三下午,同事发来一个压缩包链接,我像往常一样在 Edge 里点下去,结果什么都没发生。没有下载弹窗,没有“另存为”对话框,任务栏右下角也没有任何提示。我又点了一次,还是没反… · 2026/9/25 21:51:18
大模型在货运平台营销广告中的应用实践:从长尾创意到人机协同 1. 为什么货运平台的广告场景需要大模型介入:这是一道典型的“长尾创意题”入行做营销系统的人大概都有同感:货运平台的广告投放和普通电商有很大区别。货拉拉业务覆盖货运、搬家、企业物流等多种场景,司机端和货主端是两个完全不同的用户群体… · 2026/9/25 21:51:12
SpringBoot自动配置原理,面试官到底想听什么? “请说一下SpringBoot自动配置的原理”——这道题几乎出现在每一场Java后端面试中。但吊诡的是,很多候选人背得滚瓜烂熟,面试官却依然摇头。问题出在哪?因为面试官想听的,从来不是一段标准答案,而是你对“为什么这样设… · 2026/9/25 21:51:12
FuriosaAI新一代推理加速器:32倍算力与带宽背后的架构逻辑 1. 从一颗芯片的规格说起:为什么推理加速器突然成了香饽饽第一次看到 FuriosaAI 这份新一代推理加速器的规格表时,我的反应和大多数同行一样——先看数字,再看门道。32 倍算力、32 倍内存带宽,这两个数字放在一起,基本… · 2026/9/25 21:51:12
SpringBoot性能优化:这7个细节让接口快3倍 引言很多SpringBoot项目上线初期运行流畅,但随着数据量和并发量增长,接口响应时间从200ms飙升到数秒,甚至频繁触发Full GC告警。性能问题往往不是框架本身造成的,而是开发过程中忽略了一些关键细节。本文将结合真实生产案例&#… · 2026/9/25 21:51:12
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37