Truf.js文档整理适用于浏览器和Node.js的高级地理空间分析库。turf默认使用的是标准的geojson数据,坐

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/centerMediancenter计算中心点接受一个要素或要素集合,并返回所有要素的绝对中心点。

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地理方位角用法:

(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插值十二.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第二个要素是否完全包含在第一个要素中用法:

varline=turf.lineString([[1,1],[1,2],[1,3],[1,4],]);varpoint=turf.point([1,2]);turf.booleanContains(line,point);//=truebooleanWithin第一个要素是否完全包含在第二个要素中用法:

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");

THE END
1.C/C++地铁线路最短路径实现参照某城市地铁路线图结构,编写程序实现以某站为起始点求该点到其他站点的最短路径长度和途径的站点,基本要求:(1)所含站点(即顶点)不少于20个,站与站的路线(即边)不少于40条。尽可能选取地铁路线交叉较多的区域。采用适当的存储结构实现带权无向图的存储。(2)对地铁路线图进行存储,包括站点名和站与站之间的距https://www.bilibili.com/opus/1011566820893655042
2.润城15日测试第一行为两个整数 n,m,分别代表点的个数和边的条数。 接下来 m 行,每行三个整数 u,v,w,代表 u,v 之间存在一条边权为 w 的边。 Output 输出n 行每行 n 个整数。 第 i 行的第 j 个整数代表从 i 到 j 的最短路径。 Examples Input https://old.ynoip.cn/contest/problem?id=692&pid=4
3.标题:Dijkstra算法详解及Python实现Dijkstra 算法是一种用于计算加权图中从单个源节点到其他所有节点的最短路径的经典算法。它通过维护一个集合来存储已找到最短路径的节点,以及一个优先队列来存储尚未找到最短路径的节点,每次从优先队列中选择距离源节点最近的节点,并更新其邻居节点的距离。 https://www.ctyun.cn/zhishi/p-448914
4.最短路径问题数学建模经管文库(原现金交易版最短路径问题-数学建模 https://bbs.pinggu.org/thread-13294069-1-1.html
5.广东岭南职业技术学院10、(35)请说出OSI七层参考模型中哪一层负责建立端到端的连接? A、会话层 B、传输层 C、网络层 D、数据链路层 E、应用层 答案:B 11、(36)下列哪一个是传输层的协议? A、IP B、SQL C、UDP D、ARP E、LLC 答案:C 12、(37)小于---的TCP/UDP端口号已保留与现有服务一一对应,此数字以上的端口号可http://exp.lnc.edu.cn/suite/portal/popupView.do?feature=testPaper&action=previewTestPaper&testPaperKey=32389442
6.网络拓扑设计(精选十篇)使用这种结构必须解决的一个问题是确保端用户使用媒体发送数据时不能出现冲突。在点到点链路配置时,这是相当简单的。如果这条链路是半双工操作,只需使用很简单的机制便可保证两个端用户轮流工作。在一点到多点方式中,对线路的访问依靠控制端的探询来确定。然而,在LAN环境下,由于所有数据站都是平等的,不能采取上述https://www.360wenmi.com/f/cnkeyd1hliwp.html
7.OSPF技术连载18:OSPF网络类型:非广播广播点对多点点对多点OSPF(开放最短路径优先,Open Shortest Path First)是一种内部网关协议(IGP),用于在计算机网络中进行路由选择。它是一个开放标准的协议,其设计目标是提供快速且高效的路由选择,并支持大规模网络的扩展性。在OSPF中,网络类型对于网络拓扑和路由算法都有重要影响。本文将深入探讨OSPF网络类型,以及它们在不同场景下的应用https://cloud.tencent.com/developer/article/2307503
8.一点到多点最短路径长度短蝎悍的多源最短路径算法—Floyd算法本文介绍了Floyd算法,一种用于寻找加权图中多源点之间最短路径的动态规划方法。与Dijkstra算法相比,Floyd算法在计算n节点的多源最短路径时,避免了多次执行Dijkstra算法的臃肿,通过动态插入点的方式更新最短路径。算法通过遍历所有点,检查是否因新加入的点导致路径长度缩短,从而更新最短路径。核心代码简洁,易于实现。 https://blog.csdn.net/weixin_39702316/article/details/113411189
9.地理信息科学实践:基于ArcGISPro第5章网络在线免费阅读第一组为已求出最短路径的节点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径,就将加入到集合S中,直到全部节点都加入到S中,算法结束)。 第二组为其余未确定最短路径的节点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的https://fanqienovel.com/reader/7385110733014453272
10.微信公众平台在无人机领域,实现自主路径规划是一个重要的主题,它涉及到在给定环境下生成一条从起点到终点的无碰撞最优路径。目前的主流算法如Fast-Planner等主要通过获取图像->建图->前端路径搜索->后端轨迹规划这?框架实现满足无人机运动学和动力学的最优路径生成。但是,受建图与前端路径搜索耗时https://mp.weixin.qq.com/s?__biz=MzU2NjU3OTc5NA==&mid=2247591917&idx=1&sn=88df9d016e915c2897a11bea911b8fa8&chksm=fdaaac56ccb574620224afd9adf3969771b87ee5c6500978fbd4d07edec2518c0b4407f9a9da&scene=27
11.刷题29天贪心算法如果ratings[i] > ratings[i + 1],此时candyVec[i](第i个小孩的糖果数量)就有两个选择了,一个是candyVec[i + 1] + 1(从右边这个加1得到的糖果数量),一个是candyVec[i](之前比较右孩子大于左孩子得到的糖果数量) 那么又要贪心了,局部最优:取candyVec[i + 1] + 1 和 candyVec[i] 最大的糖果数https://zhuanlan.zhihu.com/p/11941030486
12.站位范文11篇(全文)《指南》指出:“尊重和接纳幼儿的说话方式, 无论幼儿的表达水平如何, 都应认真地倾听并给予积极的回应。”教师要学会适时地站到幼儿队伍的后边, 并大声喊“加油”, 鼓励和支持每一位孩子。这样做的目的是为了最大限度地激发作为学习主体的幼儿的积极性和 创造性, 产生最佳教学效果, 也易形成教学相长的局面。 https://www.99xueshu.com/w/ikeynbkyu9eg.html
13.在用Floyd算法求解各顶点间的最短路径时,每个表示两点间路径的C.Diikstra算法不适合求任意两个顶点的最短路径 D.Floyd算法求两个项点的最短路径时,pathk-1一定是pathk的子集 点击查看答案 第2题 Floyd算法是一种求多点对间最短路径的方法,该算法有效地利用了___。 点击查看答案 第3题 试用Dijkstra算法求图5—19中从顶点a到其他各顶点间的最短路径,写出执行算法过https://www.xuesai.cn/souti/3EF3221F.html
14.实现最短哈密尔顿回路的路径规划方法设备及存储介质与流程1.本技术涉及信息技术领域,特别是涉及一种实现最短哈密尔顿回路的路径规划方法、设备及存储介质。 背景技术: 2.最短哈密尔顿回路的路径规划是一种从始点出发,经过所有途经点,回到始点的最短路径规划,该路径规划适合应用在物流配送、旅游路径规划、军事路径规划等事宜,现在流行的高德、腾讯导航软件虽然有多点路径规划功能https://www.xjishu.com/zhuanli/52/202210074444.html
15.广度遍历生成树描述了从起点到各顶点的最短路径。()A 解析: 广度优先遍历类似层次遍历,距离开始点最近的那些点可以被优先访问,而距离最远点会最后进行访问,不是描述从起点到各顶点的最短路径。00分享举报为您推荐 经过所有点的最短路径 遍历所有点的最短路径 一点到多点最短路径长度 有向图的拓扑排序 图的最短路径算法的实现 判断无向图是否连通 图的https://wenda.so.com/q/1679522629211963
16.浅析物流运输企业运输成本控制论文(精选6篇)两点之间的最短路径算法是运输企业配送系统的最基本算法,通过计算两点之间的最短路线来决定多个配送点之间的最佳运输路线。最短路径问题是优化模型理论中最为基础的问题之一,也是解决其他一些线路优化问题的有效工具。 2、多点间运输——运输算法 多点间运输问题是指有起始点或目的点不唯一的运输调配问题。多点间运输最https://biyelunwen.yjbys.com/fanwen/jiaotongwuliu/633463.html
17.OSPF开放最短路径优先协议ipv4IETF组织开发了ospf(Open Shortest Path First,开放最短路径优先),ospf 是一个基于链路状态的内部网关协议(Interior Gateway Protoco),分为两个版本,针对ipv4 协议使用的是ospf v2,针对ipv6 协议的使用的是ospf v3,以下是关于ospf v2 的一个介绍。 ospf 协议中涉及概念https://www.jianshu.com/p/6d7d5aa4ccdf
18.网络工程师速记100条知识点网络工程师考点知识网络工程师PERT图是一种网络模型,可以明确表达任务之间的依赖关系,以及如期完成整个工程的关键路径,但不能清晰地描述各个任务之间的并行关系。而甘特图(Gantt图)可以清晰的描述任务间的并行关系,但不能描述依赖关系。 18、PERT图关键路径 在PERT图中完成工程的最少时间是从开始顶点到结束顶点的最长路径长度,称从开始顶点到结束顶https://www.educity.cn/rk/2213351.html
19.什么是ARCGIS?一文快速了解ARCGIS基础知识网络分析是ARCGIS的另一个重要功能。用户可以利用网络分析工具解决基于路径的问题,如最短路径分析、最佳路径查找、网络服务区域分析等。这些工具对于规划交通路线、物流配送和应急响应等场景非常有用。ARCGIS还支持多种交通网络数据的导入和处理,进一步增强了网络分析的功能。 https://www.eefocus.com/e/1595744.html
20.东莞市公安局黄江分局第四期视频监控系统建设采购项目中标公告本期项目设计51个简易卡口抓拍点,主要覆盖辖区内14村居主要路段的围蔽,配置102台200万高清卡口抓拍单元及补光设备,合计102视频,实现对车辆的信息采集,对过往车辆进行监控,实现可疑车辆、重点车辆的布控和告警,并实现卡口图片推送到市局车辆库。 3.2联网共享平台扩容 https://www.bidcenter.com.cn/newscontent-82460180-4.html
21.高速走人工通道是选择最短路径计费?车友交流懂车帝提供高速走人工通道是选择最短路径计费?的车友交流详细内容,懂车帝是一个汽车资讯平台,懂车更懂你。我们提供最新汽车报价,汽车图片,汽车价格大全,行情、评测、导购等内容,看车选车买车就上懂车帝。https://www.dongchedi.com/tag/ugc/12861196