核心原理詳解:基于二十面體的多精度六邊形離散全球網(wǎng)格)
GIS【免費(fèi)下載鏈接】h3Hexagonal hierarchical geospatial indexing system項(xiàng)目地址https://gitcode.com/gh_mirrors/h3/h3點(diǎn)擊查看免費(fèi)下載導(dǎo)讀H3 是一個(gè)十六進(jìn)制層級(jí)地理空間索引系統(tǒng)Hexagonal Hierarchical Geospatial Indexing System它屬于離散全球網(wǎng)格系統(tǒng)Discrete Global Grid System, DGGS的范疇。本文以倉庫內(nèi) overview.md 為基礎(chǔ)結(jié)合源碼深入講解 H3 的網(wǎng)格構(gòu)建原理從球體外接二十面體、Dymaxion 定向、面心多面體球心投影到 aperture 7 的遞歸細(xì)分與五邊形必然存在的原因。讀完本文你將掌握 H3 網(wǎng)格為何是分層 六邊形 必須含五邊形的組合理解分辨率 0 到 15 各層級(jí)的面積、邊長與單元數(shù)量規(guī)律并能正確使用kml構(gòu)建目標(biāo)可視化 H3 網(wǎng)格。一、離散全球網(wǎng)格系統(tǒng)與 H3 的設(shè)計(jì)定位H3 是一個(gè)離散全球網(wǎng)格系統(tǒng)其核心思想是把地球表面劃分成一系列盡可能等大、具有層級(jí)關(guān)系的單元并用這些單元作為空間索引的基礎(chǔ)。H3 在倉庫中的項(xiàng)目描述為 Hexagonal hierarchical geospatial indexing system而 README.md 進(jìn)一步說明它使用六邊形網(wǎng)格并且可以近似地不斷細(xì)分出更細(xì)的六邊形網(wǎng)格從而同時(shí)具備六邊形網(wǎng)格的優(yōu)點(diǎn)與 S2 那樣的層級(jí)細(xì)分能力。從技術(shù)譜系上看H3 的 DGGS 設(shè)計(jì)參考了 Sahr et al. (2003) 的研究成果。與常見的經(jīng)緯度方格等經(jīng)度-緯度網(wǎng)格相比H3 的關(guān)鍵優(yōu)勢(shì)在于每個(gè)單元cell的相鄰單元數(shù)量固定且各向同性有利于距離與鄰域計(jì)算通過層級(jí)索引粗粒度到細(xì)粒度的聚合與下鉆無需重新建索引。H3 網(wǎng)格的理論定義與數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)關(guān)系可以在源碼中找到印證例如 constants.h 中定義了MAX_H3_RES 1516 個(gè)分辨率編號(hào) 0 到 15、NUM_ICOSA_FACES 20二十面體面數(shù)、NUM_BASE_CELLS 122基礎(chǔ)單元數(shù)等核心常量。二、球體外接二十面體與球心投影H3 網(wǎng)格的幾何起點(diǎn)H3 并不直接在地球表面鋪網(wǎng)格而是先把六邊形網(wǎng)格構(gòu)建在一個(gè)球體外接的二十面體的平面面上然后再把網(wǎng)格單元投影回球面。這一先平面、后球面的兩步策略是 H3 幾何構(gòu)建的核心。2.1 兩步構(gòu)建流程在球體外接的二十面體icosahedron的 20 個(gè)平面三角形面上建立平面六邊形網(wǎng)格使用面心多面體球心投影inverse face-centered polyhedral gnomonic projection把網(wǎng)格單元投影到球面。源碼 coordijk.h 的注釋明確記載了兩種坐標(biāo)系統(tǒng)gnomonic面心多面體球心投影空間采用傳統(tǒng)縮放x 軸與面 Class II 的 i 軸對(duì)齊hex2d局部面心坐標(biāo)系按指定 H3 分辨率單位長度縮放x 軸與局部 i 軸對(duì)齊。投影的核心實(shí)現(xiàn)位于 faceijk.c_vec3ToHex2d約 410 行把球面上的點(diǎn)映射到某個(gè)二十面體面并計(jì)算該點(diǎn)相對(duì)面中心的角度與距離隨后執(zhí)行g(shù)nomonic scaling對(duì) r 取tan(r)再按分辨率縮放_(tái)hex2dToVec3約 458 行執(zhí)行逆操作通過inverse gnomonic scalingatan(r)把平面坐標(biāo)還原回球面單位向量。在這兩個(gè)函數(shù)中可以看到若干關(guān)鍵幾何常量M_SQRT7/M_RSQRT7分辨率間縮放、RES0_U_GNOMONIC與INV_RES0_U_GNOMONIC從分辨率 0 的單位長度到球心投影單位長度的換算定義在 constants.h。2.2 坐標(biāo)參考系與地球模型H3 使用的坐標(biāo)參考系統(tǒng)CRS是球面坐標(biāo)采用 WGS84/EPSG:4326 的等積半徑authalic radius。實(shí)際應(yīng)用中最常見的做法就是直接使用 WGS84 CRS 數(shù)據(jù)配合 H3 庫使用。這一選擇同樣體現(xiàn)在源碼中EARTH_RADIUS_KM 6371.007180918475見 constants.h正是 WGS84 authalic radius 的千米數(shù)值用于各類球面面積、距離計(jì)算。需要注意的是這里的球面模型是等面積球并非橢球體因此面積與邊長數(shù)值與真實(shí)橢球地表存在細(xì)微差異。三、Dymaxion 定向讓 12 個(gè)二十面體頂點(diǎn)全部落于海洋二十面體有 12 個(gè)頂點(diǎn)。H3 使用巴克敏斯特·富勒R. Buckminster Fuller提出的Dymaxion 定向?qū)⑶蛎娑骟w固定到地球上。該定向的關(guān)鍵性質(zhì)是二十面體的 12 個(gè)頂點(diǎn)全部位于海洋中。這一性質(zhì)對(duì)網(wǎng)格系統(tǒng)的可用性意義重大頂點(diǎn)處是 H3 網(wǎng)格中五邊形單元的所在位置詳見下文把五邊形藏在海洋里可以避免在人口稠密的陸地地區(qū)頻繁出現(xiàn)五邊形畸變降低對(duì)空間分析與可視化應(yīng)用的影響。文檔同時(shí)指出在 H3 開發(fā)之時(shí)這是已知的唯一滿足該性質(zhì)的定向后來學(xué)術(shù)界發(fā)現(xiàn)了其他可行的定向Barnes et al., 2019。H3 至今仍保留 Dymaxion 定向因此其網(wǎng)格幾何與坐標(biāo)系與具體定向強(qiáng)綁定。從源碼看二十面體 20 個(gè)面的中心點(diǎn)坐標(biāo)被靜態(tài)定義在 faceijk.c 的faceCenterPoint[NUM_ICOSA_FACES]數(shù)組中配合faceAxesAzRadsCII各面 Class II 的 i/j/k 軸方位角構(gòu)成面級(jí)幾何基礎(chǔ)面之間的相鄰關(guān)系則記錄在faceNeighbors查找表中。四、從二十面體到全球網(wǎng)格遞歸細(xì)分與分辨率4.1 構(gòu)建方式遞歸細(xì)分H3 網(wǎng)格通過在二十面體上遞歸地創(chuàng)建更高精度的六邊形網(wǎng)格來構(gòu)建直到達(dá)到所需分辨率。這意味著每一層分辨率都是上一層網(wǎng)格的細(xì)分結(jié)果天然形成層級(jí)索引結(jié)構(gòu)。4.2 aperture 7 與 sqrt(7) 縮放分辨率間距采用aperture 7孔徑 7即每個(gè)單元在下一級(jí)更細(xì)網(wǎng)格中對(duì)應(yīng)約 7 個(gè)單元。其幾何結(jié)果是隨著分辨率增加單位長度按sqrt(7)縮放每個(gè)六邊形的面積約為下一更粗分辨率六邊形面積的1/7在二十面體平面上測(cè)量。在源碼中這一孔徑關(guān)系體現(xiàn)為多種 IJK 坐標(biāo)變換函數(shù)見 coordijk.h_downAp7/_upAp7逆時(shí)針 aperture 7 細(xì)分/聚合、_downAp7r/_upAp7r順時(shí)針以及M_ONESEVENTH常量1/7的縮放運(yùn)算。這些函數(shù)是實(shí)現(xiàn) cell→children / children→cell 層級(jí)操作的核心。4.3 Class II 與 Class III 的分辨率交替由于 aperture 7 的旋轉(zhuǎn)特性H3 分辨率存在Class II偶數(shù)分辨率與Class III奇數(shù)分辨率兩種網(wǎng)格取向二者軸線相差一個(gè)固定角度M_AP7_ROT_RADSasin(sqrt(3/28)) ≈ 0.3335 rad見 constants.h。源碼在 faceijk.c 的投影函數(shù)中針對(duì) Class III 進(jìn)行了角度修正_vec3ToHex2d中if (isResolutionClassIII(res)) theta ... - M_AP7_ROT_RADS_hex2dToVec3中逆修正確保奇偶分辨率網(wǎng)格在球面上正確銜接。五、12 個(gè)五邊形為什么純六邊形無法鋪滿球面一個(gè)重要的幾何事實(shí)是不可能僅用六邊形完全鋪滿球面或二十面體。這是歐拉多面體公式的必然結(jié)果——任何細(xì)分方案都會(huì)在二十面體頂點(diǎn)處產(chǎn)生五邊形。因此H3 在每個(gè)分辨率都必須包含恰好 12 個(gè)五邊形且每個(gè)五邊形的中心正好位于二十面體的一個(gè)頂點(diǎn)上。這一約束在源碼中得到嚴(yán)格保證constants.h 定義NUM_PENTAGONS 12、NUM_HEX_VERTS 6、NUM_PENT_VERTS 5基礎(chǔ)單元鄰接表baseCellNeighbors見 baseCells.c中對(duì) 12 個(gè)五邊形基礎(chǔ)單元標(biāo)注了INVALID_BASE_CELL無某個(gè)方向的鄰居H3 索引定義中五邊形會(huì)跳過一個(gè)細(xì)分方向PENTAGON_SKIPPED_DIGIT K_AXES_DIGIT見 coordijk.h確保每個(gè)五邊形只有 6 個(gè)直接子單元5 個(gè)六邊形 1 個(gè)五邊形而不是 7 個(gè)。六、分辨率 0 基礎(chǔ)單元122 個(gè)單元構(gòu)成的網(wǎng)格底座第一個(gè) H3 分辨率分辨率 0由122 個(gè)單元組成110 個(gè)六邊形 12 個(gè)以二十面體頂點(diǎn)為中心的五邊形這些單元被稱為base cells基礎(chǔ)單元。這 122 個(gè)基礎(chǔ)單元的選擇經(jīng)過了專門設(shè)計(jì)目標(biāo)是盡量保留球面二十面體的對(duì)稱性。它們被賦予 0 到 121 的編號(hào)編號(hào)規(guī)則基于單元中心點(diǎn)的緯度基礎(chǔ)單元 0 的中心點(diǎn)緯度最高最北基礎(chǔ)單元 121 的中心點(diǎn)緯度最低最南。編號(hào)與鄰接關(guān)系、旋轉(zhuǎn)參數(shù)全部固化在 baseCells.c 的查找表中如baseCellNeighbors定義了每個(gè)基礎(chǔ)單元在 7 個(gè)方向上的鄰居以及baseCellNeighbor60CCWRotations等旋轉(zhuǎn)信息這些查找表構(gòu)成 H3 索引編碼/解碼的基礎(chǔ)?;A(chǔ)單元的方位與拓?fù)湫畔⒁部梢杂?generateBaseCellNeighbors.c 等生成工具復(fù)現(xiàn)。七、16 個(gè)分辨率0–15的統(tǒng)計(jì)規(guī)律H3 在分辨率 0 之上還提供15 個(gè)更細(xì)的網(wǎng)格分辨率總計(jì) 16 個(gè)分辨率0 到 15。最細(xì)的分辨率 15 的單元面積小于 1 平方米。各分辨率的詳細(xì)統(tǒng)計(jì)表單元數(shù)量、平均面積、邊長收錄在 restable.md 中核心規(guī)律如下單元數(shù)量每層恰好 12 個(gè)五邊形六邊形數(shù)量隨分辨率指數(shù)增長總單元數(shù)滿足公式c(r) 2 120 × 7^r推導(dǎo)過程見 restable.md 附錄基于每個(gè)六邊形 7 個(gè)子單元、每個(gè)五邊形 6 個(gè)子單元的遞歸關(guān)系。分辨率總單元數(shù)六邊形數(shù)五邊形數(shù)01221101218428301252,016,8422,016,830121033,897,029,88233,897,029,8701215569,707,381,193,162569,707,381,193,15012平均面積球面模型WGS84 authalic radius分辨率 0 的六邊形平均面積約 4,357,449.4 km2分辨率 15 約 0.895 m2同級(jí)五邊形面積約為六邊形的 0.5046 倍高分辨率下趨近該比值。同一分辨率內(nèi)六邊形面積并不完全相等靠近二十面體頂點(diǎn)的單元更小最小/最大面積比約為 1.99。平均邊長球面模型從分辨率 0 的約 1281.26 km 遞減到分辨率 15 的約 0.000584 km約 58 cm。注意 0–6 級(jí)邊長為精確計(jì)算更細(xì)級(jí)別為外推值。面積與邊長均基于球面模型計(jì)算與橢球地表實(shí)際數(shù)值有細(xì)微差別且同分辨率內(nèi)單元面積隨位置相對(duì)二十面體頂點(diǎn)的遠(yuǎn)近而變化。八、實(shí)操用kml構(gòu)建目標(biāo)可視化 H3 網(wǎng)格overview.md 提到可以通過 make 目標(biāo)kml生成 KML 文件來可視化 H3 網(wǎng)格。結(jié)合 README.md 的構(gòu)建流程完整操作如下# 1. 從倉庫根目錄編譯默認(rèn)最新開發(fā)版如需用發(fā)布版可先 git checkout v$(VERSION) mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. make # 2. 生成 KML 可視化文件 make kml運(yùn)行后KML 文件會(huì)輸出到倉庫的KML子目錄。當(dāng)前倉庫根目錄下已有一個(gè)示例輸出 icosa.kml可以配合 Google Earth 等工具打開查看二十面體/網(wǎng)格結(jié)構(gòu)。kml目標(biāo)的定義與依賴可以在根目錄 CMakeLists.txt 中查閱。提示kml目標(biāo)依賴make已成功構(gòu)建 H3 庫若需要生成不同分辨率或不同區(qū)域的網(wǎng)格可參考 filters 文檔與KML目錄內(nèi)現(xiàn)有產(chǎn)物結(jié)合使用。九、從幾何原理到 H3 索引層級(jí)結(jié)構(gòu)的工程落地H3 網(wǎng)格的分層結(jié)構(gòu)最終編碼為 64 位整數(shù)索引H3Index其位布局定義在 h3Index.h最高位bit 63保留位H3_HIGH_BIT_MASK4 位 modebit 59–62標(biāo)識(shí)索引類型H3_CELL_MODE 1、H3_DIRECTEDEDGE_MODE 2、H3_EDGE_MODE 3、H3_VERTEX_MODE 4見 constants.h4 位 resolutionbit 52–55分辨率 0–157 位 base cellbit 45–51基礎(chǔ)單元編號(hào) 0–121之后每 3 位為一個(gè)分辨率 digitbit 0–44 共 15 個(gè) digit表示該單元在對(duì)應(yīng)層級(jí)沿 i/j/k 軸方向的細(xì)分位置0–6 有效7 表示超出當(dāng)前分辨率的填充位。因此H3 索引天然攜帶分辨率 基礎(chǔ)單元 逐級(jí)細(xì)分方向三層信息從索引中可以直接解析出單元所在層級(jí)與位置——這正是層級(jí)索引在工程上的實(shí)現(xiàn)讀取索引即可判斷分辨率與基礎(chǔ)單元遍歷 digit 即可沿層級(jí)上溯或下鉆。而前文所述12 個(gè)五邊形的幾何約束、base cell 編號(hào)規(guī)則、aperture 7 的細(xì)分方向均被固化在這套位布局與 baseCells.c 的查找表中。十、常見問題辨析Q1H3 網(wǎng)格能只用六邊形嗎不能。歐拉公式?jīng)Q定每個(gè)分辨率必須恰好有 12 個(gè)五邊形五邊形中心位于二十面體頂點(diǎn)。Q2分辨率 0 與更高分辨率是什么關(guān)系分辨率 0 是 122 個(gè)基礎(chǔ)單元更高分辨率通過 aperture 7 遞歸細(xì)分每層六邊形面積約為上一層 1/7邊長按 sqrt(7) 遞減。Q3為什么面積表要區(qū)分六邊形與五邊形五邊形面積約為同級(jí)六邊形的 0.5046 倍不能混為一談且同分辨率內(nèi)六邊形面積隨相對(duì)二十面體頂點(diǎn)的位置波動(dòng)最大/最小約 1.99 倍。Q4H3 的面積/邊長數(shù)值是基于橢球還是球面基于球面模型WGS84 authalic radius見 restable.md 的說明若需要橢球模型需另行換算。Q5KML 文件如何生成在構(gòu)建完成后于build目錄執(zhí)行make kml產(chǎn)物位于倉庫根目錄KML/子目錄。總結(jié)H3 是一個(gè)球體外接二十面體 面心多面體球心投影 aperture 7 遞歸細(xì)分構(gòu)成的離散全球網(wǎng)格系統(tǒng)。其核心設(shè)計(jì)要點(diǎn)可以概括為四件事一是用 Dymaxion 定向把 12 個(gè)頂點(diǎn)也是五邊形所在位置放到海洋中二是以 122 個(gè)基礎(chǔ)單元110 六邊形 12 五邊形作為分辨率 0 底座三是通過 aperture 7 實(shí)現(xiàn) 0–15 共 16 個(gè)分辨率的分層四是把每層恰好 12 個(gè)五邊形的幾何約束固化進(jìn)索引位布局與查找表。理解了這四件事就掌握了 H3 索引為什么能同時(shí)做到分層、可聚合、空間近鄰一致。延伸閱讀各分辨率統(tǒng)計(jì)表單元數(shù)量、面積、邊長、推導(dǎo)公式restable.md源碼級(jí)坐標(biāo)系統(tǒng)定義gnomonic / hex2d / IJKcoordijk.h球心投影與面間坐標(biāo)變換實(shí)現(xiàn)faceijk.c基礎(chǔ)單元鄰接與旋轉(zhuǎn)查找表baseCells.c索引位布局與模式定義h3Index.h、constants.hKML 可視化示例輸出icosa.kml贊分享GIS【免費(fèi)下載鏈接】h3Hexagonal hierarchical geospatial indexing system項(xiàng)目地址https://gitcode.com/gh_mirrors/h3/h3點(diǎn)擊查看免費(fèi)下載相關(guān)推薦H3 六邊形層級(jí)地理空間索引系統(tǒng)全景解析從二十面體剖分到 16 級(jí)分辨率網(wǎng)格H3 六邊形層級(jí)地理空間索引系統(tǒng)全景解析從二十面體剖分到 16 級(jí)分辨率網(wǎng)格 H3 是一套基于六邊形網(wǎng)格的離散全球網(wǎng)格系統(tǒng)Discrete Global GGISH3-JS基于六邊形的地理網(wǎng)格系統(tǒng)H3 JS基于六邊形的地理網(wǎng)格系統(tǒng) 項(xiàng)目簡(jiǎn)介 H3 JS 是一個(gè)基于 JavaScript 語言的開源項(xiàng)目它為 H3 核心庫提供了一個(gè)純 JavaScripGIS解密六邊形網(wǎng)格H3地理空間索引系統(tǒng)的終極架構(gòu)解析解密六邊形網(wǎng)格H3地理空間索引系統(tǒng)的終極架構(gòu)解析 在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的世界中 H3地理空間索引系統(tǒng) 作為Uber開源的六邊形分層地理空間索引工具正在徹底改變我GIS上一篇如何快速調(diào)整vim-airline終端透明度終極配置指南下一篇終極指南autojump v22.4.0 發(fā)布讓你的文件導(dǎo)航速度提升10倍創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考