动态

详情 返回 返回

PostGIS 介紹(1)--數據管理 - 动态 详情

PostGIS 是 PostgreSQL 的擴展,允許將 GIS(地理信息系統)對象存儲在數據庫中。 PostGIS 支持基於 GiST 的 R 樹空間索引,並可以分析和處理 GIS 對象;本文主要介紹 PostGIS 的數據管理。

1、空間數據模型

1.1、OGC 幾何

開放地理空間聯盟(OGC)制定了簡單要素訪問標準(SFA),為地理空間數據提供模型。它定義了基本的空間類型幾何,以及操作和轉換幾何值以執行空間分析任務的操作。PostGIS 將 OGC 幾何模型實現為 PostgreSQL 數據類型 geometry 和 geography。

幾何在二維笛卡爾平面中建模形狀。多面體表面、三角形和 TIN 類型也可以表示三維空間中的形狀。形狀的大小和位置由其座標指定。每個座標都有一個 X 和 Y 縱座標值,用於確定其在平面中的位置。形狀由點或線段構成,點由單個座標指定,線段由兩個座標指定。

座標可以包含可選的 Z 和 M 縱座標值。Z 縱座標通常用於表示高程。M 縱座標包含一個度量值,可以表示時間或距離。如果幾何值中存在 Z 或 M 值,則必須為幾何中的每個點定義它們。如果幾何具有 Z 或 M 縱座標,則座標維度為 3D;如果同時具有 Z 和 M,則座標維度為 4D。

幾何值與一個空間參考系統相關聯,該系統指示它嵌入的座標系。空間參考系統由幾何 SRID 編號標識。X 軸和 Y 軸的單位由空間參考系統確定。在平面參考系統中,X 和 Y 座標通常表示東向和北向,而在大地系統中,它們表示經度和緯度。SRID 0 表示一個無限笛卡爾平面,其軸未分配任何單位。

幾何維度是幾何類型的一個屬性。點類型的維度為 0,線性類型的維度為 1,多邊形類型的維度為 2。集合的維度是最大元素維度。

1.1.1、點

點是 0 維幾何,表示座標空間中的單個位置。

POINT (1 2)
POINT Z (1 2 3)
POINT ZM (1 2 3 4)

1.1.2、線串

線串是由連續的線段序列形成的 1 維線。每個線段由兩個點定義,一個線段的端點形成下一個線段的起點。OGC 有效的線串具有零個或兩個或多個點,但 PostGIS 也允許單點線串。線串可能會自相交。如果線串的起點和終點相同,則該線串是閉合的。如果線串不自相交,則該線串是簡單的。

LINESTRING (1 2, 3 4, 5 6)

1.1.3、線性環

線性環是既閉合又簡單的線串。第一個點和最後一個點必須相等,並且線不能自相交。

LINEARRING (0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0)

1.1.4、多邊形

多邊形是由外部邊界(外殼)和零個或多個內部邊界(孔)分隔的二維平面區域。每個邊界都是一個線性環。

POLYGON ((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

1.1.5、多點

多點是點的集合。

MULTIPOINT ( (0 0), (1 2) )

1.1.6、多線串

多線串是線串的集合。如果其每個元素都閉合,則多線串是閉合的。

MULTILINESTRING ( (0 0,1 1,1 2), (2 3,3 2,5 4) )

1.1.7、多多邊形

多多邊形是不重疊、不相鄰的多邊形的集合。集合中的多邊形只能在有限數量的點上接觸。

MULTIPOLYGON (((1 5, 5 5, 5 1, 1 1, 1 5)), ((6 5, 9 1, 6 1, 6 5)))

1.1.8、幾何集合

幾何集合是幾何的異構(混合)集合。

GEOMETRYCOLLECTION ( POINT(2 3), LINESTRING(2 3, 3 4))

1.1.9、多面體表面

多面體表面是共享一些邊的連續的面片或刻面的集合。每個面片都是一個平面多邊形。如果多邊形座標具有 Z 縱座標,則該表面是三維的。

POLYHEDRALSURFACE Z (
  ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
  ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
  ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
  ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
  ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
  ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )

1.1.10、三角形

三角形是由三個不同的非共線頂點定義的多邊形。由於三角形是多邊形,因此由四個座標指定,第一個座標和第四個座標相等。

TRIANGLE ((0 0, 0 9, 9 0, 0 0))

1.1.11、TIN

TIN 是表示 不規則三角網 的不重疊的 三角形 的集合。

TIN Z ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )

1.2、SQL/MM 第 3 部分 - 曲線

ISO/IEC 13249-3 SQL 多媒體 - 空間標準(SQL/MM)擴展了 OGC SFA,以定義包含具有圓弧的曲線的幾何子類型。SQL/MM 類型支持 3DM、3DZ 和 4D 座標。

1.2.1、圓弧串

圓弧串是基本曲線類型,類似於線性世界中的線串。單個弧段由三個點指定:起點和終點(第一個和第三個)以及弧上的一些其他點。要指定一個閉合的圓,起點和終點是相同的,中間點是圓直徑上的相反點(即弧的中心)。在弧的序列中,前一個弧的端點是下一個弧的起點,就像線串的段一樣。這意味着圓弧串必須具有大於 1 的奇數個點。

CIRCULARSTRING(0 0, 1 1, 1 0)
CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0)

