
Turf.js是JavaScript 空间分析库,由Mapbox 提供,Turf 实现了
Turf.js使用 JavaScript 编写,通过 npm 进行包管理。良好的模块化设计使得 Turf 不仅可用于浏览器端(以往只属于桌面 GIS 的分析功能,已经可以在浏览器中使用),还可以通过 Node.js 在服务器端使用(过往一般只能找到java或者C++分析包)。当然也支持其它预研版本
Turf 原生支持 GeoJSON 矢量数据。GeoJSON 的优点是结构简单,并且得到了所有网页地图API的支持;但 GeoJSON 不支持空间索引,这个缺点可能会限制 Turf 处理大型文件的能力效率。
Turf 可以非方便地集成到 Leaflet.js 地图控件中,Mapbox 也为其提供了相应的 Mapbox.js 插件。
Turf的数据标准是WGS84经度、纬度坐标,大多数Turf函数使用GeoJSON功能,如点Point、线LineString、面Polygon
TurfTurf.js库应用:点线面几何体的拓扑关系判断及运算分析
Turf功能列表:
一般要到最多的是BOOLEANS 拓扑关系判断、JOINS筛选、COORDINATE MUTATION坐标变换,像MEASUREMENT计算工具(百度、高德都自带数学工具),其中最常用的一概是拓扑关系了。
在数学上,拓扑关系有

Turf提供的拓扑关系判断,Geometry之间的关系有如下几种:
关系类型 | 描述 |
|---|---|
包含:Contains | 几何形状B的线都在几何形状A内部 :B⊂A,检查几何对象A是否包含几何对象B。 |
内含:Within | 几何形状A的线都在几何形状B内部。B⊃A |
相交:Crosses | 几何形状至少有一个共有点 A∩B≠∅ , 检查两个几何对象是否交叉相交。只能在不同维度使用:如点和线,线和面等。不能在线与线之间,和点与点之间,也不能在面与面之间使用。 |
脱节:Disjoint | 几何形状没有共有的点 A∩B=∅, 检查两个几何对象是否相交。 |
相等:Equals: | 判断两个图形是否是同一个类型并且在平面上的点是否是相同的位置。如果返回值为真,则它们应该包含(Contains)另外一个图形同时也被另外一个图形所包含(Within)。A≡B,B⊆A且B⊇A |
重叠:Overlaps | 几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。判断两个图形的交集是否和其中的一个图形拥有相同的维数,并且他们交集不能和其中任何一个图形相等。该方法只使用与两个Polyline之间或者两个Polygon 之间。 |
接触:Touch | 几何形状有至少一个公共的边界点,但是没有内部点。检查两个几何对象是否相连判断两个图形的边界是否相交,如果两个图形的交集不为空,但两个图形内部的交集为空,则返回值为真。 |
overlaps 重叠
这里的重叠跟平时我们理解的不太一样,这里的重叠,必须是A与B有交集,且A与B的交集不能和A,B一样,其实就是我们平时理解的相交。
该方法只使用与两个Polyline之间或者两个Polygon 之间。
这里的拓扑关系比较特殊,使用crosses,不能在同纬度使用,但可以在不同的维度使用,如:点和线,线和面等。
不能在线与线之间,和点与点之间,也不能在面与面之间使用。
这里的相交就容易理解了,只要满足上面任意一种情况,都能成为insertect。
对于需要交叉裁剪的(如:相交的,这里的相交是,overlaps,而不是insertect),再进行逻辑分析
必须完全在范围之内的。
官方文档已经讲的非常详细,不必多说
拓扑关系及运算分析:
关系 | 描述 |
|---|---|
缓冲区分析(Buffer) | 包含所有的点在一个指定距离内的多边形和多多边形。如辐射范围,使用该方法 |
凸壳分析(ConvexHull) | 包含几何形体的所有点的最小凸壳多边形(外包多边形)登高先 |
交叉分析(Intersection) | A∩B 交叉操作就是多边形AB中所有共同点的集合 |
联合分析(Union) | AUB AB的联合操作就是AB所有点的集合 |
差异分析(Difference) | (A-A∩B) AB形状的差异分析就是A里有B里没有的所有点的集合 |
对称差异分析(SymDifference) | (AUB-A∩B) AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合 |
推荐阅读《代数拓扑\集合拓扑\代数拓扑\拓扑关系\拓扑结构_笔记》




turf.js关系分析函数主要在TRANSFORMATION下,api参考:http://turfjs.org/docs/#buffer
这方面,觉得没有必要多谢,还是看api吧
官网:http://turfjs.org/
git:https://github.com/Turfjs/turf
npm install@turf/turf单独安装某个模块
npm install@turf/point @turf/bufferTypeScript 版本使用
npm install--save @types/turf现在的打包工具,直接第一条
import * as turf from '@turf/turf'
var point = turf.point([-75.343, 39.984]);
var linestring = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
var collection = turf.featureCollection([point,linestring,polygon]);
var geometry = { "type": "Point", "coordinates": [110, 50]};
var feature = turf.feature(geometry);使用方面,就没有啥好说的,网上搜到了一些案例,可以看一下。

这里用Turf.js 只是为了用union方法, 将多个圆拼凑起来.
参考资料:
利用Turf.js实现点线面几何体的拓扑关系判断 https://blog.csdn.net/u013240519/article/details/84144336
JTS Geometry关系判断和分析 https://www.cnblogs.com/duanxingxing/p/5150487.html
arcgis js 几种拓扑关系详解 https://www.cnblogs.com/sguozeng/p/10250135.html
转载本站文章《GIS拓扑讲解点线面几何体的拓扑关系判断及运算分析_turf案例》, 请注明出处:https://www.zhoulujun.cn/html/GIS/WebGIS/8177.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。