日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

地理網格模型

本文介紹了地理網格模型的用途、基本構成和快速入門等內容。

模型用途

簡介

地理網格模型是一種統一、簡單的地理空間劃分和定位參考系統,依據統一規(guī)則,將地面區(qū)域按照一定經緯度或地面距離進行連續(xù)分割,并將空間不確定性控制在一定范圍內,形成規(guī)則多邊形,每個多邊形均稱為格網單元,從而構成分級、分層次的多級格網體系,實現地面空間離散化,并賦予統一編碼。

Ganos GeomGrid是對象關系型數據庫PostgreSQL兼容版本(PolarDB PostgreSQL版)的一個時空引擎擴展,用于表達和處理地理網格對象。此模型主要提供了地理網格以及地理網格數組類型的空間操作函數,空間關系判斷函數,以及與Ganos中其他數據類型的轉換計算函數

GeomGrid在Ganos中指代地理網格數據類型。地理網格是一種再現地球表面的多邊形網格單元集合,可以用于表示地物在地理空間中的位置信息,融合其他各類時空數據。每個網格單元都會進行編碼,網格與編碼是一一對應的。三維地理網格不只考慮經緯度,還把高度維納入剖分和編碼范圍。

GeomGrid模塊目前涵蓋GeoSOT和H3兩種地理網格。GeoSOT是中國提出的一套地球空間剖分理論,并在此基礎上發(fā)展出的一種離散化、多尺度區(qū)域位置標識體系。H3是Uber研發(fā)的一種覆蓋全球表面的二維地理網格,采用的基本網格是正六邊形。

功能概述

GeomGrid支持地理網格的輸入輸出,空間操作和空間關系判斷:

  • 支持Text、Bytea、Geometry、Meshgeom、Sfmesh、Vomesh等類型與GeomGrid類型的互相轉換。

  • 支持網格層級獲取,網格坐標獲取,父子節(jié)點計算,網格合并和網格剖分等空間查詢操作。

  • 支持geomgrid與geometry、meshgeom、sfmesh、vomesh以及gemogrid類型之間的空間關系判斷操作。

更多內容請參見GeomGrid SQL參考

主要業(yè)務場景

Ganos GeomGrid可支持多種業(yè)務場景,最常見的包括以下幾個:

  • 網格查詢

    給定一個網格或網格數組,查詢是否與數據庫中存儲的網格相交。支持退化網格,即可以通過子網格查出父網格,反之亦然。例如在停放共享單車時,停放區(qū)的網格碼存在數據庫中,而用戶的位置可以轉換為網格碼到庫中搜索,找出最近的停放區(qū)。網格查詢也常用于關聯不同的圖層,把不同圖層的地物轉化為網格存儲,然后根據某一網格查出所有相關圖層的地物。

  • 網格聚合

    物流、快送等行業(yè)中經常以網格為單位統計時空要素。例如船或車的軌跡數據可經過網格聚合生成熱力圖,先把軌跡轉化為網格表達,然后統計每個網格中的軌跡數量作為熱力進行繪制。再例如以街道為單位收集的人口數據可分配至網格進行可視化表達。

    image

  • 網格尋路

    無人機在復雜環(huán)境下可以借助三維網格進行航線規(guī)劃,通過網格設置空間障礙物的穿越開銷,借助路徑規(guī)劃算法可得到網格路徑。

    image

基本構成

概述

基于GeoSOT和H3地理網格的理論框架,在Ganos GeomGrid模塊中,兩種網格分別被實現成GeomGrid數據類型和H3Grid數據類型。

編碼

GeoSOT

GeoSOT將地球通過簡單投影變換到平面,將180°×360° 地球表面空間擴展為512°×512°,并將該空間作為第0級剖分面片,且面片中心與赤道和本初子午線的交點重合。在此基礎上,對第0級剖分面片進行遞歸四叉剖分,直到32級。這樣,整個地球表面經緯度空間在經線方向和緯線方向可嚴格的整型二分,由此將整個地球分割為大到全球、小到厘米級的整度、整分和整秒的層次網格。

