Turf.js介绍
目录
- 1,使用场景
- 2,安装 Turf.js
- 3,在 Vue 3 组件中使用 Turf.js
- 4,主要功能
- 4.1,点、线、面的创建
- 4.2,缓冲区计算(Buffer Analysis)
- 4.3,点与线的相交判断
- 4.4,多边形区域的计算
- 4.5,计算最近的点
- 4.6,叠加分析(Overlay Analysis):
- 4.7,空间过滤(Spatial Filter)
- 4.8,空间关系判断(Spatial Relationship)
- 4.9,地理空间统计(Geospatial Statistics)
- 4.10,距离测量(Distance Measurement)
- 4.11,地理空间插值(Spatial Interpolation)
- 4.12,空间分析(Spatial Analysis)
- 4.13,地理空间可视化(Geospatial Visualization)
- 4.14,地理空间数据转换(Geospatial Data Conversion)
Turf.js 是一个用于地理空间计算的 JavaScript 库。它提供了许多地理空间操作的函数,如点线面的创建、缓冲区计算、距离计算、区域合并等,方便在前端应用中处理地理空间数据和实现地图相关功能。Turf.js 不依赖于任何地图库,可以在任何 JavaScript 环境中使用。
1,使用场景
地图展示:结合 Leaflet.js 或其他地图库,使用 Turf.js 对地理空间数据进行处理和可视化展示,如计算缓冲区、距离等。
地理数据分析:对地理空间数据进行复杂的计算和分析,如寻找最近的点、聚合数据等。
地理空间查询:进行空间查询和过滤,如查找包含在指定区域内的点等。
位置服务:Turf.js 可以用于实现位置服务,如根据用户位置计算周边的兴趣点、路径规划等
2,安装 Turf.js
npm install @turf/turf
3,在 Vue 3 组件中使用 Turf.js
地理距离计算
起点坐标:[{{ fromLng }}, {{ fromLat }}]
终点坐标:[{{ toLng }}, {{ toLat }}]
距离:{{ distance }} miles
效果:

