# transformation

# bboxClip

npm install @turf/bbox-clip

接收一个要素和 bbox(边界框),裁剪超出 bbox 的范围并返回新的要素

类型为 Polygon 的要素可能会导致边缘退化

参数

入参 类型 描述
feature Feature<LineString|MultiLineString|Polygon|MultiPolygon> 需要与 bbox 裁剪的要素
bbox BBox 以 minX、minY、maxX、maxY 的顺序排列

options

属性 类型 默认值 描述
mutate Boolean false 是否返回入参的 GeoJSON

返回

Feature<LineString|MultiLineString|Polygon|MultiPolygon>

范例

var bbox = [0, 0, 10, 10];
var poly = turf.polygon([
  [
    [2, 2],
    [8, 4],
    [12, 8],
    [3, 7],
    [2, 2]
  ]
]);

var clipped = turf.bboxClip(poly, bbox);
/*
{
  type: "Feature",
  geometry: {
    type: "Polygon",
    coordinates: [
      [
        [2, 2],
        [8, 4],
        [10,6],
        [10, 7.777777777777778],
        [3, 7],
        [2, 2]
      ]
    ]
  },
  properties: {}
}
*/

# bezierSpline

npm install @turf/bezier-spline

接收一条线段,通过贝塞尔曲线算法返回新线段

参数

入参 类型 描述
line Feature<LineString> 类型为 LineString 的 GeoJSON
options Object 可配置项

options

属性 类型 默认值 描述
resolution Number 10000 点与点之间的时间(单位为毫秒)
sharpness Number 0.85 线段的弯曲程度,介于 0 和 1 之间,数值越大越平滑

返回

Feature<LineString>

范例

var line = turf.lineString([
  [-76.091308, 18.427501],
  [-76.695556, 18.729501],
  [-76.552734, 19.40443],
  [-74.61914, 19.134789],
  [-73.652343, 20.07657],
  [-73.157958, 20.210656]
]);

var curved = turf.bezierSpline(line);

# buffer

npm install @turf/buffer

接收任意要素,计算并返回该要素的缓冲区 GeoJSON

参数

入参 类型 描述
geojson Feature|Geometry|FeatureCollection 任意类型 的 GeoJSON
radius Number 绘制缓冲区的距离(允许负值)
options Object 可配置项

options

属性 类型 默认值 描述
units String "kilometers" 单位,可选的有 degrees、radians、miles、kilometers
steps Number 64 步数

返回

FeatureCollection|Feature<(Polygon|MultiPolygon)>|undefined

范例

var point = turf.point([-90.54863, 14.616599]);
var buffered = turf.buffer(point, 500, { units: "miles" });

# circle

npm install @turf/circle

接收一个点要素并以它做圆心,给定单位的半径和相邻的精确度画圆

参数

入参 类型 描述
center Feature<Point>|Array 圆心
radius Number 半径
options Object 可配置项

options

属性 类型 默认值 描述
steps Number 64 圆弧的平滑度,数值越高越平滑
units String "kilometers" 单位,可选的有 degrees、radians、miles、kilometers
properties Object {} 出参 type 为 Polygon 的 GeoJSON 的 properties 属性

返回

Feature<Polygon>

范例

var center = [-75.343, 39.984];
var radius = 5;
var options = { steps: 10, units: "kilometers", properties: { foo: "bar" } };
var circle = turf.circle(center, radius, options);
/* steps 为 10,所以更像是一个十边形
{
  type: "Feature",
  geometry: {
    coordinates: [
      [
        [-75.343, 40.02896601818623],
        [-75.37751268579942, 40.020373156514275],
        [-75.39882430740063, 39.99788187546377],
        [-75.39880160476812, 39.97009135591055],
        [-75.37747595213794, 39.94761661877482],
        [-75.343, 39.93903398181377],
        [-75.30852404786205, 39.94761661877482],
        [-75.28719839523187, 39.97009135591055],
        [-75.28717569259938, 39.99788187546377],
        [-75.30848731420058, 40.020373156514275],
        [-75.343, 40.02896601818623]
      ]
    ],
    type: "Polygon"
  },
  properties: { foo: "bar" }
}
*/

