当前位置: 首页 > 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.gsyq.cn/news/187750.html

相关文章:

  • YOLOv8模型版本管理:使用Git Tag标记重要节点
  • 从Windows到Linux再到macOS:C#权限模型统一落地的4种技术路径
  • 【C#跨平台方法拦截终极指南】:掌握高效AOP编程核心技术
  • 感知机--异或门的实现
  • AI论文辅助工具排名:9款平台实测,开题报告生成及降重效果显著
  • 【毕业设计】基于SpringBoot的自习室预约管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 【C++高性能编程核心】:元编程中不可不知的3种代码压缩黑科技
  • 生态守护合规赋能:2026中钲集团引领矿山环境监理新标杆 - 朴素的承诺
  • 广州旗引科技GEO优化系统实现4小时响应AI平台算法迭代 技术实力引领行业创新 - 品牌推荐官优选
  • 2025年速冻冷库厂家权威推荐榜单:物流冷库/防爆冷库/冷库压缩机/冷藏冷库/冷库工程源头厂家精选 - 品牌推荐官
  • 2025年12月烤漆附着力促进剂厂家排名:服务决胜市场,欧晨麒全流程服务成行业标杆 - 品牌智鉴榜
  • C#跨平台日志监控最佳实践(专家级方案曝光)
  • 广州旗引科技GEO优化软件迭代机制解读:内外部双循环驱动技术持续进化 - 品牌推荐官优选
  • 【稀缺技术揭秘】:.NET中鲜为人知的内联数组优化技巧,仅1%开发者掌握
  • 旗引科技GEO优化系统工作原理与技术逻辑深度解析 - 品牌推荐官优选
  • YOLOv8中文社区资源汇总:文档、教程、问答平台
  • HuggingFace镜像网站上的YOLO系列资源全收录
  • AI论文平台推荐:6个高效工具,支持论文降重与智能改写,避免标红风险。
  • GitHub热门项目YOLOv8本地部署教程,支持GPU加速推理
  • nginx交叉编译 添加rtmp-module 用在Android设备上
  • 推荐6个AI论文网站,提供降重与自然改写功能,确保内容原创不标红
  • 2025年酒店布草洗衣机源头厂家权威推荐榜单:布草洗衣机/商用洗衣机/洗衣房洗衣机/消防服洗衣机/宾馆用洗衣机源头厂家精选 - 品牌推荐官
  • 跨平台权限混乱如何破局?C#统一认证授权体系构建全解析
  • AI使用手册 | 提示词工程
  • 揭秘C#类型别名黑科技:如何优雅适配复杂元组结构
  • 联盟营销落地页设计:突出TensorFlow应用场景优势
  • AI市场舆情分析榜单:原圈科技,定义2025年营销新标准
  • 2025年全屋定制品牌权威推荐榜:衣柜/板材/橱柜/装修/家装实力厂家精选,铭轩家俱等11家入围 - 品牌推荐官
  • Manacher
  • YOLOv8与OpenSpec集成方案:打造标准化AI开发流程