前端幾何計算GIS分析演算法庫介紹及優缺點分析

語言: CN / TW / HK

前言

在WebGIS開發中,經常要用到一些常用的幾何計算,GIS空間分析等功能,如點到線的距離、點與多邊形的關係、計算面積、緩衝區分析、最短路徑分析等, 這樣靈活性會更好;那怎麼實現這些功能呢?有沒有一些好用的前端GIS空間分析庫?各有啥優缺點?

JSTS

​ JSTS 是一個 ECMAScript 空間謂詞和函式庫,用於處理符合開放地理空間聯盟釋出的 SQL 簡單特徵規範的幾何。JSTS 也是成熟的 Java 庫JTS的一個埠。

​ 該專案的主要目標是為網路地圖應用程式提供一個完整的庫來處理和分析簡單的幾何圖形,但 JSTS 也可以用作獨立的幾何圖形庫。

JSTS 是通過 AST 到 AST 轉換保留JTS API使用原始 JTS Java 源的自動翻譯製作的,除了 I/O 相關類,這些類已被選擇性地手動移植並支援 WKT、GeoJSON 和 OpenLayers 3+。

github地址: http://github.com/bjornharrtell/jsts

核心特徵:

  • 幾何模型(點、線、面積)
  • 幾何操作(例如,相交、聯合、內部等)
  • 幾何構造
  • 度量函式(例如笛卡爾二維距離、豪斯多夫距離)
  • 空間演算法(例如緩衝區建立、線偏移、線簡化)
  • 幾何數學函式(如角度、距離等)
  • 空間結構(如四叉樹和R-樹、Delauney三角測量)
  • 輸入/輸出(例如WKT、GML)
  • 高精度算術

用法: http://bjornharrtell.github.io/jsts/

js var reader = new jsts.io.WKTReader() var a = reader.read('POINT (-20 0)') var b = reader.read('POINT (20 0)') // Buffer A and B by 40 units a = a.buffer(40) b = b.buffer(40) // Intersection of A and B var intersection = a.intersection(b) // Difference of A and B var difference = a.difference(b) // Union of A and B var union = a.union(b) // Symmetric difference of A and B var symDifference = a.symDifference(b)

image-20221115211610404

其中JSTS的基本概念與JTS相同。JTS基本概念和使用: http://blog.csdn.net/runing9/article/details/51890350

優點:

  • 功能強大的開源庫
  • 支援平面座標系,不限制於地理座標系

缺點:

  • 文件缺少,示例缺少

Turf

Turf.js是JavaScript 空間分析庫,Turf 實現了常用的空間分析操作,例如生成緩衝區、計算等高線,建立 TIN 等等。以往只屬於桌面 GIS 的分析功能,已經可以在瀏覽器中使用。 Turf 使用 JavaScript 編寫,通過 npm 進行包管理。良好的模組化設計使得 Turf 不僅可用於瀏覽器端,還可以通過 Node.js 在伺服器端使用。Turf 原生支援 GeoJSON 向量資料。GeoJSON 的優點是結構簡單,並且得到了所有網頁地圖API的支援;

github地址: http://github.com/Turfjs/turf

主要功能:

  • Measurement 測量計算
  • Coordinate Mutation 座標變換
  • Transformation 資料處理
  • Feature Conversion 要素轉換
  • Misc
  • Helper 資料工具
  • Random 隨機生成資料
  • Interpolation 插值
  • Joins 空間關聯
  • Grids 網格計算
  • Classification
  • Aggregation 聚合
  • Meta 元資料使用方法
  • Assertions 型別校驗
  • Booleans 布林類方法
  • Unit Conversion 單位換算

用法: http://turfjs.org/

前端編譯工具或者node 環境中使用:

```js var collect = require('@turf/collect'); // or in ES6 import collect from '@turf/collect'; // 使用 collect(points, polys, 'population', 'populationValues');

// 全量引用

import * as turf from '@turf/turf' ```

瀏覽器中直接使用

```html

```

turf緩衝區分析

image-20221115213106611

turf 繪製等值線

image-20221115213158776

優點:

  • 功能強大的GIS開源庫,持續更新
  • 文件全,示例多

缺點:

  • turf.js只支援3857和4326的座標系。其他座標系都不支援

geometric

geometric是一個用於處理幾何的 JavaScript 庫。非常的小巧。

github地址:http://github.com/HarryStevens/geometric

功能:提供了點,線,面的及相交判斷的相交演算法 .

網頁瀏覽器

在原版中,geometric全域性匯出。您可以使用 unpkg 中的最新版本。

```js

;或安裝npm包npm install vjmap`來進行開發。

示例:

最短路徑演算法 http://vjmap.com/demo/#/demo/map/geo/geoFindShortestPath

image-20221115214942891

等值線分析演算法 http://vjmap.com/demo/#/demo/map/geo/geoVectorContour

image-20221115215026466

示例 github地址 http://github.com/vjmap/vjmap-playground

優點:

  • 對一些業務和專業功能進行了一定程式的封裝
  • 文件較全,示例豐富

缺點

  • 非開源

  • GIS空間分析功能較弱