前端幾何計算GIS分析算法庫介紹及優缺點分析
前言
在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地址: https://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)
其中JSTS的基本概念與JTS相同。JTS基本概念和使用: https://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地址: https://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緩衝區分析
turf 繪製等值線
優點:
- 功能強大的GIS開源庫,持續更新
- 文檔全,示例多
缺點:
- turf.js只支持3857和4326的座標系。其他座標系都不支持
geometric
geometric是一個用於處理幾何的 JavaScript 庫。非常的小巧。
github地址:https://github.com/HarryStevens/geometric
功能:提供了點,線,面的及相交判斷的相交算法 .
網頁瀏覽器
在原版中,geometric
全局導出。您可以使用 unpkg 中的最新版本。
```js
``` 或 npm i geometric -S 用法 ```js const geometric = require("geometric"); var first_draw = 1; var width = 960, height = 500; var initial_separation = 200; var rect_width = 40, rect_height = 20; var data = [[-initial_separation + width / 2, height / 2], [initial_separation + width / 2, height / 2]], full_datum, half_datum, full_translate, half_translate; var angle = geometric.lineAngle([data[0], data[1]]); var full_distance = geometric.lineLength([data[0], data[1]]); var half_distance = full_distance / 2; ``` 示例代碼 https://bl.ocks.org/HarryStevens/c4eddfb97535e8e01643325cb43175ff  https://bl.ocks.org/HarryStevens/5fe49df19892c04dfb9883c217571409  優點: - 小而精 - 代碼可讀性和理解門檻很低,非常適合用於借鑑其中的代碼 缺點: - 只有幾何計算相關的功能,對GIS空間分析的功能支持不夠 # VJMAP 唯傑地圖為AutoCAD圖WebGIS可視化顯示開發提供的一站式解決方案,完全兼容dwg格式、23d效果完美切換、高性能webgl渲染、個性化地圖定製、矢量柵格瓦片全支持、跨平台私有化部署。幾何算法庫是其SDK中的一個部分。 地址: https://vjmap.com/guide/geo.html 幾何算法主要功能: - 點相關算法 - 線相關算法 - 多邊形相關算法 - 矩形外包盒相關算法 - 圓和橢圓及曲線相關算法 - 網絡拓撲圖相關算法 - 等值線分析相關算法 用法: 前端sdk庫,可直接在html中引入樣式``和腳本文件 `;或安裝npm包
npm install vjmap`來進行開發。
示例:
最短路徑算法 https://vjmap.com/demo/#/demo/map/geo/geoFindShortestPath
等值線分析算法 https://vjmap.com/demo/#/demo/map/geo/geoVectorContour
示例 github地址 https://github.com/vjmap/vjmap-playground
優點:
- 對一些業務和專業功能進行了一定程序的封裝
- 文檔較全,示例豐富
缺點
-
非開源
-
GIS空間分析功能較弱