WebGIS开发入门教程八: 空间分析咋做?Turf.js怎么用?
“我的缓冲区分析怎么老是报错?”——别慌,Turf.js来救场
你是不是也遇到过这种情况:辛辛苦苦用Leaflet画了个点,想做个500米缓冲区,结果浏览器控制台一片红?或者前端同事催着要“热力图+交集分析”的功能,你却还在纠结要不要搭Geoserver?别焦虑,这根本不是你的错——传统GIS空间分析依赖后端或桌面软件,而WebGIS时代,我们需要的是轻量、快速、纯前端的解决方案。今天,Dr. Gis就手把手带你用Turf.js把空间分析“搬”到浏览器里。

为什么选Turf.js?因为它像瑞士军刀一样趁手
我在参与某智慧城市项目时,客户要求实时计算共享单车热点与地铁站的服务范围重叠率。如果走后端分析,每次拖动地图都要等3秒响应——用户早跑了。后来我们切换到Turf.js,所有计算在前端完成,毫秒级反馈,客户当场拍板加预算。
Turf.js是什么?简单说,它就是一个用JavaScript写的地理空间分析库,专为WebGIS而生。不需要装ArcGIS,不用配PostGIS,甚至不用懂复杂的投影变换公式。它把那些高大上的空间算法(缓冲区、插值、叠加分析…)封装成一个个函数,你只需要传入GeoJSON格式的数据,就能拿到结果。就像你去超市买切好的净菜,回家直接下锅——省去了“洗菜切菜”的繁琐过程。
Turf.js ≠ GIS桌面软件。它不追求“全功能”,而是专注“高频刚需”。适合80%的轻量级空间分析场景,比如:找最近设施、划服务圈、算区域重叠面积、生成热力点等。
实战教学:三步上手Turf.js核心功能
我们以“计算某公园500米缓冲区内有多少家咖啡店”为例,拆解操作流程:
第一步:安装与引入
最简单的方式是通过CDN直接引入:
<script src="https://unpkg.com/@turf/turf@6.5.0/turf.min.js"></script>或者用npm管理(推荐生产环境):
npm install @turf/turf第二步:准备数据——GeoJSON是通行证
Turf.js只认GeoJSON。假设你有一个公园的点坐标和一堆咖啡店的点集合:
// 公园位置
const park = turf.point([116.39, 39.91]);
// 咖啡店集合
const cafes = turf.points([
[116.38, 39.92],
[116.40, 39.90],
[116.37, 39.93]
]);⚠️ 注意:坐标必须是[经度, 纬度]顺序!我见过太多人写反导致结果跑到太平洋去了。
第三步:调用函数——像搭积木一样简单
现在,创建500米缓冲区,并筛选落在其中的咖啡店:
// 创建缓冲区(单位:米)
const buffer = turf.buffer(park, 500, {units: 'meters'});
// 筛选落在缓冲区内的点
const withinBuffer = turf.pointsWithinPolygon(cafes, buffer);
console.log(withinBuffer.features.length); // 输出:符合条件的咖啡店数量就这么简单。没有SQL,没有ModelBuilder,一行代码搞定空间查询。
进阶技巧:这些坑我替你踩过了
在真实项目中,我发现新手最容易栽在三个地方:
- 坐标系问题:Turf.js默认使用WGS84(EPSG:4326),如果你的数据是其他坐标系(比如Web墨卡托),必须先转换。可以用
turf.transformScale或proj4js辅助。 - 性能瓶颈:当点数据超过1万时,前端计算会卡顿。我的方案是:先用
turf.bbox做粗筛,再精细计算。 - 可视化联动:分析结果是GeoJSON,直接丢给Leaflet或Mapbox就能渲染。但记得用
turf.area(buffer)这类函数提取数值,用于图表展示。
空间分析不止于“画圈圈”——Turf.js还能做什么?
| 功能 | 对应函数 | 生活化类比 |
|---|---|---|
| 找最近医院 | turf.nearestPoint | 像外卖APP自动推荐“距离你最近的3家店” |
| 计算服务区重叠率 | turf.intersect + turf.area | 像两块披萨叠在一起,算重合部分占多少 |
| 生成等值线 | turf.isobands | 像天气预报里的温度分布图 |
总结:空间分析的未来在前端
记住这三个关键点:
① Turf.js让空间分析从“专家专属”变成“前端标配”;
② GeoJSON是数据交换的通用语言;
③ 复杂计算交给后端,高频轻量分析大胆用前端。
现在轮到你了——你在项目中用Turf.js做过哪些有趣的空间分析?是计算台风影响范围?还是规划共享单车调度路线?欢迎在评论区晒出你的代码片段,我会挑3个最有创意的案例,送你《WebGIS性能优化手册》电子版!
-
GIS坐标系总是搞混?各行业投影选择与WGS84、CGCS2000转换实战技巧(含:对照表) 2026-01-14 08:30:02
-
GIS坐标系位置总对不上?三步搞定数据偏移修正(附:参数对照表) 2026-01-14 08:30:02
-
GIS坐标系6位转8位总出错?核心算法与精度提升技巧详解(附:参数对照表) 2026-01-14 08:30:02
-
GIS坐标系怎么设置?从定义到投影转换的实战指南(附:参数对照表) 2026-01-13 08:30:02
-
GIS坐标系到底用哪个?盘点国内主流坐标系及转换技巧(附:参数表) 2026-01-13 08:30:02
-
GIS坐标系转换工具怎么选?高精度投影转换实战技巧(附:对照表) 2026-01-13 08:30:02
-
GIS坐标系到底怎么选?一文搞懂投影与转换(含:常用参数表) 2026-01-13 08:30:02
-
GIS坐标系转换为何总出错?常见误区排查与修正方案(附:对照表) 2026-01-13 08:30:02
-
GIS坐标系转换总出错?核心参数与校正流程详解(附:参数表) 2026-01-13 08:30:02
-
GIS坐标系与投影傻傻分不清?GIS中地理坐标系转投影坐标系实战指南(含:常用投影参数表) 2026-01-13 08:30:01
-
GIS坐标系与投影总是报错?ArcGIS坐标定义与转换参数详解(附:对照表) 2026-01-13 08:30:01
-
GIS坐标系与投影总报错?地理坐标系和投影坐标系的核心区别(含:转换公式) 2026-01-13 08:30:01
-
WGS84坐标系转换CGCS2000总出错?原理剖析与实战转换步骤(附:常用GIS软件参数表) 2026-01-13 08:30:01
-
GIS投影后坐标没变化?定义坐标系与投影工具使用误区详解(附:对照表) 2026-01-12 08:30:02
-
GIS投影总报错?WGS84转CGCS2000实战步骤与参数详解(附:坐标系对照表) 2026-01-12 08:30:02
-
GIS投影坐标总是偏移?一分钟搞定坐标系定义与转换(附:高精度参数表) 2026-01-12 08:30:02
-
GIS坐标系与投影总出错?盘点常见投影变形问题与修正方案(附:WGS84与CGCS2000转换参数表) 2026-01-12 08:30:02
-
GIS坐标系统与投影转换必学!(含:坐标系定义与投影作用详解) 2026-01-12 08:30:02
-
GIS坐标系与投影转换总出错?排查思路与常用坐标系对照表(附:EPSG代码) 2026-01-12 08:30:02
-
GIS坐标系与投影到底怎么选?常见误区盘点与选型指南(附:对照表) 2026-01-12 08:30:02