# clone

npm install @turf/clone

接收任意要素(Feature)或要素集(FeatureCollection),返回该要素的深拷贝对象,包括可能的 Foreign Members(即拷贝不是 GeoJSON 必须属性的属性)。且比常见的 JSON.parse + JSON.stringify 组合方法快约 3-5 倍

参数

入参 类型 描述
GeoJSON GeoJSON 需要深拷贝的要素

返回

GeoJSON

范例

var line = turf.lineString(
  [
    [-74, 40],
    [-78, 42],
    [-82, 35]
  ],
  { color: "red" }
);

var lineCloned = turf.clone(line);

line.randomAttr = "Turf";
var lineCloned2 = turf.clone(line);
/*
{
  ...line,
  randomAttr: "Turf" // 多了个(Foreign Members)属性
}
*/

# concave

npm install @turf/concave

接收若干点要素,返回以接收的点要素为顶点的 type 为 Polygon 或 MultiPolygon 的凹型要素

值得注意的是,少于等于两个点要素都会返回 null,数量和 maxEdge 都会影响

参数

入参 类型 描述
points FeatureCollection<Point> 若干点要素
options Object 可配置项

options

属性 类型 默认值 描述
maxEdge Number Infinity 以 units 为单位的多边形边缘的长度
units String "kilometers" 单位,可选的有 degrees、radians、miles、kilometers

返回

Feature<(Polygon|MultiPolygon)>| null - 凹型多边形,若无法计算则返回 null

范例

var points = turf.featureCollection([
  turf.point([-63.601226, 44.642643]),
  turf.point([-63.591442, 44.651436]),
  turf.point([-63.580799, 44.648749]),
  turf.point([-63.573589, 44.641788]),
  turf.point([-63.587665, 44.64533]),
  turf.point([-63.595218, 44.64765])
]);
var options = { units: "miles", maxEdge: 1 };

var hull = turf.concave(points, options);
/*
{
  type: "Feature",
  geometry: {
    type: "Polygon",
    coordinates: [
      [
        [-63.591442, 44.651436],
        [-63.580799, 44.648749],
        [-63.573589, 44.641788],
        [-63.587665, 44.64533],
        [-63.601226, 44.642643],
        [-63.591442, 44.651436]
      ]
    ]
  },
  properties: {}
}
*/

# convex

npm install @turf/convex

接收要素(Feature)或要素集(FeatureCollection),返回以接收的要素为顶点的 type 为 Polygon 的凸型要素

参数

入参 类型 描述
geojson GeoJSON 要素或要素集合
options Object 可配置项

options

属性 类型 默认值 描述
concavity Number Infinity 1 趋向为扁平型要素,Infinity 趋向为凸型要素

返回

Feature<Polygon>

范例

var points = turf.featureCollection([
  turf.point([10.195312, 43.755225]),
  turf.point([10.404052, 43.8424511]),
  turf.point([10.579833, 43.659924]),
  turf.point([10.360107, 43.516688]),
  turf.point([10.14038, 43.588348]),
  turf.point([10.195312, 43.755225])
]);

var hull = turf.convex(points);
/*
{
  type: "Feature",
  geometry: {
    coordinates: [
      [
        [10.360107, 43.516688],
        [10.14038, 43.588348],
        [10.195312, 43.755225],
        [10.404052, 43.8424511],
        [10.579833, 43.659924],
        [10.360107, 43.516688]
      ]
    ],
    type: "Polygon"
  },
  properties: {}
}
*/

# difference

npm install @turf/difference

接收两个 type 为 Polygon 的多边形要素,返回第一个多边形裁剪第二个多边形后得到的要素

值得注意的是,裁剪得到的要素的 properties 与第一个要素的相同

参数

入参 类型 描述
polygon1 Feature<Polygon|MultiPolygon> 要素
polygon2 Feature<Polygon|MultiPolygon> 被裁剪的要素

返回

Feature<Polygon|MultiPolygon>| null - 两个多边形没有交集则返回 null

范例