4,主要功能
4.1,点、线、面的创建
const point = turf.point([lng, lat]);
const line = turf.lineString([[lng1, lat1], [lng2, lat2]]);
const polygon = turf.polygon([[[lng1, lat1], [lng2, lat2], [lng3, lat3], [lng1, lat1]]]);
4.2,缓冲区计算(Buffer Analysis)
Turf.js 可以用于计算点、线或面要素的缓冲区,即在原有要素周围生成一圈半径固定的区域。这在地理空间分析和可视化中非常常见,例如绘制一定范围内的服务区域或可视化设备的影响范围。
import turf from '@turf/turf';const point = turf.point([-122.4194, 37.7749]);
const buffered = turf.buffer(point, 2, { units: 'miles' });
console.log('Buffered area:', buffered);
4.3,点与线的相交判断
可以使用 booleanPointInLine 方法判断点是否与线相交。
import turf from '@turf/turf';const point = turf.point([-122.4194, 37.7749]);
const line = turf.lineString([[-122.4192, 37.7749], [-122.4196, 37.7749]]);
const isIntersect = turf.booleanPointInLine(point, line);
4.4,多边形区域的计算
可以使用 union 方法将多个多边形区域合并为一个。
import turf from '@turf/turf';const poly1 = turf.polygon([[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]]);
const poly2 = turf.polygon([[[5, 5], [5, 15], [15, 15], [15, 5], [5, 5]]]);
const unioned = turf.union(poly1, poly2);
4.5,计算最近的点
const points = [point([-122.4194, 37.7749]),point([-121.8863, 37.3382]),point([-123.3656, 38.5816]),
];
const from = point([-122.4192, 37.7750]);
const nearest = nearestPoint(from, points);
console.log('最近的点:', nearest);
4.6,叠加分析(Overlay Analysis):
Turf.js 支持对地理空间要素进行叠加分析,包括求交、求并、求差等操作。这在地图叠加和数据叠加分析中非常有用。
import turf from '@turf/turf';const polygon1 = turf.polygon([[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]]);
const polygon2 = turf.polygon([[[5, 5], [5, 15], [15, 15], [15, 5], [5, 5]]]);const intersection = turf.intersect(polygon1, polygon2);
console.log('Intersection:', intersection);
4.7,空间过滤(Spatial Filter)
Turf.js 可以根据空间位置对地理空间要素进行过滤,例如在一个区域内选择所有的点或线要素。
import turf from '@turf/turf';const points = turf.points([
[-122.4194, 37.7749],
[-122.4192, 37.7755],
[-122.4189, 37.7755],
]);const bbox = [-122.42, 37.775, -122.415, 37.780];
const filteredPoints = turf.pointsWithinPolygon(points, turf.bboxPolygon(bbox));
console.log('Filtered Points:', filteredPoints);
4.8,空间关系判断(Spatial Relationship)
Turf.js 可以判断两个地理空间要素之间的空间关系,例如判断一个点是否在一个面内、判断两个线要素是否相交等。
import turf from '@turf/turf';const point = turf.point([-122.4194, 37.7749]);
const polygon = turf.polygon([[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]]);const isInside = turf.booleanPointInPolygon(point, polygon);
console.log('Is point inside polygon:', isInside);
4.9,地理空间统计(Geospatial Statistics)
Turf.js 支持对地理空间数据进行统计分析,例如计算点要素在多边形内的数量、计算线要素的长度等。
import turf from '@turf/turf';const points = turf.points([
[-122.4194, 37.7749],
[-122.4192, 37.7755],
[-122.4189, 37.7755],
]);const polygon = turf.polygon([[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]]);const pointsInsidePolygon = turf.pointsWithinPolygon(points, polygon);
const numberOfPointsInside = pointsInsidePolygon.features.length;
console.log('Number of points inside polygon:', numberOfPointsInside);
4.10,距离测量(Distance Measurement)
Turf.js 可以用于计算地理空间要素之间的距离,例如计算两个点之间的直线距离或计算线要素的长度。
import turf from '@turf/turf';const point1 = turf.point([-122.4194, 37.7749]);
const point2 = turf.point([-122.4189, 37.7755]);const distance = turf.distance(point1, point2, { units: 'miles' });
console.log('Distance between points:', distance);
4.11,地理空间插值(Spatial Interpolation)
Turf.js 可以进行地理空间数据的插值计算,例如将离散的点数据通过插值算法生成连续的表面,从而实现数据的光滑化和可视化。
import turf from '@turf/turf';const points = turf.points([
[-122.4194, 37.7749],
[-122.4189, 37.7755],
[-122.4188, 37.7752],
]);const interpolatedGrid = turf.interpolate(points, 100, { gridType: 'hex', property: 'elevation' });
console.log('Interpolated grid:', interpolatedGrid);
4.12,空间分析(Spatial Analysis)
Turf.js 可以进行复杂的地理空间数据分析,例如计算面要素的面积、计算线要素的方向、查找最近的点等。
import turf from '@turf/turf';const polygon = turf.polygon([[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]]);
const area = turf.area(polygon);
console.log('Area of polygon:', area);
4.13,地理空间可视化(Geospatial Visualization)
Turf.js 可以用于在 Web 应用中对地理空间数据进行可视化,例如在地图上绘制点、线、面要素,并进行符号化、颜色映射等操作。
import turf from '@turf/turf';const point = turf.point([-122.4194, 37.7749]);
const line = turf.lineString([[-122.4194, 37.7749], [-122.4189, 37.7755]]);
const polygon = turf.polygon([[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]]);// Code for visualization on a map goes here...
4.14,地理空间数据转换(Geospatial Data Conversion)
Turf.js 可以实现地理空间数据的格式转换,例如将 GeoJSON 格式转换为 KML 格式,或将经纬度坐标转换为其他投影坐标系的坐标。
import turf from '@turf/turf';const geojson = {type: 'Feature',geometry: {type: 'Point',coordinates: [-122.4194, 37.7749],
},properties: {name: 'San Francisco',
},
};const kml = turf.toKML(geojson);
console.log('KML representation:', kml);
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
