当前位置: 首页 > news >正文

2010-Single-Sided-Buffers-in-JTS

JTS 中的单侧缓冲区

原文:Single-Sided Buffers in JTS
作者:Martin Davis
日期:2010年11月

概述

单侧缓冲区(Single-Sided Buffer)是 JTS 2010 年版本添加的重要功能。与标准缓冲区在几何图形两侧创建多边形不同,单侧缓冲区只在线的一侧生成缓冲区。

什么是单侧缓冲区?

标准缓冲区

标准缓冲区在几何图形的所有方向上扩展指定的距离,创建一个完全包围原始几何图形的多边形。

      ╭─────────────────╮│                 ││    原始线       ││    ========     ││                 │╰─────────────────╯标准缓冲区

单侧缓冲区

单侧缓冲区只在线的一侧创建多边形:

      ═══════════════════│                 ││   原始线        │╰─────────────────╯单侧缓冲区(右侧)

方向控制

通过缓冲距离的正负号控制缓冲方向:

  • 正值:在线的右侧创建缓冲区
  • 负值:在线的左侧创建缓冲区
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.operation.buffer.BufferOp;
import org.locationtech.jts.operation.buffer.BufferParameters;Geometry line = ...;// 创建单侧缓冲区参数
BufferParameters params = new BufferParameters();
params.setSingleSided(true);// 右侧缓冲区(正值)
double rightDistance = 10.0;
Geometry rightBuffer = BufferOp.bufferOp(line, rightDistance, params);// 左侧缓冲区(负值)
double leftDistance = -10.0;
Geometry leftBuffer = BufferOp.bufferOp(line, leftDistance, params);

应用场景

1. 道路缓冲区

在道路一侧创建缓冲区,例如:

  • 人行道规划
  • 停车带
  • 噪音缓冲区
// 道路中心线
Geometry roadCenterline = ...;// 创建道路右侧 3 米的人行道缓冲区
BufferParameters params = new BufferParameters();
params.setSingleSided(true);
Geometry sidewalkArea = BufferOp.bufferOp(roadCenterline, 3.0, params);

2. 海岸线缓冲区

从海岸线向内陆方向创建缓冲区:

  • 海岸侵蚀分析
  • 沿海保护区
  • 洪水风险区域
// 海岸线
Geometry coastline = ...;// 向内陆方向创建 100 米缓冲区
BufferParameters params = new BufferParameters();
params.setSingleSided(true);
Geometry coastalZone = BufferOp.bufferOp(coastline, 100.0, params);

3. 河流管理

在河流一侧创建管理区域:

  • 河岸植被带
  • 开发限制区
  • 生态走廊

缓冲区参数配置

端点样式(End Cap Style)

对于单侧缓冲区,端点样式总是设置为 CAP_FLAT

BufferParameters params = new BufferParameters();
params.setSingleSided(true);
// 端点样式对单侧缓冲区无效,总是使用 CAP_FLAT

连接样式(Join Style)

连接样式控制线转角处的处理方式:

BufferParameters params = new BufferParameters();
params.setSingleSided(true);// 圆角连接(默认)
params.setJoinStyle(BufferParameters.JOIN_ROUND);// 斜角连接
params.setJoinStyle(BufferParameters.JOIN_MITRE);// 平角连接
params.setJoinStyle(BufferParameters.JOIN_BEVEL);

象限段数(Quadrant Segments)

控制曲线近似的精度:

BufferParameters params = new BufferParameters();
params.setSingleSided(true);// 设置象限段数(默认为 8)
// 数值越大,曲线越平滑
params.setQuadrantSegments(16);

斜接限制(Mitre Limit)

使用斜角连接时控制尖角的最大长度:

BufferParameters params = new BufferParameters();
params.setSingleSided(true);
params.setJoinStyle(BufferParameters.JOIN_MITRE);// 设置斜接限制
params.setMitreLimit(5.0);

代码示例

基本用法