var polygon1 = turf.polygon(
  [
    [
      [128, -26],
      [141, -26],
      [141, -21],
      [128, -21],
      [128, -26]
    ]
  ],
  {
    fill: "#F00",
    "fill-opacity": 0.1
  }
);
var polygon2 = turf.polygon(
  [
    [
      [126, -28],
      [140, -28],
      [140, -20],
      [126, -20],
      [126, -28]
    ]
  ],
  {
    fill: "#00F",
    "fill-opacity": 0.1
  }
);

var difference = turf.difference(polygon1, polygon2);
/*
{
  type: "Feature",
  geometry: {
    type: "polygon",
    coordinates: [
      [
        [140, -21],
        [141, -21],
        [141, -26],
        [140, -26],
        [140, -21]
      ]
    ]
  },
  properties: {
    "fill": "#F00", // 第一个多边形的属性
    "fill-opacity": 0.1
  }
}
*/

# dissolve

npm install @turf/dissolve

接收一个多边形的要素集合FeatureCollection,通过 properties 的某个属性进行分解,但是不支持 type 为 MultiPolygon 的多边形

值得注意的是,不传属性的时候返回原来的要素集合,不会进行分解

参数

入参 类型 描述
featureCollection FeatureCollection<Polygon> 需要被分解的要素集合
options Object 可配置项

options

属性 类型 默认值 描述
propertyName String properties 对象的某个属性

返回

FeatureCollection<Polygon>

范例

var features = 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" }
  )
]);

var dissolved = turf.dissolve(features, { propertyName: "combine" }); // 返回两个面要素

# intersect

npm install @turf/intersect

接收两个 type 为 polygon 的多边形找到他们的交集,如果共享边界则返回边界,如果不相交则返回 null

参数

入参 类型 描述
poly1 Feature<Polygon> type 为 polygon 的要素
poly2 Feature<Polygon> type 为 polygon 的要素

返回

Feature|null - 没有交集或接收不是 type 为 polygon 的多边形都会返回 null

范例

var poly1 = turf.polygon([
  [
    [-122.801742, 45.48565],
    [-122.801742, 45.60491],
    [-122.584762, 45.60491],
    [-122.584762, 45.48565],
    [-122.801742, 45.48565]
  ]
]);

var poly2 = turf.polygon([
  [
    [-122.520217, 45.535693],
    [-122.64038, 45.553967],
    [-122.720031, 45.526554],
    [-122.669906, 45.507309],
    [-122.723464, 45.446643],
    [-122.532577, 45.408574],
    [-122.487258, 45.477466],
    [-122.520217, 45.535693]
  ]
]);

var intersection = turf.intersect(poly1, poly2);
/*
{
  type: "Feature",
  geometry: {
    type: "Polygon",
    coordinates: [
      [
        [-122.584762, 45.545508794628965],
        [-122.584762, 45.48565],
        [-122.68902729894835, 45.48565],
        [-122.669906, 45.507309],
        [-122.720031, 45.526554],
        [-122.64038, 45.553967],
        [-122.584762, 45.545508794628965]
      ]
    ]
  },
  properties: {}
}
*/

# lineOffset

npm install @turf/line-offset

接收 type 为 lineString 的线段,返回偏移指定距离的线段

值得注意的是,偏移的角度随要素的形状而改变

参数

入参 类型 描述
geojson Geometry|Feature<LineString|MultiLineString> 接收的 GeoJSON
distance Number 偏移的距离,可以是负值
options Object 可配置项

options

属性 类型 默认值 描述
units String "kilometers" 单位,可选的有 degrees、radians、miles、kilometers

返回

Feature<LineString|MultiLineString>

范例

var line = turf.lineString(
  [
    [-83, 30],
    [-84, 36],
    [-78, 41]
  ],
  { stroke: "#F00" }
);

var offsetLine = turf.lineOffset(line, 2, { units: "miles" });
/*
{
  type: "Feature",
  geometry: {
    type: "LineString",
    coordinates: [
      [-82.97144752916007, 30.004758745139988],
      [-83.96871903948426, 35.98838780708505],
      [-77.98146901966652, 40.977762823599825]
    ]
  },
  properties: {
    stroke: "#F00"
  }
}
*/

# simplify

npm install @turf/simplify