1.2.2、複合曲線

複合曲線是可能包含圓弧段和線段的單條連續曲線。這意味着除了具有格式正確的組件外,每個組件(最後一個除外)的端點必須與後續組件的起點重合。

COMPOUNDCURVE( CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))

1.2.3、曲線多邊形

曲線多邊形類似於多邊形,具有外環和零個或多個內環。不同之處在於環可以是圓弧串或複合曲線以及線串。

CURVEPOLYGON(
  COMPOUNDCURVE( CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),
                 (4 3, 4 5, 1 4, 0 0)),
  CIRCULARSTRING(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) )

1.2.4、多曲線

多曲線是曲線的集合,可以包括線串、圓弧串或複合曲線。

MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4))

1.2.5、多表面

多表面是表面的集合,可以是(線性)多邊形或曲線多邊形。

MULTISURFACE(
  CURVEPOLYGON(
    CIRCULARSTRING( 0 0, 4 0, 4 4, 0 4, 0 0),
    (1 1, 3 3, 3 1, 1 1)),
  ((10 10, 14 12, 11 10, 10 10), (11 11, 11.5 11, 11 11.5, 11 11)))

1.3、WKT 和 WKB

OGC SFA 規範定義了兩種用於外部表示幾何值的格式:眾所周知的文本 (WKT) 和眾所周知的二進制 (WKB)。WKT 和 WKB 都包含有關對象類型和定義它的座標的信息。

眾所周知的文本 (WKT) 提供了空間數據的標準文本表示形式,如:

POINT(0 0)
POINT Z (0 0 0)
LINESTRING(0 0,1 1,1 2)
LINESTRING EMPTY

WKT 的輸入和輸出由 ST_GeomFromText 和 ST_AsText 函數提供,如:

SELECT ST_GeomFromText('POINT(1 1)', 4326);
SELECT ST_AsText(ST_GeomFromText('POINT(1 1)', 4326));

眾所周知的二進制 (WKB) 將空間數據以二進制數據(字節數組)的形式提供了一種可移植的、全精度的表示形式,如:

WKT: POINT(1 1)
WKB: 0101000000000000000000F03F000000000000F03F

WKT: LINESTRING (2 2, 9 9)
WKB: 0102000000020000000000000000000040000000000000004000000000000022400000000000002240

WKB 的輸入和輸出由 ST_GeomFromWKB 和 ST_AsBinary 函數提供,如:

SELECT ST_GeomFromWKB('\x0101000000000000000000F03F000000000000F03F', 4326);
SELECT ST_AsBinary(ST_GeomFromWKB('\x0101000000000000000000F03F000000000000F03F', 4326));

2、幾何數據類型

2.1、PostGIS EWKB 和 EWKT

OGC SFA 規範最初僅支持 2D 幾何圖形,並且幾何 SRID 不包含在輸入/輸出表示形式中。OGC SFA 規範 1.2.1(與 ISO 19125 標準一致)增加了對 3D (XYZ) 和測量 (XYM 和 XYZM) 座標的支持,但仍然不包括 SRID 值。

由於這些限制,PostGIS 定義了擴展的 EWKB 和 EWKT 格式。它們提供 3D (XYZ 和 XYM) 和 4D (XYZM) 座標支持,幷包含 SRID 信息。包含所有幾何信息允許 PostGIS 將 EWKB 用作記錄的格式(例如,在 DUMP 文件中)。

