Turf.js简介
本⽂转⾃请⽀持原创!
前⾔
我们在地图相关系统中必不可少的就是空间分析操作相关需求,例如缓冲区、计算等⾼线等。凭借简单的js我们⽆法将点线⾯进⾏结合分析,⽽Turf.js的出现帮我们解决了这⼀难题,让我们在浏览器中也可以轻松的使⽤以前只属于桌⾯GIS的分析功能。
Turf.js简介及其意义
Turf.js是MapBox公司研发的基于浏览器端的空间分析库,它使⽤JavaScript进⾏编写,通过npm进⾏包管理。值得⼀提的是,良好的模块化设计使其不仅能够作⽤于浏览器端、还可通过Node.js在服务端使⽤。Turf 原⽣⽀持 GeoJSON ⽮量数据。GeoJSON 的优点是结构简单,并且得到了所有⽹页地图API的⽀持;但 GeoJSON 不⽀持空间索引,这个缺点可能会限制 Turf 处理⼤型⽂件的能⼒效率。其适⽤于轻量级(数据轻量⽽⾮功能轻量)的WebGIS应⽤。
浏览器端⽀持空间分析的意义在于,通过⽹页地图的不仅可提供地名搜索与路径查询(⽬前 Google Maps 的功能其实与⼗年前并没有太⼤区别),⽽且可以在浏览器中分享空间分析模型。以前的 WebGI
S 功能当然也⽀持空间分析,但是分析过程需要在服务器端进⾏,本地能够进⾏的设置有限,现在使⽤ Turf.js 可以将分析过程完全移到本地,如果页⾯中提供了参数设置的话,可以在本地对模型进⾏修改并⽴即看到分析结果。这样的直接好处有两个⽅⾯:更渲的数据展⽰,以及更加复杂的⽤户交互(复杂交互本⾝需要空间分析作为基础)。
安装
引⼊全部功能
// 下载
$ npm install @turf/turf
// 引⼊
import * as turf from '@turf/turf'
import { lineString, along } from '@turf/turf'
如果想引⽤指定模块,可以下载功能名称对应的npm包(功能名称对应其包的名称)
$ npm install @turf/collect
import collect from '@turf/collect';
功能
Turf 有着质量极⾼的,详细介绍了每个功能模块的使⽤,并有在线⽰例可以直接上⼿试⽤。
Turf的功能分为⼏⼤类,我们列举⼏个常⽤类并抽出⼀两个常⽤⽅法做展⽰。
MEASUREMENT
area(计算区域⾯积)
获取⼀个或多个feature,并返回其⾯积平⽅⽶。
参数
参数类型描述
geojson GeoJSON input GeoJSON feature(s)
返回
number - area in square meters
⽰例
var polygon = turf.polygon([[
[108.09876, 37.200787],
[106.398901, 33.648651],
[114.972103, 33.340483],
[113.715685, 37.845557],
[108.09876, 37.200787]
]]);
var area = turf.area(polygon);
npm install @turf/area
centerOfMass(计算多边形质⼼)
取任何Feature或FeatureCollection,并利⽤这个公式返回其质⼼:多边形质⼼。
参数
参数类型描述
geojson GeoJSON GeoJSON to be centered
properties Object an Object that is used as the Feature 's properties
返回
Feature - the center of mass
⽰例
var polygon = turf.polygon([[[-81, 41], [-88, 36], [-84, 31], [-80, 33], [-77, 39], [-81, 41]]]);
var center = OfMass(polygon);
npm install @turf/center-of-mass
TRANSFORMATION
buffer(计算缓冲区)
为给定半径的Feature计算⼀个缓冲区。⽀持的单位是英⾥、公⾥和度数。
参数
参数类型描述
geojson(FeatureCollection|Geometry|Feature )input to be buffered
radius number distance to draw the buffer (negative values are allowed) options Object Optional parameters: see below
options选项
属性类型默认值描述
units string kilometers any of the options supported by turf units
steps number64number of steps
返回
(FeatureCollection|Feature <(Polygon|MultiPolygon)>|undefined) - buffered features
⽰例
var point = turf.point([-90.548630, 14.616599]);
var buffered = turf.buffer(point, 500, {units: 'miles'});
npm install @turf/buffer
transformTranslate(平移)
在给定的⽅向⾓上沿沿恒向线移动指定距离的任何geojson Feature或⼏何图形。
参数
参数类型描述
geojson GeoJSON object to be translated
distance number length of the motion; negative values determine motion in opposite direction
direction number of the motion; angle from North in decimal degrees, positive clockwise
options Object Optional parameters: see below
options选项
属性类型默认值描述
units string kilometers in which
zTranslation number0length of the vertical motion, same unit of distance
mutate boolean false allows GeoJSON input to be mutated (significant performance increase if true)
返回
GeoJSON - the translated GeoJSON object
⽰例
npm install @turf/transform-translate
MISC
lineIntersect(计算两端线段相交点)
获取任何LineString或Polygon GeoJSON,并返回相交点。
参数
参数类型描述
line1(Geometry|FeatureCollection|Feature <(LineString|MultiLineString|Polygon|MultiPolygon)>)any LineString or Polygon line2(Geometry|FeatureCollection|Feature <(LineString|MultiLineString|Polygon|MultiPolygon)>)any LineString or Polygon
返回
FeatureCollection - point(s) that intersect both
⽰例
npm install @turf/line-intersect
mask(返回⾮遮罩多边形)
获取任意类型的多边形和⼀个可选的遮罩,并返回⼀个带孔的多边形外部环。
参数
参数类型描述
polygon (FeatureCollection|Feature
<(Polygon|MultiPolygon)>)
GeoJSON Polygon used as interior rings or holes.
mask(Feature )GeoJSON Polygon used as the exterior ring (if undefined, the world extent is used)
var poly = turf.polygon([[[0,29],[3.5,29],[2.5,32],[0,29]]]);
var translatedPoly = ansformTranslate(poly, 100, 35);
var line1 = turf.lineString([[126, -11], [129, -21]]);var line2 = turf.lineString([[123, -18], [131, -14]]);var intersects = turf.lineIntersect(line1, line2);
返回
Feature - Masked Polygon (exterior ring with holes).⽰例
npm install @turf/mask
JOINS
pointsWithinPolygon (返回在多边形内的点)
到落在(多个)多边形内的点。参数
参数类型
描述
points
(Feauture|FeatureCollection )
Points as input search
polygons (FeatureCollection|Geometry|Feature <(Polygon|MultiPolygon)>)Points must be within these (Multi)Polygon(s)
返回
FeatureCollection - points that land within at least one polygon ⽰例
npm install @turf/points-within-polygon
BOOLEANS
booleanPointInPolygon (判断点是否在多边形内)
取⼀个点和⼀个多边形或多多边形,并确定该点是否位于该多边形内。多边形可以是凸的,也可以是凹的。
参数
原生js和js的区别参数类型
描述
point Coord
input point
polygon Feature <(Polygon|MultiPolygon)>input polygon or multipolygon options Object
Optional parameters: see below
options 选项
属性
类型
默认值
描述
ignoreBoundary boolean false True if polygon boundary should be ignored when determining if the point is inside the polygon otherwise false.
返回
boolean - true if the Point is inside the Polygon; false if the Point is not inside the Polygon ⽰例
var polygon = turf.polygon([[[112, -21], [116, -36], [146, -39], [153, -24], [133, -10], [112, -21]]]);var mask = turf.polygon([[[90, -55], [170, -55], [170, 10], [90,
var points = turf.points([ [-46.6318, -23.5523], [-46.6246, -23.5325], [-46.6062, -23.5513], [-46.663, -23.554], [-46.643, -23.557]]);var searchWithin
> npm install @turf/boolean-point-in-polygon
var pt = turf.point([-77, 44]);var poly = turf.polygon([[ [-81, 41], [-81, 47], [-72, 47], [-72, 41], [-81, 41]]]);turf.booleanPointInPolygon(pt, poly);//= true
附录
(这个⽹页⾥有 mapbox 基于 Turf 开发的精美地图……的截图)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论