首页 / Turf.js / 教程
社区精选资源
先看结论
Turf 有近两百个函数,官方文档按字母排序,找起来并不直观。这一页把入口和常用函数按用途重新编排: 几何运算、距离面积、网格插值、关系判断各成一组,每条只给一句说明和它解决的问题。 遇到具体需求时先定位分组,再点进仓库查看该函数的测试用例——测试用例往往比文档更能说明边界行为。
先看哪一类
| 当前的处境 | 直接去哪 | 为什么 |
|---|---|---|
| 不知道有没有现成函数 | 官方文档的函数列表 | 按字母索引,先确认再动手写 |
| 算出的距离或面积偏小 | distance、area 的文档 | 默认按球面计算,与平面公式结果不同 |
| 两个面求交结果为空 | intersect 的测试用例 | 边界接触、坐标系不一致都可能导致空结果 |
| 渲染几十万个点很卡 | simplify、clusters-kmeans | 先抽稀或聚类,再交给地图渲染 |
| 不确定数据是否合法 | geojsonhint | 结构错误在几何计算里通常表现为空结果 |
官方文档与仓库
- turfjs.org:官网首页,含入门示例与文档入口。解决的问题:先确认 7.x 的安装方式与导入写法。
- 官方文档:函数索引与用法说明,按名字直接进对应页面。解决的问题:查函数签名、返回值结构与可选的
options。 - Turfjs/turf:源码与 issue。解决的问题:文档没覆盖的边界情况,直接看实现或搜讨论。
- packages 目录:按函数拆分的子包结构。解决的问题:确认某个函数属于哪个包,按需安装而不是引入全量。
- Releases:版本发布记录。解决的问题:定位某函数行为变更发生在哪个版本。
- CHANGELOG:逐版本变更记录。解决的问题:从 6.x 升到 7.x 时,确认导入方式与返回值的改动。
- GitHub Issues:bug 与用法讨论。解决的问题:结果是空值或数值异常时,确认是否已知问题。
- @turf/turf(npm):聚合包,一次引入全部函数。解决的问题:快速验证想法时不必逐个安装子包。
几何生成与运算
- buffer:按距离生成缓冲区。解决的问题:算服务半径、影响范围,或把线转成面。
- intersect:求两个面的相交部分。解决的问题:算两块用地的重叠区,或做空间叠加分析。
- union:把多个面合并为一个。解决的问题:把散碎的行政区或地块合成整体范围。
- difference:从一个面里扣除另一个面。解决的问题:在范围里挖掉水域、禁区或已有覆盖。
- mask:用多边形裁掉框外的内容。解决的问题:只显示某区域内的数据,框外留白。
- voronoi:生成泰森多边形。解决的问题:按最近设施划分服务区,或做站点覆盖分析。
- tin:由点生成不规则三角网。解决的问题:把离散点表达成连续面,做简易地形或等值面。
- simplify:按容差抽稀几何。解决的问题:面或线点数过多导致渲染慢、传输体积大。
- transform-rotate:旋转与缩放几何。解决的问题:让符号或范围按指定角度对齐,而不必手改坐标。
距离、面积与方位
- distance:两点间的球面距离。解决的问题:避免用平面勾股定理去算经纬度距离。
- length:线的总长度。解决的问题:路线里程、边界周长统计。
- area:面的面积。解决的问题:地块、行政区面积计算——注意大范围要用球面结果。
- bearing:两点方位角。解决的问题:画朝向箭头、判断行驶方向。
- rhumb-distance:等角航线距离。解决的问题:恒定航向场景(航海、飞行航段)的距离估算。
- along:沿指定线按距离取点。解决的问题:轨迹回放、沿线等距标注里程桩。
- centroid:几何质心。解决的问题:给面要素找一个合适的标注点或代表点。
- center:要素集合的中心点。解决的问题:把视图定位到一组要素的中间地带。
- bbox:计算外包框。解决的问题:缩放到数据范围、做粗略的空间索引。
网格、插值与聚类
- hex-grid:生成六边形网格。解决的问题:做密度统计时用形状更均匀的网格单元。
- point-grid:生成规则点阵。解决的问题:均匀采样、布置虚拟站点。
- square-grid:生成方格网。解决的问题:按方格聚合统计,结果更容易和报表对齐。
- interpolate:由离散点插值生成面。解决的问题:把监测站点的数值扩散成连续分布(如 IDW)。
- clusters-kmeans:K-means 聚类。解决的问题:把点位按位置分成若干组,便于分级展示。
关系判断与数据质量
- boolean-point-in-polygon:判断点是否在面内。解决的问题:电子围栏、判断坐标属于哪个行政区。
- boolean-within:判断一个要素是否被另一个完全包含。解决的问题:区划包含关系,而不是仅仅相交。
- nearest-point:找最近的点要素。解决的问题:就近匹配设施或站点,需要传
properties指定参照字段。 - kinks:检测线的自相交。解决的问题:导入数据前做质量检查,避免后续求交出现异常。
- helpers:构造 Feature、Geometry 与集合的工具。解决的问题:手写 GeoJSON 结构容易漏字段,用工厂函数更稳。
数据与工具
- geojson.io:在线查看与编辑 GeoJSON。解决的问题:先确认数据几何与结构,再排查代码逻辑。
- geojson.org:GeoJSON 格式的说明与规范入口。解决的问题:确认字段命名与坐标顺序等基础约定。
- RFC 7946:GeoJSON 的正式规范文本。解决的问题:遇到"坐标顺序""坐标轴朝向"这类争议时看原文。
- geojsonhint:GeoJSON 合法性校验工具。解决的问题:结构不合规的数据在 Turf 里往往只返回空结果,先校验能省很多排查。
社区问答
- Stack Overflow · turfjs 标签:英文问答。解决的问题:函数用法、返回空值、与地图库配合时的具体报错。
- GIS StackExchange · turf 标签:偏 GIS 概念与算法。解决的问题:球面与平面计算的差异、坐标系带来的误差。
- r/gis:GIS 综合社区。解决的问题:该用 Turf 还是交给数据库空间函数这类选型讨论。
注意事项
- 多数函数在输入不合法时返回
null而不是抛错,调用后要判空,否则空结果会被当成正常值继续往下传。 - 坐标顺序是
[经度, 纬度],写反不会报错,只会让结果落在错误的位置。 - 大范围计算依赖球面近似,跨省以上的面积与距离不要用平面近似替代。
怎么判断一篇教程是否过时
三条线索:版本号是否写明 7.x;日期是否近两年;
API 是否已废弃——7.x 全面转向 ESM 与具名导出,仍写 var turf = require('@turf/turf')
再 turf.buffer(...) 的文章属于 6.x 及更早的写法,按函数导入才是当前推荐方式。
版本与发布时间以 npm 为准:
npm view @turf/turf version
npm view @turf/turf time.modified
npm view @turf/turf exports
再看 CHANGELOG 与对应函数的测试用例。intersect、union 这类依赖底层几何库的函数,
在大版本升级时行为可能变化(例如对无效几何的处理更严格),测试用例能直接看出预期结果。
先在小数据上验证。把文章里的调用换成自己的两三个要素跑一遍,
确认返回的 geometry.type 与坐标量级是否正确。Turf 多数函数在输入不合法时返回
null 而非抛错,静默的空结果最容易被误判成代码没错。
经纬志(2026)。《社区精选资源》。https://www.jingweizhi.com/turf/tutorial/community-picks.html(访问日期 2026-11-03)。