image

GeoSOT二維網格最長的編碼位為32位四進制數值編碼。第1-9位是度級網格編碼,第10-15位是分級網格編碼,第16-21位是秒級網格編碼,第22-32位是秒以下網格編碼,編碼長度即為網格層級。

經度和緯度均采用A°B′C.D″的表達形式,將度由十進制數轉換成8bit的二進制數A2;將分由十進制數轉換成6bit的二進制數B2;將秒由十進制數轉換成6bit的二進制數C2;將秒的小數部分由十進制數轉換成11bit的二進制數D2;將二進制數A2、B2、C2 以及D2順次拼接為31bit的二進制數。將緯度前置,經度后置,采用莫頓交叉的方式生成62位的混合代碼。在混合代碼前加上G0、G1、G2或G3即可得到網格代碼。G0對應東北半球,G1對應西北半球,G2對應東南半球,G3對應西南半球。

GeoSOT三維網格在二維網格的基礎上增加了高度域。為保證高度域的劃分與經緯度一致,對應地表1o 網格,地面向上延伸至高空256個網格,向下延伸至地心256個網格。而后對應不同層級進行二分處理得到垂直方向的層數,并以此進行二進制編碼,與經緯度編碼莫頓交叉形成三維網格編碼。

H3

H3采用的投影方式是以二十面體近似地球球體,如下圖所示,這個二十面體的每一個面都是球面三角形,有12個頂點,稱為球形二十面體。

image

如下圖所示,H3在每個三角面上都劃分相同排列方式的六邊形,進而將全球劃分成122個基本單元,然后對每個基本單元再進行六邊形剖分。

image

H3從122個基本單元開始,對每個單元遞歸地細分為7個子單元,如下圖所示,以編號為20的基本單元為例進行分解。

image

H3的編碼值最多占63個比特位,可以用一個長整型表示,通常序列化為十六進制字符串。H3編碼的位布局提供了一個相對緊湊的結構,用于存儲有關給定索引的信息并定義其地理位置,如下圖所示。

image

索引

索引通過將數據組織到搜索樹中來加速搜索,避免大數據量時全局“順序掃描”帶來的延遲。GeomGrid模塊適用的索引主要包括以下幾種:

索引名稱

索引簡介

索引特點

Btree

Btree索引作用于地理網格類型,通過對網格編碼的大小比對進行查找。

Btree是數據庫最通用的索引方法,可以加速的查詢類型也最多。

GiST

GiST索引作用于地理網格類型,提供地理網格外包框的相交和包含查詢。

GiST此處實現Rtree的結構,對于網格空間查詢效率很高。

GridGin

GridGin索引拓展了Gin索引,可作用于地理網格類型和地理網格數組類型,提供了相交和包含關系判斷,并進行了優(yōu)化處理。

GridGin支持退化網格查詢,并可以加速網格聚合計算。

快速入門

簡介

快速入門文檔幫助用戶快速理解 Ganos GeomGrid 引擎的基本用法,包括擴展創(chuàng)建、建表、插入數據、計算網格碼、創(chuàng)建索引、查詢等內容。