接收一个 GeoJSON 对象并返回简化版本

参数

入参 类型 描述
geojson GeoJSON 需要简化的 GeoJSON
options Object 可配置项

options

属性 类型 默认值 描述
tolerance Number 1 简化公差
highQuality Boolean false 是否花费更多时间使用其他算法来创建更高质量的简化
mutate Boolean false 是否返回入参的 GeoJSON。如果为 true,则可显着提高性能

返回

GeoJSON

范例

var geojson = turf.polygon([
  [
    [-70.603637, -33.399918],
    [-70.614624, -33.395332],
    [-70.639343, -33.392466],
    [-70.659942, -33.394759],
    [-70.683975, -33.404504],
    [-70.697021, -33.419406],
    [-70.701141, -33.434306],
    [-70.700454, -33.446339],
    [-70.694274, -33.458369],
    [-70.682601, -33.465816],
    [-70.668869, -33.472117],
    [-70.646209, -33.473835],
    [-70.624923, -33.472117],
    [-70.609817, -33.468107],
    [-70.595397, -33.458369],
    [-70.587158, -33.442901],
    [-70.587158, -33.426283],
    [-70.590591, -33.414248],
    [-70.594711, -33.406224],
    [-70.603637, -33.399918]
  ]
]);
var options = { tolerance: 0.01, highQuality: false };
var simplified = turf.simplify(geojson, options);
/*
{
  type: "Feature",
  geometry: {
    type: "polygon",
    coordinates: [
      [
        [-70.603637, -33.399918],
        [-70.683975, -33.404504],
        [-70.701141, -33.434306],
        [-70.694274, -33.458369],
        [-70.668869, -33.472117],
        [-70.609817, -33.468107],
        [-70.587158, -33.442901],
        [-70.603637, -33.399918]
      ]
    ]
  },
  properties: {}
}
*/

# tesselate

npm install @turf/tesselate

接收一个 type 为 polygon 的要素,进行三角拆分并返回

参数

入参 类型 描述
poly Feature<Polygon> type 为 polygon 的要素

返回

FeatureCollection<Polygon> - 以接收的要素为边界的要素集

范例

var poly = turf.polygon([
  [
    [11, 0],
    [22, 4],
    [31, 0],
    [31, 11],
    [21, 15],
    [11, 11],
    [11, 0]
  ]
]);
var triangles = turf.tesselate(poly); // 裁剪成四个三角形要素

# transformRotate

npm install @turf/transform-rotate

接收一个要素,围绕其质心或给定的轴心点旋转指定角度,并返回

值得注意的是,旋转遵循右手规则

参数

入参 类型 描述
geojson GeoJSON 需要旋转的要素
angle Number 旋转角度,与正北方向所形成的角度,正数为顺时针
options Object 可配置项

options

属性 类型 默认值 描述
pivot Coord "centroid" 围绕旋转的中心点
mutate Boolean false 是否返回入参的 GeoJSON。如果为 true,则可显着提高性能

返回

FeatureCollection<Polygon>

范例

var poly = turf.polygon([
  [
    [0, 29],
    [3.5, 29],
    [2.5, 32],
    [0, 29]
  ]
]);
var options = { pivot: [0, 25] };
var rotatedPoly = turf.transformRotate(poly, 10, options);
/*
{
  type: "Feature",
  geometry: {
    type: "polygon",
    coordinates: [
      [
        [0.7795822621476418, 28.93923101204884],
        [4.215029062075928, 28.39787231953407],
        [3.8371754734060914, 31.512519272167843],
        [0.7795822621476418, 28.93923101204884]
      ]
    ]
  },
  properties: {}
}
*/

# transformTranslate

npm install @turf/transform-translate

接收一个要素,通过接收指定参数移动后,并返回

参数

入参 类型 描述
geojson GeoJSON 需要移动的要素
distance Number 距离,负值为反向移动
direction Number 移动角度,与正北方向所形成的角度,正数为顺时针
options Object 可配置项

options

属性 类型 默认值 描述
units String "kilometers" 单位,可选的有 degrees、radians、miles、kilometers
zTranslation Number 0 垂直移动的距离
mutate Boolean false 是否返回入参的 GeoJSON。如果为 true,则可显着提高性能

