推薦視頻講解 1h https://yq.aliyun.com/live/793
基礎概念
數據庫時空引擎
OGC 空間要素對象表達
- SimpleFeature :時空要素的抽象表達,默認還有Geometry字段
- SimpleFeatureTpye:要素元數據描述,包括:字段名、類型、空間參考等,類比數據庫表結構
- WKT: Well-known text,用來描述SimpleFeature 對象
GeoMesa 簡介
- GeoMesa是⼀一款開源的基於分佈式計算系統的⾯面向海海量量時空數據查詢與分析的⼯工具包
- GeoMesa基於GeoTools API進⾏行行設計,與GeoServer等進⾏行行集成提供OGC標準的服務
- ⽀支持多種可擴展的、基於雲端的數據存儲架構,包括Apache Accumulo, HBase,Cassandra,Google Bigtable,以及⽤用於流計算的Apache Kafka 。
- 提供了了Spark,並增加了了正對空間數據的UDT、UDF和UDAF,⽅方便便⽤用戶直接使⽤用Spark SQL
進⾏行行空間數據查詢與分析
官網 https://www.geomesa.org/
GeoMesa 體系架構
GeoMesa的源碼可以在GitHub官方頁面下到。GeoMesa代碼庫本身比較複雜,包含了大量的子模塊,除了自身所帶的一些基礎工具模塊外,還提供了基於目前主流的分佈式存儲系統的擴展模塊,但是在瞭解了GeoMesa的架構之後,讀者應該不難看出整個工程還是有規律可循的,比如geomesa-index-api提供了最核心的空間數據索接口(GeoMesaFeatureIndex)與數據訪問(GeoMesaDataStore)等基礎接口類,然後基於此模塊分別有geomesa-accumulo,geomesa-hbase,geomesa-cassandra等擴展模塊。兩外還包括一些其他的輔助模塊,如geomea-jobs提供了對MapReduce的支持等,geomea-utils提供了一些被廣泛使用的工具類
詳細見博客 https://blog.csdn.net/u011596455/article/details/85869199
時空基礎 : 空間填充曲線與GeoHash
時空索引 R 樹
解決了在高維空間搜索等問題,Oracle Spatial、Mysql Spatial、PostgreSql(PostGIS) 都是基於R樹進行空間搜索操作,即對時空字段(Geometry Column) 創建R樹索引。
詳細見博客
https://blog.csdn.net/qq_18298439/article/details/96278997
爲什麼使用空間填充曲線
R樹存在的問題:
- 單獨創建索引文件
- 數據更新問題
爲了達到平衡狀態,新摻入數據需要更新整個R樹 - 不適合NoSQL 的存儲結構
Hbase 本身只提供基於行鍵和全表掃面的查詢,而行鍵索引單一,對於多維度的查詢困難
空間填充曲線的優點是將多維空間轉換成一維曲線
空間填充曲線
Z 曲線 Hibert曲線最常用
空間查詢
- 用戶定義查詢窗口
- 層次劃分
- 計算查詢範圍(Range)
GeoHash 原理
GeoHash將⼆二維的經緯度轉換成字符串串(Base32編碼),如下圖展示了了9個區域的GeoHash字符串串,
分別是WX4ER,WX4G2、WX4G3等,每⼀一個字符串串代表了了某⼀一矩形區域。
- 字符串越長,表示的範圍越小越精確;字符串長度越小,表示的範圍越大越寬泛;
- 字符串越相似表示距離越相近;
GeoMesa Hbase 時空索引
GeoMesa時空索引
GeoMesa使用了基於Z-order填充曲線的GeoHash空間索引技術,
並針對時間維度進行了擴展,具體分爲:
• Z2:空間,點索引
• Z3:時間+空間,點索引
• XZ2 :空間,線\面索引
• XZ3 :時間+空間,線\面索引
Z2
Z3
GeoMesa時空索引具體實現:
https://github.com/locationtech/sfcurve
https://github.com/locationtech/geomesa/tree/master/geomesa-z3
GeoMesa HBase 索引
RowKey設計
- 屬性索引
- Z-Index Shards: 預拆分,範
圍爲1-127,默認爲4
- Z-Index Time Interval
https://www.geomesa.org/documentation/user/datastores/index_config.html
時空查詢-Query Planning
索引選擇順序
- Feature ID predicates using the ID index
- High-cardinality attribute predicates using the attribute index
- Attribute equality predicates using the attribute index
- Spatio-temporal predicates using the Z3/XZ3 index
- Attribute range predicates using the attribute index
- Spatial predicates using the Z2/XZ2 index
- Temporal predicates using the Z3/XZ3 index
GeoMesa HBase應⽤用場景
https://blog.csdn.net/xiaof22a/article/details/80215787
GeoTools DataStore接⼝口
• SimpleFeature:空盡要素的抽象表達,默認含有Geometry字段
• SimpleFeatureType:要素元數據描述,包括:字段名、類型、空間參考等,類似表結構
• DataStore:要素數據集,對應RDBMS中的數據庫,定義了了⽤用戶操作數據的接⼝口
• FeatureSource:⽤用於數據查詢
• FeatureStore: FeatureSource⼦子類,增加數據更更新功能
• SimpleFeatureCollection:數據要素結合,按需加載
• Query:數據查詢類,封裝了了查詢條件
GeoMesa Kafka DataStore
- 使⽤用Kafka作爲數據存儲DataStore
- 通過GeoTools DataStore標準接⼝口進⾏行行訪問
- Consumer與Producer可以分佈在不不同server
- ⽀支持要素緩存,定時寫⼊入kafka
-
GeoMesa Lambda DataStore
• 數據存儲在兩個層:transient tier (Kafka)
和 a persistent tier(HBase)
• 數據定時寫⼊入持久層
• 使⽤用ZK同步數據緩存狀態,保證數據⼀一次
寫⼊入
• 進⾏行行數據查詢會從兩個存儲層分別進⾏行行,
然後合併查詢結果返回給⽤用戶
https://www.geomesa.org/documentation/user/lambda/index.html
GeoMesa GeoJSON/REST API
優點:
- 系統便於部署
- 基於REST服務,操作靈活方便
- 全部使用GeoJSON進行編碼,方便與
其他系統集成
缺點: - 功能比GeoTools API弱,不支持屬
性索引、排序等高級功能 - Server端容易成爲系統瓶頸
https://www.geomesa.org/documentation/user/geojson.html
支持Spark⼤大數據分析
提供了用於空間數據分析的SpatialRDD 模型
- 提供了多種時空函數實現,如
buffer,contains等 - 擴展Spark SQL以支持ISO SQL/MM標
準與OGC SF/SQL 標準的時空查詢
阿⾥裏里雲HBase Ganos
訪問:https://cn.aliyun.com/product/hbase 查詢詳細信息