适用于浏览器和Node.js的高级地理空间分析库
坐标默认是经纬度【经度,纬度】//先经度,后纬度
获取一个区域的面积(单位是㎡)
用法:
参数:
返回:
(number):面积(单位是㎡)
例子:
varpolygon=turf.polygon([[[125,-15],[113,-22],[154,-27],[144,-15],[125,-15],],]);vararea=turf.area(polygon);//3332484969239.2676bbox获取边界框计算任何GeoJSON对象(包括FeatureCollection)的边界框
[minX,minY,maxX,maxY](Number[]):边界值
varline=turf.lineString([[-74,40],[-78,42],[-82,35],]);varbbox=turf.bbox(line);//[-82,35,-74,42]varbboxPolygon=turf.bboxPolygon(bbox);//如果line里面自己包含bboxvarline=turf.lineString([[-74,40],[-78,42],[-82,35],]);line.bbox=[1,1,1,1]varbbox=turf.bbox(line);//[1,1,1,1]varbboxPolygon=turf.bboxPolygon(bbox);//如果recompute为truevarline=turf.lineString([[-74,40],[-78,42],[-82,35],]);line.bbox=[1,1,1,1]varbbox=turf.bbox(line,{recompute:true});//[-82,35,-74,42]varbboxPolygon=turf.bboxPolygon(bbox);bboxPolygon把边界值转为等价的polygon对象把bbox的值转为一个等价的polygon地理数据对象
varbbox=[0,0,10,10];varpoly=turf.bboxPolygon(bbox);envelope获取元素边界框接受任意数量的要素,并返回一个包围所有顶点的矩形多边形。等价于bbox+bboxPolygon
varfeatures=turf.featureCollection([turf.point([-75.343,39.984],{name:"LocationA"}),turf.point([-75.833,39.284],{name:"LocationB"}),turf.point([-75.534,39.123],{name:"LocationC"}),]);varenveloped=turf.envelope(features);square计算正方形边界框接受一个边界框并计算能容纳输入的最小正方形边界框.
(BBox):正方形边界框
varbbox=[-20,-20,-15,0];varsquared=turf.square(bbox);计算中心center/centerOfMass/centerMean/centerMedian@turf/center
@turf/center-of-mass
@turf/center-mean
@turf/center-median
接受一个要素或要素集合,并返回所有要素的绝对中心点。
varpolygon=turf.polygon([[[-81,41],[-88,36],[-84,31],[-80,33],[-77,39],[-81,41],],]);varcenter=turf.centerOfMass(polygon);centroid计算质心计算质心作为对象内所有顶点的平均值。
varpolygon=turf.polygon([[[-81,41],[-88,36],[-84,31],[-80,33],[-77,39],[-81,41],],]);varcentroid=turf.centroid(polygon);pointsWithinPolygon查找在落在多边形内的点查找落在(多)多边形内的点或多点坐标位置。
用法:
返回:
例子:
varpoints=turf.points([[-46.6318,-23.5523],[-46.6246,-23.5325],[-46.6062,-23.5513],[-46.663,-23.554],[-46.643,-23.557],]);varsearchWithin=turf.polygon([[[-46.653,-23.543],[-46.634,-23.5346],[-46.613,-23.543],[-46.614,-23.559],[-46.631,-23.567],[-46.653,-23.56],[-46.653,-23.543],],]);varptsWithin=turf.pointsWithinPolygon(points,searchWithin);LineStringalong获取指定距离的坐标返回沿着管线指定距离的点的坐标
varline=turf.lineString([[-83,30],[-84,36],[-78,41],]);varoptions={units:"miles"};varalong=turf.along(line,200,options);//Point([-83.4608648621918,32.8678095806294])length计算线长度用指定单位计算线的长度
(Number):线的长度
varline=turf.lineString([[115,-32],[131,-22],[143,-25],[150,-34],]);varlength=turf.length(line,{units:"miles"});//2738.9663893575207pointToLineDistance计算点到线的最短距离接受一个点和一条线,并返回点到线的最短距离。
(Number):点到线的最短距离
varpt=turf.point([0,0]);varline=turf.lineString([[1,1],[-1,1],]);vardistance=turf.pointToLineDistance(pt,line,{units:"miles"});//=69.11854715938406nearestPointOnLine获取点到线的最近点提供一个Point和一个LineString,返回LineString上离Point最近的点
(Feature)
返回点集合中距离直线最近点。返回的点有一个dist属性,表示它到直线的距离
varpt1=turf.point([0,0]);varpt2=turf.point([0.5,0.5]);varpoints=turf.featureCollection([pt1,pt2]);varline=turf.lineString([[1,1],[-1,1],]);varnearest=turf.nearestPointToLine(points,line);Pointbearing地理方位角获取一条直线的角度,垂直向上0,垂直向下为180,水平向左接近90,水平向右接近-90。范围-180~180接受两个点,并找到它们之间的地理方位角,即从北方线(0度)测量的角度。计算方法:bearing函数计算的是两个地理点之间的大圆航线方位角(Great-circlebearing)。这是从起点到终点沿着球面最短路径(大圆路径)的方向。适用场景:适用于大圆航线的情况,特别是当你关心两个点之间的最短路径方向时,使用bearing。常用于航海、航空以及需要精确计算地球表面两点之间的方向的场景。特点:计算出的方位角是在球面上朝向终点的最初方向。由于地球的球形,路径和方位角会随着行进而改变。用法:
(Number):线的角度
varpoint1=turf.point([-75.343,39.984]);varpoint2=turf.point([-75.534,39.123]);varbearing=turf.bearing(point1,point2);//-170.2330491349224rhumbBearing投影方位角取两个点,并返回他们的方位角
(Number):线的角度,范围-180~180顺时针测量
varpoint1=turf.point([-75.343,39.984],{"marker-color":"#F00"});varpoint2=turf.point([-75.534,39.123],{"marker-color":"#00F"});varbearing=turf.rhumbBearing(point1,point2);//-170.29417535572546destination根据原点、地理方位角、距离计算目标点接受一个点,并根据给定的距离(以度、弧度、英里或公里表示)和方位角(以度表示),计算目的地点的位置。这使用Haversine公式来考虑全球曲率。
varpoint=turf.point([-75.343,39.984]);vardistance=50;varbearing=90;varoptions={units:"miles"};vardestination=turf.destination(point,distance,bearing,options);rhumbDestination根据原点、投影方位角、距离计算目标点接受一个点,并根据给定的距离(以度、弧度、英里或公里表示)和方位角(以度表示),计算目的地点的位置
计算两点之间的大地球形最短距离,单位可以是度degrees、弧度radians、英里miles或公里kilometers。这使用Haversine公式来考虑全球曲率。
(Number):两点之间的距离
varfrom=turf.point([-75.343,39.984]);varto=turf.point([-75.534,39.123]);varoptions={units:"miles"};vardistance=turf.distance(from,to,options);//60.35329997171415rhumbDistance两点之间的投影最短距离计算两点在固定方向角上的距离,返回的是绝对值。也就是说在地图投影上时一条直线(distance会是一条曲线。但在地球上曲线比直线更短)
(Number):两点之间的距离。的绝对值
varfrom=turf.point([-75.343,39.984]);varto=turf.point([-75.534,39.123]);varoptions={units:"miles"};vardistance=turf.rhumbDistance(from,to,options);//60.35331130430885nearestPoint获取一个点集合中,离某个目标最近的点获取一个点集合中,离某个目标的最近的点
vartargetPoint=turf.point([28.965797,41.010086],{"marker-color":"#0F0",});varpoints=turf.featureCollection([turf.point([28.973865,41.011122]),turf.point([28.948459,41.024204]),turf.point([28.938674,41.013324]),]);varnearest=turf.nearestPoint(targetPoint,points);greatCircle生成两点之间的大圆航线计算大圆航线,表示为LineString或MultiLineString。如果start和end点跨越本初子午线,生成的要素将被分割为一个MultiLineString。
varstart=turf.point([-122,48]);varend=turf.point([-77,39]);vargreatCircle=turf.greatCircle(start,end,{properties:{name:"SeattletoDC"},});midpoint计算两点之间的中点接受两个点,并返回它们之间的中点。中点是通过大地测量计算的,意味着考虑了地球的曲率。
varpoint1=turf.point([144.834823,-37.771257]);varpoint2=turf.point([145.14244,-37.830937]);varmidpoint=turf.midpoint(point1,point2);shortestPath计算两点间的最短路径并自动避开障碍物返回起点到终点的最短路径,并自动避开障碍物(obstacles)
输入三个点,中点-起点为开始线,中点-终点为结束线。计算他们的顺时针夹角
(number)
(GeoJSON)
varpt=turf.point([-71,41]);varconverted=turf.toMercator(pt);toWgs84墨卡托转经纬度转换墨卡托Mercator(EPSG:900913)为经纬度WGS84
varpt=turf.point([-7903683.846322424,5012341.663847514]);varconverted=turf.toWgs84(pt);cleanCoords删除冗余坐标从任何GeoJSON几何体中删除冗余坐标。例如连续两个点是一模一样的坐标就删除一个。如果是线。一条直线上有连续多个点。删除中间的点。
(Geometry|Feature):删除冗余坐标后的几何体
varline=turf.lineString([[0,0],[0,2],[0,5],[0,8],[0,8],[0,10],]);varmultiPoint=turf.multiPoint([[0,0],[0,0],[2,2],]);turf.cleanCoords(line).geometry.coordinates;//=[[0,0],[0,10]]turf.cleanCoords(multiPoint).geometry.coordinates;//=[[0,0],[2,2]]flip翻转坐标接受输入要素,并将它们所有的坐标从[x,y]翻转为[y,x]。
(Geometry):翻转过坐标后的对象
varserbia=turf.point([20.566406,43.421008]);varsaudiArabia=turf.flip(serbia.geometry.coordinates);//[43.421008,20.566406]rewind逆时针重绕逆时针重绕(Multi)LineString或(Multi)Polygon的外环,内环顺时针(使用鞋带公式)。
(Geometry):逆时针重绕后的对象
varpolygon=turf.polygon([[[121,-29],[138,-29],[138,-18],[121,-18],[121,-29],],]);varrewind=turf.rewind(polygon);round四舍五入将数字四舍五入到指定精度。
turf.round(120.4321);//=120turf.round(120.4321,2);//=120.43truncate截取精度接受一个GeoJSON要素或要素集合,并截断几何形状的精度。
(Geometry):几何体
varpoint=turf.point([70.46923055566859,58.11088890802906,1508]);varoptions={precision:3,coordinates:2};vartruncated=turf.truncate(point,options);//=truncated.geometry.coordinates=>[70.469,58.111]bearingToAzimuth(-180~180)度转为(0~360)度把方位角(-180~180)度(北向线顺时针为正,逆时针为负)转为(0~360)度(北向线顺时针计算值)
(number)(0~360)
convertArea面积单位转换面积单位转换,有效单位:kilometers,kilometres,meters,metres,centimetres,millimeters,acres,miles,yards,feet,inches,hectares
convertLength长度单位转换长度单位转换,有效单位:miles,nauticalmiles,inches,yards,meters,metres,kilometers,centimeters,feet
degreesToRadians度转换为弧度将角度(以度为单位)转换为弧度
(number)弧度
radiansToDegrees弧度转为度lengthToDegrees地球面上的距离长度转为度数地球面上的距离长度转为度数,有效单位:miles,nauticalmiles,inches,yards,meters,metres,centimeters,kilometres,feet
(number)度数
lengthToRadians地球面上的距离长度转为弧度radiansToLength弧度转为地球面上的距离长度四.Transformation变换bboxClip根据边界框裁切要素将一个要素和一个边界框(bbox)作为输入,使用lineclip将要素裁剪到边界框。在裁剪多边形时可能会产生退化边缘(即如果多边形都不在范围内,裁剪结果时空)。
varbbox=[0,0,10,10];varpoly=turf.polygon([[[2,2],[8,4],[12,8],[3,7],[2,2],],]);varclipped=turf.bboxClip(poly,bbox);bezierSpline把线转为赛贝尔曲线接受一条线并通过应用Bezier样条算法返回曲线版本。这个Bezier样条的实现是由LeszekRybicki完成的。
(Feature)曲线
通过从第一个多边形中剪切后续多边形来找到多个polygons之间的差异。也就是第一个要素中有。后续要素中没有的部分
接受polygon或multi-polygon几何体,并找到它们的多边形交集。如果它们不相交,则返回空值
(Feature|null)交集部分的要素集合
对一个包含多个polygon特征的FeatureCollection进行融合,可以选择根据可选的属性名称:值进行过滤。请注意,该集合中的multipolygon特征不受支持。
(FeatureCollection)融合后的要素集合
varfeatures=turf.featureCollection([turf.polygon([[[0,0],[0,1],[1,1],[1,0],[0,0],],],{combine:"yes"},),turf.polygon([[[0,-1],[0,0],[1,0],[1,-1],[0,-1],],],{combine:"yes"},),turf.polygon([[[1,-1],[1,0],[2,0],[2,-1],[1,-1],],],{combine:"no"},),]);vardissolved=turf.dissolve(features,{propertyName:"combine"});//内部包含两个FeaturelineOffset线偏移(沿着线的法线方向)接受一条line,并返回一个以指定距离偏移的line。
对一个Polygon或MultiPolygon进行平滑处理。基于Chaikin'salgorithm。警告:可能会创建退化的多边形。
接受一个GeoJSON对象,并返回一个简化版本。在内部使用simplify-js的二维版本,使用Ramer-Douglas-Peucker算法执行简化。
(GeoJSON)简化后的地理数据
将一个Feature进行三角剖分,生成一个由三角形组成的FeatureCollection,使用earcut进行操作。
(FeatureCollection)又三角形组成的多边形集合
旋转任何指定角度的GeoJSONFeature或Geometry,围绕其centroid(质心)或给定的pivot点进行旋转。
根据给定点和缩放因子对GeoJSON进行缩放(例如,factor=2将使GeoJSON变大200%)。如果提供了FeatureCollection,则原点将基于每个单独的Feature进行计算。
沿着提供的方向角,在指定距离上沿着一条恒向线(投影线)移动任何GeoJSONFeature或Geometry。
接受输入的(多)多边形,并返回一个合并后的多边形。如果输入的多边形不是连续的,此函数将返回一个MultiPolygon特征。
()
Voronoi每一个点都单独包围起来接受一个点的FeatureCollection和一个边界框,并返回一个Voronoi多边形的FeatureCollection。使用的Voronoi算法来自d3-voronoi包。
(FeatureCollection)
获取linestring,multi-linestring,multi-polygonorpolygon的自交点集合
(FeatureCollection)自交点集合
varpoly=turf.polygon([[[-12.034835,8.901183],[-12.060413,8.899826],[-12.03638,8.873199],[-12.059383,8.871418],[-12.034835,8.901183],],]);varkinks=turf.kinks(poly);kinks
获取任意线与多边形的交点
接受LineString或MultiLineString,并返回一个包含所有重叠线段的FeatureCollection
(FeatureCollection)重叠部分的管道
合并一个要素集合(eg.Point,LineString,Polygon)为(eg.MultiPoint,MultiLineString,MultiPolygon)
varfc=turf.featureCollection([turf.point([19.026432,47.49134]),turf.point([19.074497,47.509548]),]);varcombined=turf.combine(fc)//-------varfc=turf.featureCollection([turf.point([19.026432,47.49134]),turf.point([19.074497,47.509548]), turf.lineString([[-24,63],[-23,60],[-25,65],[-20,69],])]);varcombined=turf.combine(fc);explode获取所有坐标点接受一个要素或一组要素,并将所有位置作为点返回。
varmultiGeometry=turf.multiPolygon([[[[102.0,2.0],[103.0,2.0],[103.0,3.0],[102.0,3.0],[102.0,2.0],],],[[[100.0,0.0],[101.0,0.0],[101.0,1.0],[100.0,1.0],[100.0,0.0],],[[100.2,0.2],[100.8,0.2],[100.8,0.8],[100.2,0.8],[100.2,0.2],],],]);varflatten=turf.flatten(multiGeometry);//变成两个PolygonlineToPolygon线转多边形转换(Multi)LineString(s)为(Multi)Polygon(s)
varline=turf.lineString([[125,-30],[145,-30],[145,-20],[125,-20],[125,-30],]);varpolygon=turf.lineToPolygon(line);polygonToLine多边形转线转换一个Polygon为(Multi)LineString或转换MultiPolygon为(Multi)LineString
varpoly=turf.polygon([[[125,-30],[145,-30],[145,-20],[125,-20],[125,-30],],]);varline=turf.polygonToLine(poly);polygonize将多线段转为多边形Polygonizes(Multi)LineString(s)intoPolygons.
ImplementationofGEOSPolygonizefunction(geos::operation::polygonize::Polygonizer).
Polygonizesasetoflinesthatrepresentsedgesinaplanargraph.Edgesmustbecorrectlynoded,i.e.,theymustonlymeetattheirendpoints.
Theimplementationcorrectlyhandles:
七.生成数据geometry生成一个几何图形根据类型和坐标生成一个几何图形
(Geometry)
vartype="Point";varcoordinates=[110,50];vargeometry=turf.geometry(type,coordinates);//=>geometrygeometryCollection几何集合基于坐标数组创建一个Feature
varpt=turf.geometry("Point",[100,0]);varline=turf.geometry("LineString",[[101,0],[102,1],]);varcollection=turf.geometryCollection([pt,line]);//=>collectiongetGeom获取Geometry对象从FeatureorGeometryObject中获取Geometry对象
(Geometry|null)
varpoint={type:"Feature",properties:{},geometry:{type:"Point",coordinates:[110,40],},};vargeom=turf.getGeom(point);//={"type":"Point","coordinates":[110,40]}point根据坐标生成点要素根据坐标生成点要素
varpoint=turf.point([-75.343,39.984]);//=pointmultiPoint根据坐标数组生成多点要素根据坐标数组生成多点要素
varmultiPt=turf.multiPoint([[0,0],[10,10],]);//=multiPtpoints生成点要素集合从点坐标数组创建点要素集合
varpoints=turf.points([[-75,39],[-80,45],[-78,50],]);//=pointslineString根据坐标生成线要素根据一组点位生成线要素
varlinestring1=turf.lineString([[-24,63],[-23,60],[-25,65],[-20,69],],{name:"line1"},);varlinestring2=turf.lineString([[-14,43],[-13,40],[-15,45],[-10,49],],{name:"line2"},);//=linestring1//=linestring2multiLineString根据坐标生成多线要素根据一组坐标数组生成多线要素
varmultiLine=turf.multiLineString([[[0,0],[10,10],],]);//=multiLinepolygon根据一组首尾相连的坐标生成多边形要素根据一组首尾相连的坐标生成多边形要素
varpolygon=turf.polygon([[[-5,52],[-4,56],[-2,51],[-7,54],[-5,52],],],{name:"poly1"},);//=polygonmultiPolygon生成多组多边形要素生成多组多边形要素
varmultiPoly=turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0],],],]);//=multiPolypolygons生成一个多边形要素集合从一组多边形坐标中创建多边形要素集合
varpolygons=turf.polygons([[[[-5,52],[-4,56],[-2,51],[-7,54],[-5,52],],],[[[-15,42],[-14,46],[-12,41],[-17,44],[-15,42],],],]);//=polygonsfeature根据几何体(Geometry)生成要素将GeoJSON图形包裹在一个GeoJSON要素中
vargeometry={type:"Point",coordinates:[110,50],};varfeature=turf.feature(geometry);//=featurefeatureCollection根据要素(Feature)生成要素集合接收一个或多个要素,返回要素集合
varlocationA=turf.point([-75.343,39.984],{name:"LocationA"});varlocationB=turf.point([-75.833,39.284],{name:"LocationB"});varlocationC=turf.point([-75.534,39.123],{name:"LocationC"});varcollection=turf.featureCollection([locationA,locationB,locationC]);//=collectioncircle根据点和半径计算圆接受一个Point,根据给定的半径(以度degrees、弧度radians、英里miles或公里kilometers表示)和精度步长,计算圆形多边形。
(Feature)范围要素
生成一个椭圆
varcenter=[-75,40];varxSemiAxis=5;varySemiAxis=2;varellipse=turf.ellipse(center,xSemiAxis,ySemiAxis);lineArc生成弧线生成一条弧线,根据圆心、半径、开始方位、结束方位.(0度为正北,顺时针为正方向)
varcenter=turf.point([-75,40]);varradius=5;varbearing1=25;varbearing2=47;vararc=turf.lineArc(center,radius,bearing1,bearing2);sector生成扇形生成一个扇形或圆;需要提供圆心、半径、开始方位、结束方位。(0度为正北,顺时针为正方向)
用于在GeoJSON对象周围创建一个缓冲区(bufferzone)。这个缓冲区可以看作是围绕一个几何对象的一定范围的扩展区域,通常用于分析距离、影响范围或安全区域等地理问题。
buffer函数能够为点、线、多边形等几何对象生成指定距离的缓冲区。这些缓冲区通常用于分析周围区域受几何对象影响的范围,比如交通影响区、安全缓冲区等。
接受一组点,并返回一个凹多边形(Polygon)或多部分凹多边形(MultiPolygon)。在内部,这使用turf-tin来生成几何图形。
接受一个Feature或FeatureCollection,并返回一个凸包Polygon。在内部,这使用实现了monotonechainhull的convex-hull模块。
把(Multi)LineStringor(Multi)Polygon的每相邻两个点截取为一条短线(只包含两个顶点)
(FeatureCollection)只包含两个顶点的线段集合
varpolygon=turf.polygon([[[-50,5],[-40,-10],[-50,-10],[-40,5],[-50,5],],]);varsegments=turf.lineSegment(polygon);lineSlice根据两个点截取线根据输入的两个坐标截取线。这两个坐标不是必须精确的落在线上
varline=turf.lineString([[-77.031669,38.878605],[-77.029609,38.881946],[-77.020339,38.884084],[-77.025661,38.885821],[-77.021884,38.889563],[-77.019824,38.892368],]);varstart=turf.point([-77.029609,38.881946]);varstop=turf.point([-77.021884,38.889563]);varsliced=turf.lineSlice(start,stop,line);lineSliceAlong根据两个距离截取线提供从线头开始的两个距离,分别计算出起始点和终止点,然后截取线
varline=turf.lineString([[7,45],[9,45],[14,40],[14,41],]);varstart=12.5;varstop=25;varsliced=turf.lineSliceAlong(line,start,stop,{units:"miles"});lineSplit根据另一个要素要分割线根据另一个GeoJSON要素来分割线
将LineString分割成指定长度的小段
varline=turf.lineString([[-95,40],[-93,45],[-85,50],]);varchunk=turf.lineChunk(line,15,{units:"miles"});polygonTangents点到多边形的切线从一个点找到一个(Multi)Polygon的切线。
varpolygon=turf.polygon([[[11,0],[22,4],[31,0],[31,11],[21,15],[11,11],[11,0],],]);varpoint=turf.point([61,5]);vartangents=turf.polygonTangents(point,polygon);mask从一个区域(掩膜)中挖去一块区域提供一个多边形,和一个可选的掩膜要素(不提供则默认为掩膜覆盖全球),然后从掩膜中挖去多边形区域。剩余的区域作为多边形对象返回
接受一个要素或要素集合,并返回一个确保位于该要素表面上的点。(有点类似于中心点)
varpolygon=turf.polygon([[[116,-36],[131,-32],[146,-43],[155,-25],[133,-9],[111,-22],[116,-36],],]);varpointOnPolygon=turf.pointOnFeature(polygon);unkinkPolygon自动拆分自交多边形自动拆分自交的多边形,并返回拆分后的多边形集合
varpoly=turf.polygon([[[0,0],[2,0],[0,2],[2,2],[0,0],],]);varresult=turf.unkinkPolygon(poly);八.Random随机randomLineString生成随机的线randomLineString生成随机的linestring
varlineStrings=turf.randomLineString(25,{bbox:[-180,-90,180,90]});//=>lineStringsrandomPoint生成随机的点随机生成point
varpoints=turf.randomPoint(25,{bbox:[-180,-90,180,90]});//=>pointsrandomPolygon生成随机多边形随机生成polygon
varpolygons=turf.randomPolygon(25,{bbox:[-180,-90,180,90]});//=>polygonsrandomPosition生成一个随机位置生成一个随机位置:[number,number]
([number,number])
varposition=turf.randomPosition([-180,-90,180,90]);//[175.99717868600436,23.778125886711308]//=>positionsample随机抽样在给定的集合中随机抽取指定数量的样本
varpoints=turf.randomPoint(100,{bbox:[-80,30,-60,60]});varsample=turf.sample(points,5);十.Interpolation插值interpolateisobandsisolinesplanepointtin十二.Grids网格hexGrid生成六角网格获取一个边界范围、单元格直径。然后返回一个元素集合,包含六角形或三角形
在一片区域内生成点网格
在一片区域内生成方形网格
在一片区域内生成三角网格
获取任何GeoJson对象的所有坐标
varfeatures=turf.featureCollection([turf.point([26,37],{foo:"bar"}),turf.point([36,53],{hello:"world"}),]);varcoords=turf.coordAll(features);//=[[26,37],[36,53]]coordEach坐标遍历遍历GeoJson对象的所有坐标,类似Array.forEach()
(void)
varfeatures=turf.featureCollection([turf.point([26,37],{foo:"bar"}),turf.point([36,53],{hello:"world"}),]);turf.coordEach(features,function(currentCoord,coordIndex,featureIndex,multiFeatureIndex,geometryIndex,){//=currentCoord//=coordIndex//=featureIndex//=multiFeatureIndex//=geometryIndex},);coordReduce坐标遍历缩减-Array.reducefeatureEach要素遍历-Array.forEachfeatureReduce要素遍历缩减-Array.reduceflattenEach扁平遍历--Array.forEachflattenReduce扁平遍历--Array.reducegeomEach几何图形遍历--Array.forEachgeomReduce几何图形遍历--Array.reducepropEach属性遍历--Array.forEachpropReduce属性遍历--Array.reducesegmentEach多坐标元素拆分遍历--Array.forEachsegmentReduce多坐标元素拆分遍历--Array.reducegetCoord解包坐标(PointFeature,Geometryorasinglecoordinate)从PointFeature,Geometryorasinglecoordinate中解包坐标
varpt=turf.point([10,10]);varcoord=turf.getCoord(pt);//=[10,10]getCoords解包坐标(Feature,GeometryObjectoranArray)从Feature,GeometryObjectoranArray中解包坐标
(Array)
varpoly=turf.polygon([[[119.32,-8.7],[119.55,-8.69],[119.51,-8.54],[119.32,-8.7],],]);varcoords=turf.getCoords(poly);//=[[[119.32,-8.7],[119.55,-8.69],[119.51,-8.54],[119.32,-8.7]]]十六.类型守卫getType获取GeoJson对象类型获取GeoJson对象类型,优先拿Geometry的类型
(string)
varpoint={type:"Feature",properties:{},geometry:{type:"Point",coordinates:[110,40],},};vargeom=turf.getType(point);//="Point"featureOf要素的类型是否匹配指定类型强制执行对Turf的Feature输入类型的期望。内部使用geojsonType来判断几何类型
用于验证GeoJSON对象是否是指定类型的几何集合。它通常在开发中用来确保函数接收到的数据是预期类型的集合,避免数据类型错误引发的潜在问题。
主要用途:
如果feature特征是指定的类型,turf.featureOf将返回true。如果检测到类型不匹配,则会抛出错误,提供详细的错误信息。
try{turf.featureOf(turf.lineString([[30,30],[40,40]]),'Point','myFunction');console.log("AllfeaturesarePoints.");}catch(e){console.error(e.message);}//turfdemo1.html:24InvalidinputtomyFunction:mustbeaPoint,givenLineStringcollectionOf集合中是否全部包含指定类型强制执行对Turf的FeatureCollection输入类型的期望。内部使用geojsonType来判断几何类型
用于验证GeoJSON对象是否包含指定类型的几何集合。它通常在开发中用来确保函数接收到的数据是预期类型的集合,避免数据类型错误引发的潜在问题。
如果featureCollection中的所有特征都是指定的类型,turf.collectionOf将返回true。如果检测到类型不匹配,则会抛出错误,提供详细的错误信息。
constturf=require('@turf/turf');//创建一个FeatureCollection,其中包含点和线constfeatureCollection=turf.featureCollection([turf.point([10,10]),turf.point([20,20]),turf.lineString([[30,30],[40,40]])]);//验证featureCollection中的所有特征是否都是Point类型try{turf.collectionOf(featureCollection,'Point','myFunction');console.log("AllfeaturesarePoints.");}catch(e){console.error(e.message);}//turfdemo1.html:24InvalidinputtomyFunction:mustbeaPoint,givenLineStringgeojsonType地理数据的类型是否匹配指定类型强制执行对Turf的Feature输入类型的期望。内部使用geojsonType来判断几何类型
用发和作用同featureOf,区别:geojsonType更通用,可以验证任意GeoJSON数据的类型,而featureOf只适用于Feature对象,并且只能验证geometry的类型。在编写处理GeoJSON数据的代码时,选择哪个函数取决于你需要验证的数据类型的范围。
判断一个环线坐标是否是顺时针
(boolean)
varclockwiseRing=turf.lineString([[0,0],[1,1],[1,0],[0,0],]);varcounterClockwiseRing=turf.lineString([[0,0],[1,0],[1,1],[0,0],]);turf.booleanClockwise(clockwiseRing);//=trueturf.booleanClockwise(counterClockwiseRing);//=falsebooleanConcave多边形是否凹判断多边形是否凹
varconvexPolygon=turf.polygon([[[0,0],[0,1],[1,1],[1,0],[0,0],],]);turf.booleanConcave(convexPolygon);//=falsebooleanContains第二个要素是否完全包含在第一个要素中两个几何图形的内部必须相交次要几何图形的内部和边界不得与主要几何图形的外部相交结果与booleanWithin相反用法:
varline=turf.lineString([[1,1],[1,2],[1,3],[1,4],]);varpoint=turf.point([1,2]);turf.booleanContains(line,point);//=truebooleanWithin第一个要素是否完全包含在第二个要素中两个几何图形的内部必须相交主要几何图形的内部和边界不得与次要几何图形的外部相交结果与booleanContains相反用法:
varline=turf.lineString([[1,1],[1,2],[1,3],[1,4],]);varpoint=turf.point([1,2]);turf.booleanWithin(point,line);//=truebooleanTouches是否刚好接触两个要素是否刚好接触(两个几何图形的公共点均不与两个几何图形内部相交)
varline=turf.lineString([[1,1],[1,2],[1,3],[1,4],]);varpoint=turf.point([1,1]);turf.booleanTouches(point,line);//=truebooleanCrosses是否交叉如果交集产生的几何体的尺寸比两个源几何体的最大尺寸下,并且交集位于两个源集合的内部,则返回true只支持以下要素的比较:multipoint/polygon,multipoint/linestring,linestring/linestring,linestring/polygon,linestring/multipolygon注意完全包含会返回false注意仅仅只是边缘接触返回false
varline1=turf.lineString([[-2,2],[4,2],]);varline2=turf.lineString([[1,1],[1,2],[1,3],[1,4],]);varcross=turf.booleanCrosses(line1,line2);//=truebooleanIntersects是否相交如果两个要素相交返回true
和booleanCrosses的区别:
varpoint=turf.point([2,2]);varline=turf.lineString([[1,1],[1,2],[1,3],[1,4],]);turf.booleanIntersects(line,point);//=true=turf.booleanCrosses(line1,line2);//=truebooleanDisjoint是否不拼接如果交集是空集,就返回true
varpoint=turf.point([2,2]);varline=turf.lineString([[1,1],[1,2],[1,3],[1,4],]);turf.booleanDisjoint(line,point);//=truebooleanEqual同一类型的图形是否拥有相同的坐标确定同一类型的两个几何图形是否具有相同的x,y坐标值
varpt1=turf.point([0,0]);varpt2=turf.point([0,0]);varpt3=turf.point([1,1]);turf.booleanEqual(pt1,pt2);//=trueturf.booleanEqual(pt2,pt3);//=falsebooleanOverlap两个要素是否部分重叠booleanParallel两条线是否平行如果两条线的每一个对应线段平行,则返回true
varline1=turf.lineString([[0,0],[0,1],]);varline2=turf.lineString([[1,0],[1,1],]);turf.booleanParallel(line1,line2);//=truebooleanPointInPolygon点是否在多边形中判断点是否在(多)多边形内
varpt=turf.point([-77,44]);varpoly=turf.polygon([[[-81,41],[-81,47],[-72,47],[-72,41],[-81,41],],]);turf.booleanPointInPolygon(pt,poly);//=truebooleanPointOnLine点是否在线上判断点是否线上
varpt=turf.point([0,0]);varline=turf.lineString([[-1,-1],[1,1],[1.5,2.2],]);varisPointOnLine=turf.booleanPointOnLine(pt,line);//=truebooleanValid是否是有效的几何图形根据OGCSimpleFeatureSpecification判断输入是否是有效的几何图形
varline=turf.lineString([[1,1],[1,2],[1,3],[1,4],]);turf.booleanValid(line);//=>trueturf.booleanValid({foo:"bar"});//=>false十九.其他clone深复制GeoJSON对象返回传递的GeoJSON对象的克隆副本,包括可能的'ForeignMembers'。比常见的JSON.parse+JSON.stringify组合方法快大约3-5倍。
varline=turf.lineString([[-74,40],[-78,42],[-82,35],],{color:"red"},);varlineCloned=turf.clone(line);tag标记空间连接接受一组点和一组多边形和/或多多边形,并执行空间连接。
典型应用场景:
注意:
varpt1=turf.point([-77,44]);varpt2=turf.point([-77,38]);varpoly1=turf.polygon([[[-81,41],[-81,47],[-72,47],[-72,41],[-81,41],],],{pop:3000},);varpoly2=turf.polygon([[[-81,35],[-81,41],[-72,41],[-72,35],[-81,35],],],{pop:1000},);varpoints=turf.featureCollection([pt1,pt2]);varpolygons=turf.featureCollection([poly1,poly2]);vartagged=turf.tag(points,polygons,"pop","population");