EWKB 和 EWKT 用於 PostGIS 數據對象的“規範形式”。對於輸入,二進制數據的規範形式為 EWKB,而對於文本數據,則接受 EWKB 或 EWKT。這允許通過使用 ::geometry 將 HEXEWKB 或 EWKT 中的文本值強制轉換為幾何值來創建幾何值。對於輸出,二進制的規範形式是 EWKB,文本的規範形式是 HEXEWKB(十六進制編碼的 EWKB)。

PostGIS EWKT 輸出與 OGC WKT 有一些差異:

A、對於 3DZ 幾何圖形,省略了 Z 限定符
OGC: POINT Z (1 2 3)
EWKT: POINT (1 2 3)

B、對於 3DM 幾何圖形,包括 M 限定符
OGC: POINT M (1 2 3)
EWKT: POINT (1 2 3)

C、對於 4D 幾何圖形,省略了 ZM 限定符
OGC: POINT ZM (1 2 3 4)
EWKT: POINT (1 2 3 4)

空間對象的 EWKT 文本表示形式示例如下:

POINT(0 0 0) -- XYZ
SRID=32632;POINT(0 0) -- 帶有 SRID 的 XY
POINTM(0 0 0) -- XYM
POINT(0 0 0 0) -- XYZM
SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- 帶有 SRID 的 XYM
MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))
POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

EWKT 的輸入和輸出由 ST_GeomFromEWKT 和 ST_AsEWKT 函數提供,如:

SELECT ST_GeomFromEWKT('SRID=4326;POINT(1 1)');