語法說明

  • 創(chuàng)建擴展。

    CREATE EXTENSION Ganos_GeomGrid CASCADE;
    說明

    建議將擴展安裝在public模式下,避免權限問題。

    CREATE extension ganos_geometry WITH schema public cascade;
  • GeoSOT網格操作。

    • 創(chuàng)建具有網格碼的表。

       -- 可以為幾何
       CREATE TABLE t_grid(id integer,
                           geom geometry,  -- 幾何對象
                           grid1 geomgrid[], -- 網格碼,精度1
                           grid2 geomgrid[], -- 網格碼,精度2
                           grid3 geomgrid[] -- 網格碼,精度3
                          );
    • 插入數據。

       --插入點數據
       INSERT INTO t_grid(id, geom)
       VALUES (1, ST_GeomFromText('POINT(116.31522216796875 39.910277777777778)', 4490)),
              (2, ST_GeomFromText('POINT(116.31522217796875 39.910277776777778)', 4490)),
              (3, ST_GeomFromText('POINT(116.31522217797875 39.910277776787778)', 4490)),
              (4, ST_GeomFromText('POINT(116.31522227796875 39.910277776775778)', 4490));
      
       -- 插入面數據
       INSERT INTO t_grid(id, geom) VALUES(5, 'SRID=4490;POLYGON((-0.08077 -0.02814, 0.0482 -0.03, 0.07426 0.03724, -0.08077 -0.02814))'::geometry);
      
       -- 插入三維數據
       INSERT INTO t_grid(id, geom) VALUES(6, 'SRID=4490;CIRCULARSTRING Z (-63.597471 44.8071 20,-63.597 44.807 0,-63.5974 44.807 40)'::geometry);
    • 計算網格碼。

       -- 創(chuàng)建不同精度的網格碼
       UPDATE t_grid
       SET grid1 = ST_AsGrid(geom, 10),
           grid2 = ST_AsGrid(geom, 15),
           grid3 = ST_AsGrid(geom, 26);
      
       -- 生成退化網格碼
       UPDATE t_grid SET grid1 = st_asgrid(geom, 18, true) WHERE id = 5;
      
       -- 生成三維網格碼
       UPDATE t_grid SET grid1 = st_as3dgrid(geom, 25) WHERE id=6;
    • 對網格碼創(chuàng)建索引。

       -- 針對不同精度的網格碼創(chuàng)建GIN索引
       CREATE INDEX idx_grid_gin1
       ON t_grid
       USING GIN(grid1);
      
       CREATE INDEX idx_grid_gin2
       ON t_grid
       USING GIN(grid2);
      
       CREATE INDEX idx_grid_gin3
       ON t_grid
       USING GIN(grid3);
    • 查詢。

       -- 完全在某個網格中
       SELECT id
       FROM t_grid
       WHERE grid2 = ARRAY[ST_GridFromText('G001310322230230')];
      
       -- 和某個網格相交
       SELECT id
       FROM t_grid
       WHERE grid3 @> ARRAY[ST_GridFromText('G00131032223023031031033223')];
      
       -- 和某些網格相交
       SELECT id
       FROM t_grid
       WHERE grid3 && ARRAY[ST_GridFromText('G00131032223023031031211001'),
                                ST_GridFromText('G00131032223023031031211111')];
      
       -- 和某個幾何對象在網格上相交
       SELECT id
       FROM t_grid
       WHERE grid3 &&
       ST_AsGrid(
         ST_GeomFromText('LINESTRING(116.31522216796875 39.910277777777778, 116.31522217797875 39.910277776787778)', 4490), 26);
  • H3網格操作。

    • 建表。

       CREATE TABLE h3_grid(
        id integer,
        geom geometry,  -- 幾何對象
        h3 h3grid[]     -- H3對象類型
       );
    • 插入數據。

       INSERT INTO h3_grid VALUES (1, 'POINT(102.5 25.7)'::geometry);
       INSERT INTO h3_grid VALUES (2, 'POLYGON((-0.08077 -0.02814, 0.0482 -0.03, 0.07426 0.03724, -0.08077 -0.02814)'::geometry);
    • 計算H3網格碼。

       -- 普通網格碼
       UPDATE h3_grid SET h3 = ST_AsH3Grid(geom, 7);
      
       -- 退化網格碼
       UPDATE h3_grid SET h3 = ST_AsH3Grid(geom, 7, true);
    • 建立索引。

      CREATE INDEX h3_grid_btree ON h3_grid(h3);
    • 查詢。

       -- 顯示H3編碼
       SELECT st_astext(h3[1]) FROM h3_grid;
      
       -- 搜索
       SELECT * FROM h3_grid WHERE h3 > ARRAY[ST_H3FromText('884a126689fffff')];
  • 刪除擴展(可選)。

    DROP EXTENSION Ganos_GeomGrid CASCADE;

SQL參考

詳細SQL手冊請參見GeomGrid SQL參考