Turf.js介绍

简介: Turf.js介绍

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

<template>
    <div>
      <h1>地理距离计算</h1>
      <p>起点坐标:[{{ fromLng }}, {{ fromLat }}]</p>
      <p>终点坐标:[{{ toLng }}, {{ toLat }}]</p>
      <p>距离:{{ distance }} miles</p>
    </div>
   </template>
   
   <script>
   import { ref, onMounted } from 'vue';
  //  import turf from '@turf/turf';
   import * as turf from '@turf/turf'
   
   export default {
    setup() {
      const fromLng = ref(-120.4194);
      const fromLat = ref(37.7749);
      const toLng = ref(-121.8863);
      const toLat = ref(37.3382);
      const distance = ref(0);
   
      onMounted(() => {
        const from = turf.point([fromLng.value, fromLat.value]);
        const to = turf.point([toLng.value, toLat.value]);
        distance.value = turf.distance(from, to, { units: 'miles' });
     });
   
      return {
        fromLng,
        fromLat,
        toLng,
        toLat,
        distance,
     };
   },
   };
   </script>

效果:

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);
目录
相关文章
|
4天前
|
JavaScript 前端开发 Go
octokit.js
octokit.js
7 1
|
10天前
|
JavaScript 前端开发
什么是js?
什么是js?
|
5月前
|
移动开发 JavaScript 前端开发
什么是js? js的特点是什么?
什么是js? js的特点是什么?
46 0
|
5月前
|
人工智能 JavaScript 前端开发
js的转变
js的转变
33 0
|
JavaScript 前端开发
3、JS总结
3、JS总结
51 0
3、JS总结
|
JavaScript
JS - “借刀杀人” 技巧
JS - “借刀杀人” 技巧
95 0
|
JavaScript 索引
js中for in和for of详细讲解
js中for in和for of详细讲解
js中for in和for of详细讲解
|
JavaScript CDN
写了一个Strview.js
写了一个Strview.js
|
JavaScript
一些js 小技巧
一些js 小技巧
77 0
|
JSON 前端开发 区块链
ethers.js
如果你已经在以太坊上开发过DApp,那你在前端JavaScript中可能用过web3.js。Ethers.js则是一个轻量级的web3.js替代品,在本文中,我们将学习如何使用Ether.js构建一个简单的DApp。
1627 0