h3.js六邊形索引前端應用


H3出現背景

    在不同緯度的地區使用等面積、等形狀的六邊形地理單元可以減少指標和特征 normalization的成本。另一方面,在常用的地理范圍查詢中,基於矩形的查詢方法,存在 8 鄰域到中心網格的距離不相等的問題,四邊形存在兩類長度不等的距離,而六邊形的周圍鄰居到中心網格的距離卻是有且僅有一個,從形狀上來說更加接近於圓形。
所以,基於 hexagon 的地理單元已經成為各大廠家的首選,比如 Uber 和 Didi 的峰時定價服務。

生成和填充幾何體

    使用turf.js計算一個500m的近似圓,然后取出圓的坐標,使用H3填充幾何體

var point = turf.point([109.54040527300003,18.755681992000063]);
var buffered = turf.buffer(point, 0.5, {units: 'kilometers'});
let data=buffered.geometry.coordinates[0]
let length=data.length;
let newdata=[]
for(let i=0;i<length;i++){
    let lon=data[i][0]
    let lat=data[i][1]
    newdata.push([lat,lon])
}
const hexagons = h3.polyfill(newdata, 12);

搜索相鄰

    通過已知的六邊形H3字符串搜索周邊的六邊形

h3.kRing(h3index, 2);

壓縮H3索引集合

    有時我們會覺得產生的六邊形太多,可以使用壓縮,這樣能大大減少六邊形數量,本例中H3索引數量壓縮前2110,但是壓縮后只有208

hexagons=h3.compact(hexagons)

合並索引集合

    合並h3索引集返回geojson的ring

 h3.h3SetToMultiPolygon(hexagons, true);

參考資料:

https://zhuanlan.zhihu.com/p/60861179

https://blog.csdn.net/allenlu2008/article/details/103029132

https://www.sohu.com/a/294377304_326074

https://github.com/uber/h3-js

http://lihuia.com/h3:優步的六邊形層級空間索引/

https://cosx.org/2019/01/deck-gl-and-h3/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM