经纬志
首页 / Turf.js / 教程

社区精选资源

先看结论

Turf 有近两百个函数,官方文档按字母排序,找起来并不直观。这一页把入口和常用函数按用途重新编排: 几何运算、距离面积、网格插值、关系判断各成一组,每条只给一句说明和它解决的问题。 遇到具体需求时先定位分组,再点进仓库查看该函数的测试用例——测试用例往往比文档更能说明边界行为。

最后验证 2026-11-03 · Turf.js 7.x · 更新 2026-10-29 · 引用本文

先看哪一类

当前的处境直接去哪为什么
不知道有没有现成函数官方文档的函数列表按字母索引,先确认再动手写
算出的距离或面积偏小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)。