SELECT ST_AsEWKT(ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
SELECT ST_AsEWKT('SRID=4326;POINT(1 1)'::geometry);

EWKB 的輸入和輸出由 ST_GeomFromEWKB 和 ST_AsEWKB 函數提供,如:

SELECT ST_GeomFromEWKB('\x0101000020E6100000000000000000F03F000000000000F03F');
SELECT ST_AsEWKB(ST_GeomFromEWKB('\x0101000020E6100000000000000000F03F000000000000F03F'));

3、使用地理表

PostGIS geography 數據類型為以“地理”座標(有時稱為“大地”座標或“緯度/經度”或“經度/緯度”)表示的空間要素提供原生支持。地理座標是以角度單位(度)表示的球面座標。

PostGIS 幾何數據類型的基礎是一個平面。平面上兩點之間的最短路徑是直線。這意味着使用直線向量和笛卡爾數學計算幾何圖形上的函數(面積、距離、長度、交點等)。這使得它們更易於實現和更快地執行,但也使它們對於地球橢球表面的數據不準確。

PostGIS 地理數據類型基於球面模型。球體上兩點之間的最短路徑是大圓弧。使用球體上的弧線計算地理函數(面積、距離、長度、交點等)。通過考慮世界的橢球形狀,這些函數提供了更準確的結果。

由於底層數學更復雜,因此為地理類型定義的函數比為幾何類型定義的函數少。隨着時間的推移,隨着新算法的添加,地理類型的功能將會擴展。作為一種解決方法,可以在幾何類型和地理類型之間來回轉換。

與幾何數據類型一樣,地理數據通過空間參考系統標識符 (SRID) 與空間參考系統相關聯。spatial_ref_sys 表中定義的任何大地(基於經度/緯度)空間參考系統都可以使用。(

對於所有空間參考系統,測量函數(例如,ST_Distance、ST_Length、ST_Perimeter、ST_Area)返回的單位以及 ST_DWithin 的距離參數的單位均為米。

3.1、創建地理表

地理類型支持兩個可選的類型修飾符:
A、空間類型修飾符限制列中允許的形狀和維度類型。空間類型允許的值為:POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。地理類型不支持曲線、TIN 或 POLYHEDRALSURFACE。該修飾符通過添加後綴來支持座標維度限制:Z、M 和 ZM。例如,修飾符“LINESTRINGM”僅允許具有三個維度的線串,並將第三個維度視為度量。同樣,“POINTZM”需要四維 (XYZM) 數據。
B、SRID 修飾符將空間參考系統 SRID 限制為特定數字。如果省略,則 SRID 默認為 4326 (WGS84 大地),並且所有計算都使用 WGS84 執行。

如:

CREATE TABLE global_points (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    location geography(POINT,4326)
);

創建空間索引的方式與幾何列相同:

CREATE INDEX global_points_gix ON global_points USING GIST ( location );

3.2、使用地理表

可以像插入幾何數據一樣插入地理表中的數據。如果幾何數據具有 SRID 4326,它將自動轉換為地理類型。 EWKT 和 EWKB 格式也可用於指定地理值。如:

INSERT INTO global_points (name, location) VALUES ('Town', 'SRID=4326;POINT(-110 30)');
INSERT INTO global_points (name, location) VALUES ('Forest', 'SRID=4326;POINT(-109 29)');
INSERT INTO global_points (name, location) VALUES ('London', 'SRID=4326;POINT(0 49)');

查詢和測量函數使用米作為單位。因此,距離參數應以米為單位表示,返回值應以米(或面積為平方米)為單位;如:

SELECT name FROM global_points WHERE ST_DWithin(location, 'SRID=4326;POINT(-110 29)'::geography, 1000000);

3.3、何時使用地理數據類型

地理數據類型允許以經度/緯度座標存儲數據,但代價是:GEOGRAPHY 上定義的功能比 GEOMETRY 上的少;那些已定義的功能需要更多的 CPU 時間來執行。

選擇的數據類型應由正在構建的應用程序的預期工作區域決定。數據是跨越全球或大型大陸區域,還是限於州、縣或市?
A、如果數據包含在一個小區域內,選擇合適的投影並使用 GEOMETRY 是最佳解決方案,在性能和可用功能方面都是如此。
B、如果數據是全球性的或覆蓋大陸區域,最好使用 GEOGRAPHY,無需擔心投影細節。
C、如果您不瞭解投影,並且不想了解它們,並且準備接受 GEOGRAPHY 中可用功能的限制,那麼使用 GEOGRAPHY 可能比使用 GEOMETRY 更容易。只需將數據加載為經度/緯度即可。

4、幾何驗證

PostGIS 符合開放地理空間聯盟 (OGC) 的簡單要素規範。該標準定義了幾何圖形簡單和有效的概念。這些定義允許簡單要素幾何模型以一致且明確的方式表示空間對象,從而支持高效計算。(注意:OGC SF 和 SQL/MM 對簡單和有效的定義相同。)

4.1、簡單幾何

簡單幾何是不具有異常幾何點的幾何圖形,例如自相交或自相切。

作為 0 維幾何對象,POINT 本質上是簡單的。
如果不存在兩個座標(POINT)相等(具有相同的座標值),則 MULTIPOINT 是簡單的。
如果 LINESTRING 不兩次通過同一點(端點除外),則它是簡單的。如果簡單 LineString 的端點相同,則稱其為閉合,並稱為線性環。

(a) 和 (c) 是簡單的 LINESTRING。 (b) 和 (d) 不是簡單的。 (c) 是一個閉合的線性環。

僅當 MULTILINESTRING 的所有元素都是簡單的,並且任意兩個元素之間的唯一交點發生在兩個元素的邊界上的點時,該 MULTILINESTRING 才是簡單的。

(e) 和 (f) 是簡單的 MULTILINESTRING。 (g) 不是簡單的。

POLYGON 由線性環組成,因此有效的多邊形幾何始終是簡單的。

要測試幾何是否簡單,可使用 ST_IsSimple 函數:

SELECT
   ST_IsSimple('LINESTRING(0 0, 100 100)') AS straight, --t
   ST_IsSimple('LINESTRING(0 0, 100 100, 100 0, 0 100)') AS crossing --f

通常,PostGIS 函數不要求幾何參數是簡單的。簡單性主要用作定義幾何有效性的基礎。它也是某些類型的空間數據模型的要求(例如,線性網絡通常不允許相交的線)。可以使用 ST_UnaryUnion 使多點和線性幾何簡單化。

4.2、有效幾何

幾何有效性主要適用於二維幾何(POLYGON 和 MULTIPOLYGON)。有效性由多邊形幾何建模平面區域的規則定義。

如果滿足以下條件,則 POLYGON 是有效的:
A、多邊形邊界環(外部外殼環和內部孔環)是簡單的(不交叉或自接觸)。因此,多邊形不能有切割線、尖刺或環路。這意味着多邊形孔必須表示為內部環,而不是通過外部環自接觸(所謂的“反向孔”)。
B、邊界環不交叉
C、邊界環可能會在點處接觸,但只能作為切線(即,而不是在一條線上)
D、內部環包含在外部環中
E、多邊形內部是簡單連接的(即,環的接觸方式不能將多邊形分割成多個部分)

如果滿足以下條件,則 MULTIPOLYGON 是有效的
A、其元素 POLYGON 是有效的
B、元素不重疊(即,它們的內部不得相交)
C、元素僅在點處接觸(即,不沿着一條線)

(n) 是有效的 MULTIPOLYGON。 (o) 和 (p) 是無效的。

這些規則意味着有效的多邊形幾何也是簡單的。

對於線性幾何,唯一的有效性規則是 LINESTRING 必須至少有兩個點並且具有非零長度(或等效地,至少有兩個不同的點)。請注意,非簡單(自相交)線是有效的。

SELECT
   ST_IsValid('LINESTRING(0 0, 1 1)') AS len_nonzero, --t
   ST_IsValid('LINESTRING(0 0, 0 0, 0 0)') AS len_zero, --f
   ST_IsValid('LINESTRING(10 10, 150 150, 180 50, 20 130)') AS self_int --t

POINT 和 MULTIPOINT 幾何沒有有效性規則。

4.3、管理有效性

PostGIS 允許創建和存儲有效和無效的幾何圖形。這允許檢測、標記或修復無效幾何圖形。在某些情況下,OGC 有效性規則比預期的更嚴格(例如,零長度線串和具有反向孔的多邊形)。

要測試幾何圖形是否有效,可使用 ST_IsValid 函數:

SELECT ST_IsValid('POLYGON ((20 180, 180 180, 180 20, 20 20, 20 180))') --t

有關幾何圖形無效的性質和位置的信息,可使用 ST_IsValidDetail 函數獲取:

SELECT valid, reason, ST_AsText(location) AS location
    FROM ST_IsValidDetail('POLYGON ((20 20, 120 190, 50 190, 170 50, 20 20))') AS t;

在某些情況下,需要自動更正無效的幾何圖形,可使用 ST_MakeValid 函數來實現。

5、空間參考系統

空間參考系統 (SRS)(也稱為座標參考系統 (CRS))定義瞭如何將幾何圖形引用到地球表面的位置。SRS 有三種類型:
A、大地 SRS 使用角度座標(經度和緯度),直接映射到地球表面。
B、投影 SRS 使用數學投影變換將球形地球的表面“展平”到一個平面上。它以允許直接測量諸如距離、面積和角度等量的方式分配位置座標。座標系是笛卡爾座標系,這意味着它有一個定義的原點和兩個垂直軸(通常朝向北方和東方)。每個投影 SRS 使用聲明的長度單位(通常是米或英尺)。為了避免失真並保持在定義的座標範圍內,投影 SRS 的適用區域可能會受到限制。
C、局部 SRS 是一個未參考到地球表面的笛卡爾座標系。在 PostGIS 中,這由 SRID 值 0 指定。

有許多不同的空間參考系統在使用。常見的 SRS 在歐洲石油勘測集團的 EPSG 數據庫中進行了標準化。為了方便起見,PostGIS(和許多其他空間系統)使用一個名為 SRID 的整數標識符來引用 SRS 定義。

幾何圖形通過其 SRID 值與空間參考系統相關聯,該值可以通過 ST_SRID 訪問。可以使用 ST_SetSRID 為幾何圖形分配 SRID。一些幾何圖形構造函數允許提供 SRID(例如 ST_Point 和 ST_MakeEnvelope)。EWKT 格式支持帶有 SRID=n; 前綴的 SRID。

處理成對幾何圖形的空間函數(例如疊加 和 關係 函數)要求輸入幾何圖形位於同一空間參考系統中(具有相同的 SRID)。可以使用 ST_Transform 和 ST_TransformPipeline 將幾何圖形數據轉換為不同的空間參考系統。從函數返回的幾何圖形具有與輸入幾何圖形相同的 SRS。

5.1、SPATIAL_REF_SYS 表

PostGIS 使用的 SPATIAL_REF_SYS 表是一個符合 OGC 標準的數據庫表,用於定義可用的空間參考系統。它保存了座標系統的數字 SRID 和文本描述。

一些常用的空間參考系統包括:4326 - WGS 84 經緯度、4269 - NAD 83 經緯度、3395 - WGS 84 世界墨卡託、2163 - 美國國家地圖集等,以及 60 個 WGS84 UTM 區域。UTM 區域是最適合測量的區域之一,但僅覆蓋 6 度區域。

6、空間表

6.1、創建空間表

geometry 類型支持兩個可選的類型修飾符:
A、空間類型修飾符限制列中允許的形狀和維度類型。該值可以是任何受支持的幾何子類型(例如,POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION 等)。該修飾符通過添加後綴來支持座標維度限制:Z、M 和 ZM。例如,修飾符 'LINESTRINGM' 僅允許具有三個維度的線串,並將第三個維度視為度量。類似地,'POINTZM' 要求四維 (XYZM) 數據。
B、SRID 修飾符將空間參考系統 SRID 限制為特定數字。如果省略,SRID 默認為 0。

如:

CREATE TABLE roads (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    geom geometry(POLYGON, 4326)
)

6.2、GEOMETRY_COLUMNS 視圖

OGC SQL 簡單要素規範定義了 GEOMETRY_COLUMNS 元數據表來描述幾何圖形表的結構。在 PostGIS 中,geometry_columns 是一個從數據庫系統目錄表中讀取的視圖。這確保空間元數據信息始終與當前定義的表和視圖保持一致。

7、空間索引

通常用於屬性數據的 B 樹索引方法對於空間數據不是很有效,因為它僅支持存儲和查詢單維數據。諸如幾何(具有 2 個或更多維度)之類的數據需要支持跨所有數據維度進行範圍查詢的索引方法。PostgreSQL 用於空間數據處理的關鍵優勢之一是,它提供了多種非常適合多維數據的索引方法:GiST、BRIN 和 SP-GiST 索引。

A、GiST(廣義搜索樹) 索引將數據分解為“一邊的事物”、“重疊的事物”、“內部的事物”,並且可以用於各種數據類型,包括 GIS 數據。PostGIS 使用在 GiST 之上實現的 R 樹索引來索引空間數據。GiST 是最常用且用途最廣泛的空間索引方法,可提供非常好的查詢性能。
B、BRIN(塊範圍索引)索引通過總結表記錄的空間範圍來操作。搜索是通過掃描範圍來完成的。BRIN 僅適用於某些類型的數據(空間排序、不頻繁更新或不更新)。但是,它提供更快的索引創建時間和更小的索引大小。
C、SP-GiST(空間分區廣義搜索樹) 是一種通用索引方法,支持分區搜索樹,如四叉樹、k-d 樹和基數樹。

空間索引僅存儲幾何體的邊界框。空間查詢使用索引作為主過濾器,以快速確定可能匹配查詢條件的一組幾何體。

7.1、GiST 索引

GiST 代表“廣義搜索樹”,它是多維數據的一種通用索引形式。PostGIS 使用在 GiST 之上實現的 R 樹索引來索引空間數據。GiST 是最常用且用途最廣泛的空間索引方法,可提供非常好的查詢性能。GiST 的其他實現用於加速搜索各種不規則數據結構(整數數組、光譜數據等),這些數據結構不適合正常的 B 樹索引。

在 geometry 列上構建 GiST 索引的語法如下:

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] )

