为何 Turf 能成为 JavaScript 地理空间引擎王者?

createh52个月前 (05-04)技术教程26

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

什么是 Turf

A modular geospatial engine written in JavaScript and TypeScript

Turf 是一个用于空间分析的 JavaScript 库,包括传统的空间操作、用于创建 GeoJSON 数据的辅助函数以及数据分类和统计工具。开发者可以将 Turf 作为客户端插件添加到目标网站,也可以使用 Node.js 在服务器端运行 Turf。

目前 Turf 在 Github 通过 MIT 协议开源,有 9k 的 star、1k 的 fork、21k 的项目依赖量、代码贡献者 150+、是一个优质的前端开源项目。

如何使用 Turf

首先需要安装相应的依赖:

// get all of turf
npm install @turf/turf

// or get individual packages
npm install @turf/helpers
npm install @turf/buffer

当然,开发者也可以通过 CDN 直接使用:

<script src="https://cdn.jsdelivr.net/npm/@turf/turf@6/turf.min.js"></script>

Turf.js 的端口可用于:

  • Java(Android、Java SE)
  • Swift(iOS、macOS、tvOS、watchOS、Linux):Turf for Swift 处于实验阶段,其公共 API 可能会发生变化。
  • Dart/Flutter(Dart Web、Dart Native;Flutter for iOS、Android、macOS、Windows、Linux、Web)

Turf 使用 GeoJSON 来处理所有地理数据。Turf 要求数据为标准 WGS84 经度、纬度坐标,开发者可以查看 geojson.io 以获取可轻松创建此数据的工具。

大多数 Turf 函数都适用于 GeoJSON 特征,这些数据代表属性集合(即人口、海拔、邮政编码等)以及几何图形。GeoJSON 有几种几何类型,例如:

  • 线串
  • 多边形

Turf 提供了一些自己的几何函数,只不过是输出普通 GeoJSON 的简单包装器。例如,创建点的这两种方法在功能上是等效的:

// 节点顺序:精度和维度
var point1 = turf.point([-73.988214, 40.749128]);
var point2 = {
  type: 'Feature',
  geometry: {
    type: 'Point',
    // Note order: longitude, latitude.
    coordinates: [-73.988214, 40.749128]
  },
  properties: {}
};

需要注意的是,Turf 软件包编译为 ES2017。但是,@turf/turf 的浏览器版本经过转译后也支持 IE11。如果开发者正在使用这些软件包并且需要以 IE11 为目标,可以在构建过程中转译以下软件包:

// 需要转译的软件包
@turf/*
robust-predicates
rbush
tinyqueue

下面示例获取一个或多个要素并返回其面积(以平方米为单位):

var polygon = turf.polygon([
  [
    [125, -15],
    [113, -22],
    [154, -27],
    [144, -15],
    [125, -15],
  ],
]);
var area = turf.area(polygon);

centroid 方法采用一个或多个特征并使用所有顶点的平均值计算质心,从而减少计算一组多边形的质心时小岛和伪影的影响。

var polygon = turf.polygon([
  [
    [-81, 41],
    [-88, 36],
    [-84, 31],
    [-80, 33],
    [-77, 39],
    [-81, 41],
  ],
]);
var centroid = turf.centroid(polygon);

更多关于 Turf 的用法和示例可以参考文末资料,本文不再过多展开。

参考资料

https://github.com/Turfjs/turf

https://turfjs.org/docs/intro

https://www.youtube.com/watch?v=OGJ27rfySP0

https://github.com/Turfjs/turf/issues/1246

https://www.bram.us/2015/01/12/turf-js-advanced-geospatial-analysis-for-browsers-and-node/

相关文章

Java开发中的高阶函数应用:让代码更优雅

Java开发中的高阶函数应用:让代码更优雅高阶函数,这个概念听起来很高级,但实际上在Java开发中已经变得越来越常见。它就像一位魔法师,能让我们的代码变得更加简洁和高效。今天,我们就来聊聊Java中的...

java Math类和Random类的用法(java random())

/*** 测试Math类的常用方法* 测试Random类*/public class TestMath { public static void main(String[] args) { int a...

系统性能优化与Java代码编写性能考虑

一 、性能与性能优化性能指的是衡量系统是否能满足用户及技术管理需求的一组指标。性能优化是为了使这些指标能够达到用户及管理的目标,而对系统进行的一系列改进过程。作为信息系统的一项重要工作,性能优化过程将...

一机集团:能碳一体化管控平台为行业绿色转型树立新标杆

作为国家“一五”期间重点建设的军工骨干企业,一机集团在“十四五”期间交出了一份亮眼的绿色答卷:综合能耗下降33.3%,可比价万元产值综合能耗下降3.47%,超额完成能耗“双控”目标。如今,一机集团再次...

嵌入式C语言基础编程—5年程序员给你讲函数,你真的懂函数吗?

本文主要是对C基础编程关于函数的初步讲解,后续会深入讲解C高级相关的概念(C大神可先略过)。 本人近期会陆续上传IT编程相关的资料和视频教程,可以关注一下互相交流:C C++ Java python...

Java8 Stream流操作深度解析(java stream split)

Java8 Stream流操作深度解析提到Java8,你脑海里第一个浮现的是什么?是Lambda表达式?还是Optional类?其实,Java8引入的Stream API也是相当重要且强大的特性之一。...