Turf.js介绍

news2024/11/18 19:37:26

目录

      • 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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/983881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB创建avi文件

简介 MATLAB可以对音频和视频文件进行处理&#xff0c;这里简单说明一下MATLAB创建avi文件的用法。 常用函数 aviinfo 测试用用例&#xff0c;如下所示 用于avi格式的音频视频文件&#xff0c;返回一个对该文件的描述&#xff0c;只能用于avi格式的音频视频文件。 仔细看…

网络技术十二:子网划分

子网划分 A类地址 ⑴ A类地址第1字节为网络地址&#xff0c;其它3个字节为主机地址。另外第1个字节的最高位固定为0。 ⑵ A类地址范围&#xff1a;1.0.0.1到126.255.255.254。 ⑶ A类地址中的私有地址和保留地址&#xff1a; ①10.0.0.0到10.255.255.255是私有地址&#xff0…

mockito框架使用总结

目录 一、mock测试1.1 mock测试1.2 相关概念1.3 mock的好处 二、Mockito框架2.1 快速入门2.2 基础语法2.2.1 生成mock对象2.2.2 设置预期2.2.3 检验调用结果2.2.4 参数匹配器2.2.5 参数捕捉器2.2.6 mock静态方法调用 三、集成junit3.1 集成junit43.2 集成junit4spring3.1 集成j…

java 编程 7个简单的调优技巧

你的Java性能调优有救了&#xff01;分享7个简单实用的Java性能调优技巧 一、以编程方式连接字符串 在Java中有很多不同的连接字符串的选项。比如&#xff0c;可以使用简单的或、良好的旧StringBuffer或StringBuilder。 那么&#xff0c;应该选择哪种方法&#xff1f; 答案取…

CSS basics

