前端幾何計算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地址: 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)
其中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緩衝區分析
turf 繪製等值線
優點:
- 功能強大的GIS開源庫,持續更新
- 文件全,示例多
缺點:
- turf.js只支援3857和4326的座標系。其他座標系都不支援
geometric
geometric是一個用於處理幾何的 JavaScript 庫。非常的小巧。
github地址:http://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; ``` 示例程式碼 http://bl.ocks.org/HarryStevens/c4eddfb97535e8e01643325cb43175ff  http://bl.ocks.org/HarryStevens/5fe49df19892c04dfb9883c217571409  優點: - 小而精 - 程式碼可讀性和理解門檻很低,非常適合用於借鑑其中的程式碼 缺點: - 只有幾何計算相關的功能,對GIS空間分析的功能支援不夠 # VJMAP 唯傑地圖為AutoCAD圖WebGIS視覺化顯示開發提供的一站式解決方案,完全相容dwg格式、23d效果完美切換、高效能webgl渲染、個性化地圖定製、向量柵格瓦片全支援、跨平臺私有化部署。幾何演算法庫是其SDK中的一個部分。 地址: http://vjmap.com/guide/geo.html 幾何演算法主要功能: - 點相關演算法 - 線相關演算法 - 多邊形相關演算法 - 矩形外包盒相關演算法 - 圓和橢圓及曲線相關演算法 - 網路拓撲圖相關演算法 - 等值線分析相關演算法 用法: 前端sdk庫,可直接在html中引入樣式``和指令碼檔案 `;或安裝npm包
npm install vjmap`來進行開發。
示例:
最短路徑演算法 http://vjmap.com/demo/#/demo/map/geo/geoFindShortestPath
等值線分析演算法 http://vjmap.com/demo/#/demo/map/geo/geoVectorContour
示例 github地址 http://github.com/vjmap/vjmap-playground
優點:
- 對一些業務和專業功能進行了一定程式的封裝
- 文件較全,示例豐富
缺點
-
非開源
-
GIS空間分析功能較弱