7.2、BRIN 索引

BRIN 代表“塊範圍索引”。它是 PostgreSQL 9.5 中引入的通用索引方法。BRIN 是一種有損索引方法,這意味着需要進行二次檢查以確認記錄是否與給定的搜索條件匹配(所有提供的空間索引都是這種情況)。它提供更快的索引創建和更小的索引大小,以及合理的讀取性能。其主要目的是支持對與表中物理位置相關的列的非常大的表進行索引。除了空間索引外,BRIN 還可以加速對各種屬性數據結構(整數、數組等)的搜索。

在 geometry 列上構建 BRIN 索引的語法為:

CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geome_col] )

7.3、SP-GiST 索引

SP-GiST 代表“空間分割廣義搜索樹”,它是一種用於多維數據類型的通用索引形式,支持分區搜索樹,例如四叉樹、k-d 樹和基數樹(trie)。這些數據結構的共同特點是它們重複地將搜索空間劃分為大小不必相等的多個分區。除了空間索引之外,SP-GiST 還用於加速許多類型數據的搜索,例如電話路由、IP 路由、子字符串搜索等。

在 geometry 列上構建 SP-GiST 索引的語法為:

CREATE INDEX [indexname] ON [tablename] USING SPGIST ( [geometryfield] )

 

 

 

轉自:https://postgis.net.cn/docs/manual-3.5/using_postgis_dbmanagement.html。

user avatar jihu_gitlab 头像 chuck1sn 头像 Jingkunliu 头像 wy123 头像
点赞 4 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.