CSS(Cascading Style Sheets&#xff0c;层叠样式表)是样式化web内容的代码。CSS基础将引导您开始所需的内容。我们将回答这样的问题:我如何把文本变成红色?我如何使内容显示在(网页)布局的某个位置?我如何用背景图片和颜色装饰我的网页? 1、What is CSS? 像HTML一样&…

Android Jetpack架构组件库:Hilt

一、开发者官网关于Hilt库使用链接如下 使用 Hilt 实现依赖项注入 Hilt版本说明 二、工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;LearnJetpack-hilt&#xff1a;hilt版本2.48 代…

生成订单30分钟未支付,则自动取消,该怎么实现?

今天给大家上一盘硬菜&#xff0c;并且是支付中非常重要的一个技术解决方案&#xff0c;有这块业务的同学注意自己试一把了哈&#xff01; 在开发中&#xff0c;往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付&#xff0c;则自动取消 生成订单60秒后,给用户…

sqlserver 查询数据显示行号

查询的数据需要增加一个行号 SELECT ROW_NUMBER() OVER(ORDER BY witd_wages_area ,witd_wages_type ,witd_department_id ,witd_give_out_time) 行号,ISNULL(witd_wages_area, 0) witd_wages_area ,witd_wages_type ,witd_department_id ,ISNULL(CONVERT(VARCHAR(7), witd_gi…

《逃出大英博物馆》B站千万播放,国风文化才是主流

8月两位UP主煎饼果仔呀、夏天妹妹联合共创了一支短剧《逃出大英博物馆》&#xff0c;自预告释出以来就受到广泛关注&#xff0c;微博话题超5亿次阅读。 2023年初&#xff0c;大英博物馆被盗的消息引发全球关注&#xff0c;有网友留言&#xff0c;希望“拍一部动画片&#xff0…

PyTorch多GPU训练模型——使用单GPU或CPU进行推理的方法

文章目录 1 问题描述2 模型保存方式3 单块GPU上加载模型4 CPU上加载模型5 总结 1 问题描述 PyTorch提供了非常便捷的多GPU网络训练方法&#xff1a;DataParallel和DistributedDataParallel。在涉及到一些复杂模型时&#xff0c;基本都是采用多个GPU并行训练并保存模型。但在推…

Liunx环境安装字体(simsun为例)

一&#xff1a;下载simsun字体文件包 链接&#xff1a;https://pan.baidu.com/s/1jelox8MalDJDWTyx4Z9ghw 提取码&#xff1a;tttt二&#xff1a;把解压后的simsun.ttf、simsun.ttc放到 /usr/share/fonts目录 三&#xff1a;安装 // 刷新字体缓存 [rootxxxxxx fonts]# fc-ca…

为什么大家会觉得考PMP没用?

一是在于PMP这套知识体系&#xff0c;是一套底层的项目管理逻辑框架&#xff0c;整体是比较抽象的。大家在学习工作之后&#xff0c;会有人告诉你很多职场的一些做事的规则&#xff0c;比如说对于沟通&#xff0c;有人就会告诉如何跟客户沟通跟同事相处等等&#xff0c;这其实就…

ebay运营思路|学会这些技巧,新店铺销量翻倍

Ebay是一个老牌的跨境电商&#xff0c;目前仍然是稳坐全球前列的平台&#xff0c;也是强手如云的地方&#xff0c;虽然相对于亚马逊他显得没有那么“卷”。 要在这片市场中抢占一番天地&#xff0c;首先一定要学会一些高效的运营技巧&#xff0c;今天就来分享一些Ebay运营技巧…

SVPWM的原理及法则推导和控制算法详解

空间电压矢量调制 SVPWM 技术 SVPWM是近年发展的一种比较新颖的控制方法&#xff0c;是由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波&#xff0c;能够使输出电流波形尽 可能接近于理想的正弦波形。空间电压矢量PWM与传统的正弦PWM不同&#xff0c;它…

chrome 谷歌浏览器 导出插件拓展和导入插件拓展

给同事部署 微软 RPA时&#xff0c;需要用到对应的chrome浏览器插件&#xff1b;谷歌浏览器没有外网是不能直接下载拓展弄了半小时后才弄好&#xff0c;竟发现没有现成的教程&#xff0c;遂补充&#xff1b; 如何打包导出 谷歌浏览器 地址栏敲 chrome://extensions/在对应的地…

如何配置远程访问以在外部网络中使用公司内部的OA办公系统——“cpolar内网穿透”

文章目录 前言1. 确认在内网下能够使用IP端口号登录OA办公系统2. 安装cpolar内网穿透3. 创建隧道映射内网OA系统服务端口4. 实现外网访问公司内网OA系统总结 前言 现在大部分公司都会在公司内网搭建使用自己的办公管理系统&#xff0c;如OA、ERP、金蝶等&#xff0c;员工只需要…

Instagram Shop如何开通?如何销售?最全面攻略

借助 Instagram 商店&#xff0c;品牌可以策划一系列可购物的商品&#xff0c;这些商品可通过其 Instagram 个人资料直接访问。这使得在应用程序上销售更容易&#xff0c;也被潜在客户发现。 一、什么是Instagram Shop&#xff1f; Instagram 商店为商家提供了一种在 Instagra…

3种等待方式,让你学会Selenium设置自动化等待测试脚本!

一、Selenium脚本为什么要设置等待方式&#xff1f;——即他的应用背景到底是什么 应用Selenium时&#xff0c;浏览器加载过程中无法立即显示对应的页面元素从而无法进行元素操作&#xff0c;需设置一定的等待时间去等待元素的出现。&#xff08;简单来说&#xff0c;就是设置…

组件以及组件间的通讯

组件 & 组件通讯 :::warning 注意 阅读本文章之前&#xff0c;你应该先要了解 ESM 模块化的 import export&#xff0c;如需要请查看 ESM 模块化。 ::: 上一篇有介绍到什么是组件化&#xff0c;就是把一个页面拆分成若干个小模块&#xff0c;然后重新组成一个页面。其中的…

iPhone 15有始终显示功能吗?它会出现在更多的苹果手机上吗?

和我们一样&#xff0c;你可能也在犹豫&#xff0c;iPhone 15将增加一个“始终显示”的功能&#xff0c;与一年前苹果Pro版手机的功能相匹配。然而&#xff0c;随着苹果9月活动的临近&#xff0c;没有太多传言可以让我们相信我们会如愿以偿。 你可能还记得&#xff0c;去年iPh…