网格生成
Turf.js 中的网格生成功能在指定区域内创建规则的几何点或多边形模式。这些工具对于空间分析任务(如采样、镶嵌和创建统一的空间数据结构)至关重要。网格生成系统提供四种不同的网格类型:六边形、正方形、三角形和点网格,每种都针对不同的分析用例进行了优化。
有关空间聚类算法的信息,请参阅 Clustering。有关使用基于网格数据的统计函数的信息,请参阅 Statistical Analysis。
网格类型和模块结构
网格生成系统由五个专用模块组成,每个模块实现特定的网格模式:
|| 模块 | 函数 | 输出 | 主要用例 | || --- | --- | --- | --- | || @turf/point-grid | pointGrid() | Point 要素 | 采样、分析位置 | || @turf/square-grid | squareGrid() | 正方形多边形要素 | 规则镶嵌、等面积单元 | || @turf/rectangle-grid | rectangleGrid() | 矩形多边形要素 | 基础网格实现 | || @turf/hex-grid | hexGrid() | 六边形多边形要素 | 最优覆盖、邻接分析 | || @turf/triangle-grid | triangleGrid() | 三角形多边形要素 | 基于三角化的分析 |
模块依赖和架构
点网格实现
pointGrid 函数在边界框内生成规则的点要素数组。这是用于采样和分析操作的最常用网格类型。
函数签名和参数
所有网格生成功能遵循一致的 API 模式:
gridFunction(bbox: BBox, cellSide: number, options?: GridOptions)标准参数:
|| 参数 | 类型 | 描述 | || --- | --- | --- | || bbox | BBox | 定义网格区域的边界框数组 [minX, minY, maxX, maxY] | || cellSide | number | 网格单元之间的距离(间距或边长) | || options | Object | 可选配置对象 |
通用选项:
|| 选项 | 类型 | 默认值 | 模块 | 描述 | || --- | --- | --- | --- | --- | || units | string | "kilometers" | 所有 | 测量单位:"miles"、"kilometers"、"degrees" 等 | || mask | Feature<Polygon> | undefined | point-grid | 用于裁剪网格点的多边形 | || properties | Object | {} | 所有 | 添加到每个要素的属性 | || triangles | boolean | false | hex-grid | 返回三角形网格而非六边形 |
网格特定处理流程
使用示例和配置
点网格示例:
const bbox = [-95, 30, -85, 40];
const cellSide = 50;
const options = {
units: 'miles',
properties: { gridType: 'analysis' }
};
const grid = pointGrid(bbox, cellSide, options);带三角化的六边形网格:
const bbox = [-96.6, 31.1, -84.9, 40.6];
const cellSide = 50;
const options = {
units: 'miles',
triangles: true, // 返回三角形单元而非六边形
properties: { foo: 'bar' }
};
const hexGrid = hexGrid(bbox, cellSide, options);
// 访问属性:hexGrid.features[0].properties.foo通过矩形网格生成正方形网格:
squareGrid() 函数内部委托给 rectangleGrid() 以创建等尺寸的正方形单元:
const bbox = [-95, 30, -85, 40];
const cellSide = 10;
const grid = squareGrid(bbox, cellSide, { units: 'kilometers' });配置选项矩阵:
|| 网格类型 | 支持掩码 | 支持三角化 | 单元裁剪方法 | || --- | --- | --- | --- | || pointGrid | 是(通过 mask 选项) | 否 | @turf/boolean-within | || squareGrid | 否 | 否 | N/A | || rectangleGrid | 否 | 否 | N/A | || hexGrid | 是(隐式) | 是(通过 triangles 选项) | @turf/intersect | || triangleGrid | 是(隐式) | 否 | @turf/intersect |
六边形网格特殊功能
@turf/hex-grid 模块与其他网格类型相比提供独特的功能:
六边形与三角形模式
hexGrid() 函数可以根据 triangles 选项生成六边形或三角形网格:
六边形几何计算
六边形网格使用基于正六边形属性的专用几何:
|| 六边形属性 | 计算 | 用途 | || --- | --- | --- | || 边长 | cellSide 参数 | 直接输入 | || 宽度(平顶) | √3 × sideLength | 水平间距 | || 高度(平顶) | 2 × sideLength | 垂直间距 | || 行偏移 | width / 2 | 交替行对齐 | || 顶点角度 | 60° 的倍数 | 正六边形顶点 |
距离和交集使用
hex-grid 模块利用其他 Turf 模块进行精确计算:
地理边界情况和投影
网格生成处理几种地理边界情况,特别是在国际日期变更线和极地区域周围:
坐标系统处理
系统处理各种地理边界上的坐标:
|| 测试用例 | 坐标 | 特殊处理 | || --- | --- | --- | || 斐济 | [-180.34, -17.11, -179.57, -16.48] | 日期线穿越 | || 北极 | [-95.87, 74.46, -94.03, 74.90] | 高纬度 | || 大边界框 | [-220.78, -80.64, -29.53, 78.34] | 扩展经度范围 |
单位转换系统
网格间距以各种单位指定并转换为适当的坐标增量:
掩码和过滤
网格生成系统支持多边形掩码,以将网格点限制在特定的地理区域内:
掩码系统处理具有多个顶点的复杂多边形,如 Piedmont 区域测试用例所示,该用例具有定义边界的 28 个坐标对。
与核心模块集成
网格生成功能与 Turf 的核心辅助和元数据模块紧密集成:
这种集成确保所有网格类型具有一致的 GeoJSON 输出格式,并利用共享的坐标处理工具。