返回

FeatureCollection<Polygon>

范例

var poly = turf.polygon([
  [
    [0, 29],
    [3.5, 29],
    [2.5, 32],
    [0, 29]
  ]
]);
var translatedPoly = turf.transformTranslate(poly, 100, 35);
/*
{
  type: "Feature",
  geometry: {
    type: "polygon",
    coordinates: [
      [
        [0.591903257444983, 29.73668011441568],
        [4.091903257444983, 29.73668011441568],
        [3.1107279117935605, 32.73668011441568],
        [0.591903257444983, 29.73668011441568]
      ]
    ]
  },
  properties: {}
}
*/

# transformScale

npm install @turf/transform-scale

接收一个要素或要素集,进行放大并返回

值得注意的是,点要素不会有放大效果

参数

入参 类型 描述
geojson GeoJSON 需要缩放的要素
factor Number 缩放比例,只能为是正值
options Object 可配置项

options

属性 类型 默认值 描述
origin String|Coord "centroid" 缩放的中心点,如果是 String 的话,选项有 sw/se/nw/ne/center/centroid
mutate Boolean false 是否返回入参的 GeoJSON。如果为 true,则可显着提高性能

返回

FeatureCollection<Polygon>

范例

var poly = turf.polygon([
  [
    [0, 29],
    [3.5, 29],
    [2.5, 32],
    [0, 29]
  ]
]);
var scaledPoly = turf.transformScale(poly, 3);
/*
{
  type: "Feature",
  geometry: {
    type: "polygon",
    coordinates: [
      [
        [-3.943186502488288, 27.000000000000014],
        [6.457389876866159, 27.000000000000007],
        [3.5342414612586026, 36.00000000000001],
        [-3.943186502488288, 27.000000000000014]
      ]
    ]
  },
  properties: {}
}
*/

# union

npm install @turf/union

接收两个或以上的 type 为 polygon 的多边形,并计算出它们的并集,返回并集要素

值得注意的是,如果没有交集,则返回MultiPolygon要素

参数

入参 类型 描述
A ...Feature<Polygon> 需要坐标并集的多个要素

返回

Feature<Polygon|MultiPolygon>

范例

var poly1 = turf.polygon(
  [
    [
      [-82.574787, 35.594087],
      [-82.574787, 35.615581],
      [-82.545261, 35.615581],
      [-82.545261, 35.594087],
      [-82.574787, 35.594087]
    ]
  ],
  { fill: "#0f0" }
);
var poly2 = turf.polygon(
  [
    [
      [-82.560024, 35.585153],
      [-82.560024, 35.602602],
      [-82.52964, 35.602602],
      [-82.52964, 35.585153],
      [-82.560024, 35.585153]
    ]
  ],
  { fill: "#00f" }
);

var union = turf.union(poly1, poly2);
/*
{
  type: "Feature",
  geometry: {
    type: "polygon",
    coordinates: [
      [
        [-82.574787, 35.594087],
        [-82.574787, 35.615581],
        [-82.545261, 35.615581],
        [-82.545261, 35.602602],
        [-82.52964, 35.602602],
        [-82.52964, 35.585153],
        [-82.560024, 35.585153],
        [-82.560024, 35.594087],
        [-82.574787, 35.594087]
      ]
    ]
  },
  properties: {}
}
*/

# voronoi

npm install @turf/voronoi

接收 type 为 point 的要素集和边界框 bbox,并返回 Voronoi 多边形的要素集

值得注意的是,voronoi 是对空间平面的一种分割算法:对离散数据点合理地连成三角网

参数

入参 类型 描述
points FeatureCollection<Point> 要素集
options Object 可配置项

options

属性 类型 默认值 描述
bbox Array [-180,-85,180,-85] 以 minX、minY、maxX、maxY 的顺序排列

返回

FeatureCollection<Polygon>

范例

var options = {
  bbox: [-70, 40, -60, 60]
};
var points = turf.randomPoint(100, options);
var voronoiPolygons = turf.voronoi(points, options);
Last Updated: 8/4/2020, 8:04:25 PM