import org.locationtech.jts.geom.*;
import org.locationtech.jts.operation.buffer.*;
import org.locationtech.jts.io.WKTReader;public class SingleSidedBufferExample {public static void main(String[] args) throws Exception {// 创建测试线WKTReader reader = new WKTReader();Geometry line = reader.read("LINESTRING (0 0, 100 0, 100 100)");// 配置单侧缓冲区参数BufferParameters params = new BufferParameters();params.setSingleSided(true);params.setJoinStyle(BufferParameters.JOIN_ROUND);params.setQuadrantSegments(8);// 创建右侧缓冲区double distance = 10.0;Geometry buffer = BufferOp.bufferOp(line, distance, params);System.out.println("原始线: " + line);System.out.println("单侧缓冲区: " + buffer);}
}

双侧不同宽度

// 创建左右宽度不同的缓冲区
public Geometry createAsymmetricBuffer(Geometry line, double leftWidth, double rightWidth) {BufferParameters params = new BufferParameters();params.setSingleSided(true);// 左侧缓冲区Geometry leftBuffer = BufferOp.bufferOp(line, -leftWidth, params);// 右侧缓冲区Geometry rightBuffer = BufferOp.bufferOp(line, rightWidth, params);// 合并两侧缓冲区return leftBuffer.union(rightBuffer);
}

在其他工具中的支持

单侧缓冲区功能也可在以下工具中使用:

QGIS

  • 处理工具箱 → 矢量几何 → 单侧缓冲区

PostGIS

-- PostGIS 中的单侧缓冲区
SELECT ST_Buffer(geom,10,'side=left'
) FROM lines;

Shapely (Python)

from shapely.geometry import LineString
from shapely.ops import single_sided_bufferline = LineString([(0, 0), (100, 0), (100, 100)])# 右侧缓冲区
right_buffer = single_sided_buffer(line, 10, side='right')# 左侧缓冲区
left_buffer = single_sided_buffer(line, 10, side='left')

注意事项

  1. 仅适用于线几何:单侧缓冲区主要用于 LineString 和 MultiLineString
  2. 点几何:对于点几何,单侧缓冲区与标准缓冲区相同
  3. 多边形:对于多边形,应使用标准缓冲区
  4. 方向一致性:确保线的数字化方向一致,以获得预期的缓冲方向

总结

单侧缓冲区是空间分析的重要工具,特别适用于需要在特定方向创建缓冲区的场景。JTS 提供了灵活的参数控制,可以根据不同需求定制缓冲区的形状和精度。

参考资料

  • JTS BufferParameters JavaDoc
  • JTS BufferOp JavaDoc
  • QGIS 单侧缓冲区算法
http://www.jsqmd.com/news/171926/

相关文章:

  • 软件体系结构——Chapter 8 性能
  • YOLOv8模型版本管理:使用Git Tag标记重要节点
  • 汇编语言全接触-59.Win32汇编教程三
  • 阈下抑郁文献
  • 从Windows到Linux再到macOS:C#权限模型统一落地的4种技术路径
  • 2018-Shapefiles-Good-Bad-Ugly
  • AP课程辅导全攻略:从选课逻辑到机构测评,助你精准提升申请竞争力 - 品牌测评鉴赏家
  • YOLOv8目标检测实战:从零搭建GPU环境并加速模型训练
  • 为什么顶尖团队都在用C#拦截器?深度剖析其在微服务通信中的核心价值
  • 2025年靠谱正规KOA电阻代理商排行榜,KOA电阻源头代理商推荐 - 工业推荐榜
  • 2025年防水/不伤牙/高端/感应充电/声波/敏感牙专用电动牙刷推荐榜:Allegro爱丽歌,适配精英人群的口腔护理新体验 - 品牌推荐官
  • 【C#跨平台方法拦截终极指南】:掌握高效AOP编程核心技术
  • 汇编语言全接触-60.Win32汇编教程四
  • YOLOv8在零售货架商品识别中的精准应用
  • 2026年1月份学校/幼儿园/医院/家装/儿童房/美容会所/酒店客房专用的环保涂料生产厂家权威测评榜单重磅来袭 - 一搜百应
  • 2026活塞压力计厂家最新推荐榜:含气体活塞压力计、高压活塞压力计、高静压差压、微压活塞压力计 - 深度智识库
  • YOLOv8模型灰盒测试方法:接口与行为验证
  • 感知机--异或门的实现
  • SAT/IB课程辅导机构怎么选?3大核心维度+优质机构推荐,备考少走弯路 - 品牌测评鉴赏家
  • 2020-JTS-Overlay-Next-Generation
  • java计算机毕业设计心理问题档案管理系统 心理健康信息档案平台 心理诊疗电子档案系统
  • 2025年钢渣/矿渣/铝灰/选矿/大型球磨机厂家实力推荐榜:四家源头厂家的全方位解析 - 品牌推荐官
  • 【毕业设计】基于SpringBoot的自习室预约管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 2025高性价比的成人书法培训专业机构TOP5排行 - 工业推荐榜
  • AI论文辅助工具排名:9款平台实测,开题报告生成及降重效果显著
  • 【C++高性能编程核心】:元编程中不可不知的3种代码压缩黑科技
  • 施工机械设备远程监控集中管理系统方案
  • 第6章 链路层和局域网
  • 为什么你的C#权限系统总出漏洞?跨平台统一控制的3个核心原则
  • 2025年无框眼镜公司口碑推荐,探索低调奢华与高级感之选 - 睿易优选