Skip to content

几何操作

本页面介绍 Turf.js 中操作和分析几何形状的主要地理空间操作。这些操作通过数学算法将输入几何体转换为新的几何形式,包括缓冲区创建、裁剪、凸包生成和网格创建。

对于空间关系函数(intersects、contains、within),请参见 布尔操作。对于线专用操作,请参见 线操作。对于测量和坐标转换,请参见 测量与变换

操作分类

Turf 的几何操作按照功能分类组织,每个分类服务于特定的空间分析需求:

SVG
100%

核心依赖和架构

几何操作依赖于 Turf 内部模块和外部计算几何库:

SVG
100%

缓冲区操作

@turf/buffer 模块使用测地投影和 Java Topology Suite (JSTS) 算法在输入几何体周围创建缓冲区。

缓冲区算法实现

缓冲区操作使用复杂的坐标投影方法来处理地球曲率:

ComponentPurposeImplementation
defineProjection()Creates azimuthal equidistant projectionUses d3-geo.geoAzimuthalEquidistant() centered on feature
projectCoords()Converts to planar coordinatesRecursively projects coordinate arrays
BufferOp.bufferOp()Performs geometric bufferJSTS library operation in projected space
unprojectCoords()Converts back to geographicInverse projection to WGS84 coordinates

buffer() 函数通过递归处理处理多种几何类型:

  • FeatureCollection:通过 featureEach() 处理每个 feature
  • GeometryCollection:通过 geomEach() 递归处理几何体
  • 单个 Feature:通过 bufferFeature() 直接处理

支持负缓冲区值用于"侵蚀"操作,但过大的负值可能导致无效几何体。

多边形裁剪操作

并集、交集和差集操作使用 polyclip-ts 库实现稳健的多边形裁剪算法。

裁剪操作矩阵

操作模块输入输出算法
Union@turf/union两个或多个多边形单个合并后的多边形Greiner-Hormann 裁剪
Intersect@turf/intersect两个多边形共享区域多边形Sutherland-Hodgman 裁剪
Difference@turf/difference基础多边形和裁剪多边形剩余区域多边形布尔差集操作

这三个操作都遵循类似的模式:

  1. 通过 @turf/invariant 进行输入验证
  2. 通过 @turf/meta 提取坐标
  3. 通过 polyclip-ts 执行算法
  4. 使用 @turf/helpers 打包结果

凸包生成

凸包操作使用不同的算法在点集周围创建边界多边形,用于凸包和凹包。

凸包算法比较

SVG
100%

@turf/convex 模块使用 concaveman 库同时生成凸包和凹包,而 @turf/concave 提供额外的凹包专用功能和拓扑分析。

网格生成系统

网格生成在边界框内创建规则镶嵌用于空间分析和可视化。

网格类型规格

网格类型模块形状镶嵌模式
Hexagonal@turf/hex-grid正六边形蜂窝模式
Square@turf/square-grid矩形/正方形笛卡尔网格
Triangular@turf/triangle-grid等边三角形三角形格子
Point@turf/point-grid规则点数组

所有网格生成器共享通用参数:

  • bbox[minX, minY, maxX, maxY] 边界框
  • cellSide:指定单位的单元大小
  • units@turf/helpers 中的距离单位
  • mask:用于裁剪结果的可选多边形

@turf/square-grid 委托给 @turf/rectangle-grid 实现,而六边形和三角形网格实现自定义镶嵌算法。

等高线生成

等高线操作使用 marching squares 算法从网格数据生成等值线和等值带。

等高线处理流水线

SVG
100%

@turf/isolines@turf/isobands 都使用 marchingsquares 库进行等高线提取,但输出几何体不同:

  • 等值线:生成表示等高线的 LineString features
  • 等值带:生成表示填充等高带的 Polygon features

形状分析操作

形状分析函数计算几何属性并派生输入 features 的简化表示。

分析函数分类

类别函数目的
中心计算center(), centroid(), centerOfMass()查找代表点
形状简化simplify(), envelope()降低复杂度
坐标操作flip(), explode(), combine()转换坐标结构
空间聚合collect(), tag()基于空间关系组合 features

@turf/simplify 模块实现 Ramer-Douglas-Peucker 算法用于线简化,而 @turf/envelope 使用 @turf/bbox-polygon 创建最小边界矩形。

性能考虑

几何操作具有不同的计算复杂度和内存需求:

算法复杂度

操作类型典型复杂度内存使用优化策略
缓冲区O(n × steps)高(投影)减少 steps 参数
多边形裁剪O(n × m)中等按边界预筛选
凸包生成O(n log n)空间索引
网格生成O(cells)中等流式处理
等高线生成O(grid²)基于瓦片的处理

大数据集应使用 @turf/meta 迭代函数(featureEachgeomEach)分块处理以有效管理内存使用。