PostGIS是資料庫PostgreSQL的空間擴充,PostGIS可以提供空間對象、空間索引、空間操作函數和空間操作符等空間資訊服務功能。本文為您介紹PostGIS在Hologres中的使用方法。
引擎支援說明
Hologres V1.3及以上版本中,大部分PostGIS函數由Hologres自研引擎HQE支援,效能更優;Hologres V1.3以下版本由PQE引擎支援,效能稍弱。各函數當前的引擎歸屬請參見空間函數中各函數表的支援的引擎列。
安裝與卸載PostGIS
在使用PostGIS之前,需要Superuser在DB內執行以下語句安裝擴充包才可以正常使用。一個DB只需執行一次即可,如果建立新的DB,還需要再次執行如下語句。
-- 載入PostGIS外掛程式,顯式指定安裝到public schema
CREATE EXTENSION IF NOT EXISTS postgis SCHEMA public;
不支援將postgis extension建立在pg_catalog schema下。
在安裝完成後,您可以執行如下SQL語句查看當前PostGIS版本。Hologres中目前使用的PostGIS版本是3.0.0。
SELECT public.postgis_full_version();
postgis_full_version()是public schema下的plpgsql函數。Hologres預設的search_path已包含public,可以直接調用;如果當前會話的search_path不包含public,則需要加上public.首碼,否則會報function postgis_full_version() does not exist。為保證在任意search_path下均可執行,本文樣本統一使用public.首碼。
卸載PostGIS
若不再使用PostGIS,您可執行如下命令卸載PostGIS外掛程式。
DROP EXTENSION postgis;
如果資料庫中存在依賴geometry、geography類型的對象(例如按照建立並查詢包含空間資料類型的表建立的表),直接執行上述命令會報錯cannot drop extension postgis because other objects depend on it。此時請按以下步驟先清理依賴對象,再卸載外掛程式。
-
查詢仍依賴geometry、geography類型的對象及其所在列。
SELECT n.nspname AS schema_name, c.relname AS object_name, a.attname AS column_name, t.typname FROM pg_attribute a JOIN pg_class c ON c.oid = a.attrelid JOIN pg_type t ON t.oid = a.atttypid JOIN pg_namespace n ON n.oid = c.relnamespace WHERE t.typname IN ('geometry', 'geography') AND c.relkind IN ('r', 'p', 'm', 'f') AND a.attnum > 0 AND NOT a.attisdropped AND n.nspname NOT LIKE 'pg_%'; -
刪除上一步查詢到的表,或刪除表中的空間資料類型列。
DROP TABLE <TABLE_NAME>;說明若資料庫已開啟表資源回收筒(Hologres V3.1及以上版本預設開啟),
DROP TABLE刪除的表會進入資源回收筒,需繼續執行下一步清空資源回收筒。您也可以執行DROP TABLE <TABLE_NAME> FORCE;使表不進入資源回收筒,從而跳過下一步。關於表資源回收筒的更多資訊,請參見表資源回收筒。 -
清空資源回收筒。資源回收筒中的表仍持有對空間資料類型的依賴,需清空資源回收筒才能釋放該依賴。
CALL hologres.hg_purge_all_tables();重要hg_purge_all_tables()會清理當前資料庫資源回收筒中的所有表,清理後無法恢複,執行前請確認資源回收筒中沒有需要保留的表。該命令需由當前執行個體的Superuser執行。 -
卸載PostGIS外掛程式。
DROP EXTENSION postgis;
請按上述步驟清理依賴對象後再卸載,不推薦使用DROP EXTENSION <EXTENSION_NAME> CASCADE;命令級聯卸載Extension。CASCADE(級聯)刪除命令不僅會刪除指定擴充本身,還會一併清除擴充資料(例如PostGIS資料、RoaringBitmap資料、Proxima資料、Binlog資料、BSI資料等)以及依賴該擴充的對象(包括中繼資料、表、視圖、Server資料等)。
表衝突處理
執行CREATE EXTENSION postgis時如果報錯relation spatial_ref_sys already exists,說明資料庫中存在歷史安裝殘留的系統資料表。正常執行DROP EXTENSION postgis卸載後重裝不會產生殘留,該報錯通常出現在從其他資料庫遷移匯入、或此前手工建立過同名表的情境。按以下步驟處理:
-
卸載已部分安裝的擴充。
DROP EXTENSION IF EXISTS postgis; -
清理殘留的系統資料表。執行前請確認該表確為安裝殘留而非業務表。
DROP TABLE IF EXISTS spatial_ref_sys CASCADE; -
重新安裝PostGIS擴充。
CREATE EXTENSION IF NOT EXISTS postgis SCHEMA public; -
驗證安裝。
SELECT public.postgis_full_version();
建立並查詢包含空間資料類型的表
目前在Hologres中使用PostGIS,支援兩類空間資料類型,即幾何類型(Geometry Type)和地理類型(Geography Type)。
在實際使用過程中,幾何類型(Geometry Type)是使用較頻繁的類型,如下內容將以幾何類型為例,指導您建立包含Geometry資料類型的表並進行典型空間查詢。更多關於地理類型(Geography Type)的參數和使用說明,請參見PostGIS Geography Type。
-
建立包含Geometry資料類型的表
說明建立包含幾何類型的表時,您可以指定建立的幾何體類型。包括Point、MultiPoint、Linestring、MultiLinestring、Polygon、MultiPolygon等。
-
建立不指定幾何類型的表。
CREATE TABLE holo_gis_1 ( id INT, geom geometry, PRIMARY KEY (id)) ;以上樣本中,建立了包含幾何類型的表,但是該表中不指定具體的幾何類型。
-
建立指定幾何體類型和SRID的表。
CREATE TABLE holo_gis_2 ( id INT, geom geometry(point, 4326), PRIMARY KEY (id)) ;以上樣本中,Geometry類型指定為Point,SRID為4326,SRID不指定預設為0。插入資料和查詢條件中幾何體的SRID必須與列定義的SRID一致,否則會報錯,例如
Geometry SRID (0) does not match column SRID (4326)或Operation on mixed SRID geometries。更多關於SRID釋義,請參見PostGIS官方文檔。
-
-
向表中插入資料
您可以通過如下方式向表中插入資料,其中,關於空間函數的使用說明,請參見空間函數。關於SRID釋義,請參見PostGIS官方文檔。
-
不指定SRID值。
INSERT INTO holo_gis_1 VALUES (1, ST_GeomFromText('point(116 39)')); -
指定SRID值。
INSERT INTO holo_gis_2 VALUES (1, ST_GeomFromText('point(116 39)', 4326));
-
-
執行資料查詢
您可以在建立表並插入資料後,執行矩形範圍查詢和多邊形相交判定兩種典型情境的查詢。如下樣本中,更多關於空間函數的使用說明,請參見空間函數。
-
矩形範圍查詢
-
不指定SRID值。
SELECT st_astext(geom) FROM holo_gis_1 WHERE ST_Covers(ST_MakeBox2D(ST_Point(116, 39),ST_Point(117, 40)), geom);返回結果如下:
st_astext ------------- POINT(116 39) -
指定SRID值。
SELECT st_astext(geom) FROM holo_gis_2 WHERE ST_Covers(ST_SetSRID(ST_MakeBox2D(ST_Point(116, 39),ST_Point(117, 40)), 4326), geom);返回結果如下:
st_astext ------------- POINT(116 39)
說明資料量較大時,建議先用外包框運算子
&&做粗過濾,再執行精確的空間關係判斷,以減少參與精確計算的資料量。&&由HQE支援,開銷低於ST_Intersects、ST_Covers等需要下推至PQE的拓撲判斷函數。樣本如下:SELECT st_astext(geom) FROM holo_gis_1 WHERE geom && ST_MakeBox2D(ST_Point(116, 39), ST_Point(117, 40)) AND ST_Intersects(ST_GeomFromText('POLYGON((116 39,117 39,117 40,116 40,116 39))'), geom);如果只需要矩形範圍過濾、不需要精確的拓撲語義,直接使用
geom && ST_MakeBox2D(...)即可。如果列定義了SRID,需使用ST_SetSRID為外包框設定相同的SRID,否則會報Operation on mixed SRID geometries。 -
-
多邊形相交判定(在內部或在邊界上)
-
不指定SRID值。
SELECT st_astext(geom) FROM holo_gis_1 WHERE ST_Intersects(ST_GeomFromText('POLYGON((116 39,117 39,117 40,116 40,116 39))'), geom);返回結果如下:
st_astext ------------- POINT(116 39) -
指定SRID值。
SELECT st_astext(geom) FROM holo_gis_2 WHERE ST_Intersects(ST_SetSRID(ST_GeomFromText('POLYGON((116 39,117 39,117 40,116 40,116 39))'), 4326), geom);返回結果如下:
st_astext ------------- POINT(116 39)
-
-
空間函數
PostGIS為您提供了一些空間函數,每種函數可以將一種資料類型的值轉換為另一種類型。各類空間函數的說明請參見以下各表,關於函數文法,部分參數說明如下:
-
geom:表格中涉及的geom均表示一個GEOMETRY類型的值,或一個計算結果為GEOMETRY類型的運算式。
-
precision:表示一個INTEGER類型的值,用於控制座標的輸出精度。該參數在不同函數中的名稱、語義和預設值不同:
-
ST_AsText(geom [, precision]):precision為有效數字位元,未指定時預設為15。 -
ST_AsGeoJSON(geom [, maxdecimaldigits]):該參數為最大小數位元,未指定時預設為9。如果需要保留更高精度,請顯式指定該參數,否則匯出結果會丟失精度。
建議取值範圍為1~20。超出該範圍不會報錯,但輸出位元沒有實際意義(雙精確度浮點數的有效位約為15~17位)。
-
-
index:表格中涉及的index為索引,均表示一個INTEGER類型的值。
-
srid:表格中涉及srid均表示一個INTEGER類型的值,它是空間參考標識符SRID。
更多關於空間函數的說明,請參見PostGIS官方文檔。
-
支援的引擎列僅標註函數當前的引擎歸屬(HQE或PQE),標註基於Hologres V4.2版本實測。函數的引擎歸屬會隨版本演化,請以執行個體實際執行計畫(
EXPLAIN結果中是否出現PQE節點)為準。各版本的整體引擎支援情況,請參見引擎支援說明。 -
以下各表僅列出各函數的常用簽名。部分函數還支援其他重載形式(例如
ST_MakeLine支援傳入幾何體數組、ST_AddPoint支援指定插入位置),完整的重載列表,以及本文樣本中出現但未列入以下各表的函數(例如ST_MakeBox2D),請參見PostGIS官方文檔。
-
Geometry Constructors函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_LineFromMultiPoint
ST_LineFromMultiPoint(geom)
GEOMETRY
ST_LineFromMultiPoint 返回輸入多點幾何體中的串線。點的順序將保留。返回的幾何體的空間參考系統標識符(SRID)與輸入幾何體的相同。
HQE
ST_MakeEnvelope
ST_MakeEnvelope(xmin, ymin, xmax, ymax [, srid])
子類型為POLYGON的GEOMETRY。
返回由輸入座標指定的矩形範圍對應的多邊形,輸入座標分別指定矩形的左下角和右上方。即使輸入座標退化為一個點或一條線,傳回值仍為POLYGON。如果指定了SRID,返回幾何體的空間參考系統標識符(SRID)將設定為該值,未指定時預設為0。
HQE
ST_MakeLine
ST_MakeLine(geom1, geom2)
子類型 LINESTRING的GEOMETRY。
ST_MakeLine從輸入幾何體建立串線。
HQE
ST_MakePoint
ST_MakePoint(x, y)
子類型POINT的 GEOMETRY。
ST_MakePoint返回其座標值為輸入值的點幾何體。
HQE
ST_Point
ST_Point(x, y)
子類型POINT的 GEOMETRY。
ST_Point從輸入座標值返回點幾何體。
HQE
ST_Polygon
ST_Polygon(linestring, srid)
子類型POLYGON的GEOMETRY。
ST_Polygon返回一個多邊形幾何體,其外部環形是輸入串線,其值是空間參考系統標識符(SRID)的輸入值。
HQE
-
Geometry Accessors函數
函數
函數文法
傳回型別
說明
支援的引擎
GeometryType
GeometryType(geom)
TEXT
以字串形式返回輸入幾何體的子類型,傳回值為不帶首碼的大寫形式,例如POINT、POLYGON。
HQE
ST_Boundary
ST_Boundary(geom)
GEOMETRY
ST_Boundary返回輸入幾何體的邊界,如下所示:如果輸入幾何為空白(即不包含點),則按原樣返回。如果輸入幾何是點或非空多點,則返回空幾何集合。如果輸入是串線或多串線,則返回包含邊界上所有點的多點,多點可能為空白。如果輸入是一個沒有任何內環的面,則返回一個表示其邊界的閉合串線。如果輸入是具有內環的面,或者是多面,則返回多串線。多串線包含面積幾何中所有環的所有邊界作為閉合串線。
HQE
ST_Dimension
ST_Dimension(geom)
INTEGER
ST_Dimension 返回輸入幾何體的固有維度。固有維度是幾何體中定義的子類型的維度值。
HQE
ST_Envelope
ST_Envelope(geom)
GEOMETRY
ST_Envelope 返回輸入幾何體的最小邊界框,如下所示:如果輸入幾何體為空白,則返回的幾何體是輸入幾何體的副本。如果輸入幾何體的最小邊界框退化為一個點,則返回的幾何體是一個點。如果輸入幾何體的最小邊界框是一維的,則返回兩點串線。如果上述條件都不成立,則函數將返回一個順時針方向的多邊形,其頂點為最小邊界框的角。返回的幾何體的空間參考系統標識符(SRID)與輸入幾何體的相同。
HQE
ST_ExteriorRing
ST_ExteriorRing(geom)
子類型 LINESTRING的GEOMETRY。
ST_ExteriorRing返回一個表示輸入面外環的閉合串線。
HQE
ST_GeometryN
ST_GeometryN(geom, index)
GEOMETRY
ST_GeometryN返回由輸入幾何體的輸入索引指向的幾何體,如下所示:當輸入是點、串線或多邊形時,如果索引等於一 (1),則按原樣返回幾何體;如果索引不是一 (1),則返回 null。如果輸入是多點、多串線、多邊形或幾何體集合,則返回由輸入索引指向的點、串線、多邊形或幾何體集合。索引是從 1 開始的。結果的空間參考系統標識符 (SRID) 與輸入幾何體的相同。
HQE
ST_GeometryType
ST_GeometryType(geom)
TEXT
以字串形式返回輸入幾何體的子類型,傳回值帶ST_首碼,例如ST_Point、ST_Polygon。與GeometryType的區別僅在於傳回值格式,編寫等值判斷條件時請注意區分。
HQE
ST_InteriorRingN
ST_InteriorRingN(geom, index)
子類型LINESTRING的GEOMETRY。
ST_InteriorRingN返回與索引位置處輸入多邊形的內環相對應的閉合串線。
HQE
ST_IsClosed
ST_IsClosed(geom)
BOOLEAN
如果輸入幾何體已閉合,則 ST_IsClosed 返回 true。以下規則定義閉合的幾何體:輸入的幾何體是一個點或一個多點。輸入幾何體是一個串線,並且該串線的起點和終點是重合的。輸入幾何體是一個非空的多串線,並且其所有串線均已閉合。輸入幾何體是一個非空多邊形,所有多邊形的環都是非空的,並且所有環的起點和終點都是重合的。輸入幾何體是一個非空的多邊形集合,並且其所有多邊形均已閉合。輸入幾何體是一個非空幾何體集合,並且其所有組件均已閉合。
HQE
ST_IsCollection
ST_IsCollection(geom)
BOOLEAN
如果輸入幾何體為下列子類型之一,則 ST_IsCollection返回true:GEOMETRYCOLLECTION、MULTIPOINT、MULTILINESTRING或者MULTIPOLYGON。
HQE
ST_IsEmpty
ST_IsEmpty(geom)
BOOLEAN
如果輸入幾何體是空的,則ST_IsEmpty返回true。如果一個幾何體不包含點,則該幾何體為空白。
HQE
ST_IsPolygonCW
ST_IsPolygonCW(geom)
BOOLEAN
如果輸入多邊形的外環為順時針方向且所有內環為逆時針方向,則返回true;如果外環與內環方向相同,則返回false。如果輸入幾何體是點、串線、多點或多串線,則返回true。對於幾何體集合,如果集合中的所有多邊形均滿足上述條件,則返回true。對於空多邊形(
POLYGON EMPTY),返回true。HQE
ST_IsPolygonCCW
ST_IsPolygonCCW(geom)
BOOLEAN
如果輸入多邊形的外環為逆時針方向且所有內環為順時針方向,則返回true;如果外環與內環方向相同,則返回false。如果輸入幾何體是點、串線、多點或多串線,則返回true。對於幾何體集合,如果集合中的所有多邊形均滿足上述條件,則返回true。對於空多邊形(
POLYGON EMPTY),返回true。說明通過PQE支援。
ST_IsPolygonCW由HQE支援,對大表做繞向篩選時請注意兩者的效能差異。兩個函數不是互補關係,當外環與內環方向相同時兩者同時返回false,因此不能通過對ST_IsPolygonCW取反來判斷逆時針繞向。PQE
ST_IsSimple
ST_IsSimple(geom)
BOOLEAN
如果輸入幾何體是簡單的,則ST_IsSimple返回 true。
HQE
ST_NPoints
ST_NPoints(geom)
INTEGER
ST_NPoints 返回輸入幾何體中的點數。
HQE
ST_NRings
ST_NRings(geom)
INTEGER
ST_NRings 返回輸入幾何體中的環形數。
HQE
ST_NumGeometries
ST_NumGeometries(geom)
INTEGER
ST_NumGeometries返回輸入幾何體中的幾何體數。
HQE
ST_NumInteriorRings
ST_NumInteriorRings(geom)
INTEGER
ST_NumInteriorRings返回輸入多邊形幾何體中的環形數。
HQE
ST_NumPoints
ST_NumPoints(geom)
INTEGER
ST_NumPoints返回輸入幾何體中的點數。
HQE
ST_PointN
ST_PointN(geom, index)
子類型POINT的 GEOMETRY。
ST_PointN返回由索引值指定的串線中的點。負索引值從串線的末尾開始倒計數,因此-1是最後一個點。
HQE
ST_Points
ST_Points(geom)
子類型MULTIPOINT的 GEOMETRY。
ST_Points返回包含輸入幾何中所有非空點的多點幾何。ST_Points不會移除輸入中重複的點,包括環形幾何的起點和終點。
HQE
ST_StartPoint
ST_StartPoint(geom)
GEOMETRY
ST_StartPoint返回輸入串線的第一個點。結果的空間參考系統標識符(SRID)值與輸入幾何體的相同。
HQE
ST_X
ST_X(point)
DOUBLE PRECISION
ST_X返回輸入焦點的第一個座標。
HQE
ST_Y
ST_Y(point)
DOUBLE PRECISION
ST_Y返回輸入焦點的第二個座標。
HQE
-
Geometry Editors函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_AddPoint
ST_AddPoint(geom1, geom2)
GEOMETRY
ST_AddPoint返回一個串線幾何體,它與添加了點的輸入幾何體相同。
HQE
ST_Multi
ST_Multi(geom)
GEOMETRY帶子類型MULTIPOINT、MULTILINESTRING、MULTIPOLYGON或者GEOMETRYCOLLECTION。
ST_Multi將幾何轉換為相應的多類型。如果輸入幾何已經是多類型或幾何集合,則返回其副本。如果輸入幾何體是點、串線或多邊形,則分別返回包含輸入幾何體的MultiPoint、MultiLineString或MultiPolygon。
HQE
ST_RemovePoint
ST_RemovePoint(geom, index)
GEOMETRY
ST_RemovePoint返回一個串線幾何體,該幾何體已刪除輸入幾何體在索引位置的點。索引是從零開始的。結果的空間參考系統標識符 (SRID) 與輸入幾何體的相同。
HQE
ST_Reverse
ST_Reverse(geom)
GEOMETRY
ST_Reverse可反轉線性和面積幾何的折點順序。對於點或多點幾何,將返回原始幾何的副本。對於幾何體集合,ST_Reverse將反轉集合中每個幾何體的折點順序。
HQE
ST_SetPoint
ST_SetPoint(geom1, index, geom2)
GEOMETRY
將輸入串線中index指定位置的折點替換為geom2的座標,並返回替換後的串線。
HQE
-
Geometry Validation函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_IsValid
ST_IsValid(geom)
BOOLEAN
如果輸入幾何體有效,則ST_IsValid返回true。
說明通過PQE支援。
PQE
-
Spatial Reference System函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_SetSRID
ST_SetSRID(geom, srid)
GEOMETRY
ST_SetSRID返回一個與輸入幾何體相同的幾何體,只不過使用空間參考系統標識符(SRID)的輸入值進行了更新。
HQE
ST_SRID
ST_SRID(geom)
INTEGER
ST_SRID返回輸入幾何體的空間參考系統標識符(SRID)。
HQE
-
Geometry Input函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_GeomFromText
ST_GeomFromText(wkt_string [, srid])
GEOMETRY。
ST_GeomFromText從輸入幾何體的已知文本(WKT)表示形式構造幾何體對象。
說明通過PQE支援。
PQE
-
Geometry Output函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_AsBinary
ST_AsBinary(geom)
BYTEA
ST_AsBinary 使用 ASCII 十六進位字元(0—9,A—F)返回輸入幾何體的十六進位已知二進位 (WKB) 表示形式。
HQE
ST_AsEWKB
ST_AsEWKB(geom)
BYTEA
ST_AsEWKB 使用 ASCII 十六進位字元(0—9,A—F)返回輸入幾何體的擴充的已知二進位 (EWKB) 表示形式。
HQE
ST_AsEWKT
ST_AsEWKT(geom)
TEXT
ST_AsEWKT 返回輸入幾何體的擴充的已知文本 (EWKT) 表示形式。
HQE
ST_AsGeoJSON
ST_AsGeoJSON(geom [, maxdecimaldigits])
TEXT
ST_AsGeoJSON 返回輸入幾何體的 GeoJSON 表示形式。有關 GeoJSON 的更多資訊,請參閱 Wikipedia 中的 GeoJSON。
HQE
ST_AsText
ST_AsText(geom [, precision])
TEXT
ST_AsText 返回輸入幾何體的已知文本 (WKT) 表示形式。
HQE
-
Spatial Relationships函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_Contains
ST_Contains(geom1, geom2)
BOOLEAN
如果第一個輸入幾何體包含第二個輸入幾何體,則 ST_Contains 返回 true。如果 B 中的每個點均為 A 中的一個點,並且其內部有非空相交地區,則幾何體 A 包含幾何體 B。ST_Contains(A, B) 與 ST_Within(B, A) 等效。
說明通過PQE支援。
PQE
ST_ContainsProperly
ST_ContainsProperly(geom1, geom2)
BOOLEAN
如果兩個輸入幾何都是非空的,並且第二個幾何的所有點都是第一個幾何的內部點,則 ST_ContainsProperly 返回 true。
說明通過PQE支援。
PQE
ST_CoveredBy
ST_CoveredBy(geom1, geom2)
BOOLEAN
如果第一個輸入幾何體被第二個輸入幾何體覆蓋,則 ST_CoveredBy 返回 true。如果幾何體 A 和幾何體 B 都是非空的,並且 A 中的每個點均為 B 中的一個點,則前者被後者覆蓋。ST_CoveredBy(A, B) 與 ST_Covers(B, A) 等效。
HQE
ST_Covers
ST_Covers(geom1, geom2)
BOOLEAN
如果第一個輸入幾何體被第二個輸入幾何體覆蓋,則 ST_Covers 返回 true。如果幾何體 A 和幾何體 B 都是非空的,並且 B 中的每個點均為 A 中的一個點,則前者覆蓋了後者。ST_Covers(A, B) 與 ST_CoveredBy(B, A) 等效。
說明通過PQE支援。
PQE
ST_Crosses
ST_Crosses(geom1, geom2)
BOOLEAN
如果兩個輸入幾何體相互交叉,則 ST_Crosses 返回 true。
HQE
ST_Disjoint
ST_Disjoint(geom1, geom2)
BOOLEAN
如果兩個輸入幾何體沒有共同點,則 ST_Disjoint 返回 true。
HQE
ST_DWithin
ST_DWithin(geom1, geom2, threshold)
BOOLEAN
如果兩個輸入幾何體值之間的歐氏距離不大於閾值,則 ST_DWithin 返回 true。
說明通過PQE支援。
PQE
ST_DWithin_S2
ST_DWithin_S2(x1, y1, x2, y2, threshold)
BOOLEAN
如果兩個地理位置之間的球面距離不大於閾值threshold(單位:米),則ST_DWithin_S2返回
true。入參依次為位置1的經度和緯度、位置2的經度和緯度、距離閾值。
說明Hologres V2.0.8版本支援,暫不支援常量查詢。
HQE
ST_Equals
ST_Equals(geom1, geom2)
BOOLEAN
如果輸入幾何體在幾何上相等,則 ST_Equals 返回 true。如果幾何體具有相等的點集且其內部具有非空相交地區,則將幾何體視為在幾何上相等。
HQE
ST_Intersects
ST_Intersects(geom1, geom2)
BOOLEAN
如果兩個輸入幾何體至少有一個共同點,則 ST_Intersects 返回 true。
說明通過PQE支援。
PQE
ST_Touches
ST_Touches(geom1, geom2)
BOOLEAN
如果兩個輸入幾何體接觸,則 ST_Touches 返回 true。如果兩個幾何體是非空的、相交並且沒有共同的內部點,則它們是接觸的。
HQE
ST_Within
ST_Within(geom1, geom2)
BOOLEAN
如果第一個輸入幾何體在第二個輸入幾何體中,則 ST_Within 返回 true。例如,如果幾何體 A 中的每個點均為幾何體 B 中的一個點,並且其內部有非空相交地區,則幾何體 A 在幾何體 B 中。ST_Within(A, B) 與 ST_Contains(B, A) 等效。
說明通過PQE支援。
PQE
-
Measurement函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_Angle
ST_Angle(geom1, geom2, geom3 [, geom4])
DOUBLE PRECISION
ST_Angle返回順時針方向測量的點之間的角度,傳回值以弧度為單位,取值範圍為[0, 2π)。具體規則如下:
-
如果輸入三個點,則測量P1P2P3三個點順時針組成的角度。
-
如果輸入四個點,則測量有向線P1P2和P3P4順時針形成的角度。如果輸入為兩條線平行(即,P1等於P2,或P3等於P4),則返回 null。
HQE
ST_Area
ST_Area(geom)
DOUBLE PRECISION
ST_Area 返回輸入幾何體的笛卡爾面積。面積單位與用於表示輸入幾何體座標的單位相同。對於點、串線、多點和多串線,此函數返回 0。對於幾何體集合,它返回集合中幾何體的面積之和。
HQE
ST_Azimuth
ST_Azimuth(point1, point2)
DOUBLE PRECISION
ST_Azimuth返回兩個輸入焦點的基於北向的笛卡爾方位。
HQE
ST_Distance
ST_Distance(geom1, geom2)
DOUBLE PRECISION
ST_Distance返回兩個輸入幾何體之間的笛卡爾距離。距離單位與用於表示輸入幾何體座標的單位相同。如需計算球面距離(單位:米),請使用ST_Distance_Sphere_S2,該函數的入參為兩個位置的經緯度數值而非幾何體。
HQE
ST_Distance_Sphere_S2
ST_Distance_Sphere_S2(x1, y1, x2, y2)
DOUBLE PRECISION
ST_Distance_Sphere_S2返回兩個地理位置的球面距離(單位:米)。
入參依次為位置1的經度和緯度、位置2的經度和緯度。經度範圍是[-180度, +180度],緯度範圍是[-90度, +90度]。
說明Hologres V2.0.8版本支援,暫不支援常量查詢。
HQE
ST_Length
ST_Length(geom)
DOUBLE PRECISION
ST_Length返回輸入線性幾何體的笛卡爾長度。長度單位與用於表示輸入幾何體座標的單位相同。對於點、多點和平面幾何體,此函數返回零 (0)。當輸入為幾何體集合時,此函數返回集合中的幾何體長度之和。
HQE
ST_Perimeter
ST_Perimeter(geom)
DOUBLE PRECISION
ST_Perimeter返回輸入平面幾何體的笛卡爾周長(邊界長度)。周長單位與用於表示輸入幾何體座標的單位相同。對於點、多點和線性幾何體,此函數返回零 (0)。當輸入為幾何體集合時,此函數返回集合中的幾何體周長之和。
HQE
-
-
Overlay函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_Intersection
ST_Intersection(geom1, geom2)
GEOMETRY。
返回幾何之間的交集。
HQE
-
Geometry Processing函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_Buffer
ST_Buffer(geom, radius)
與輸入類型一致:geometry入參返回GEOMETRY,geography入參返回GEOGRAPHY。
返回與輸入幾何體的距離不超過radius的所有點構成的幾何體,即輸入幾何體的緩衝區。
說明通過PQE支援。
PQE
ST_ConvexHull
ST_ConvexHull(geom)
GEOMETRY
ST_ConvexHull返回一個幾何,該幾何表示輸入幾何中包含的非空點的凸包。
HQE
ST_Simplify
ST_Simplify(geom, tolerance)
GEOMETRY
ST_Simplify中使用帶有給定容差的 Ramer-Douglas-Peucker 演算法返回輸入幾何的簡化副本。輸入幾何的拓撲可能不會保留。有關該演算法的詳細資料,請參閱拉默-道格拉斯-普克演算法在維基百科。
HQE
-
Bounding Box函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_XMax
ST_XMax(geom)
DOUBLE PRECISION
返回輸入幾何體外包框的X座標最大值。該函數的入參類型為box3d,傳入geometry時會自動隱式轉換。
說明通過PQE支援。
PQE
ST_XMin
ST_XMin(geom)
DOUBLE PRECISION
返回輸入幾何體外包框的X座標最小值。該函數的入參類型為box3d,傳入geometry時會自動隱式轉換。
說明通過PQE支援。
PQE
ST_YMax
ST_YMax(geom)
DOUBLE PRECISION
返回輸入幾何體外包框的Y座標最大值。該函數的入參類型為box3d,傳入geometry時會自動隱式轉換。
說明通過PQE支援。
PQE
ST_YMin
ST_YMin(geom)
DOUBLE PRECISION
返回輸入幾何體外包框的Y座標最小值。該函數的入參類型為box3d,傳入geometry時會自動隱式轉換。
說明通過PQE支援。
PQE
-
Linear Referencing函數
函數
函數文法
傳回型別
說明
支援的引擎
ST_LineInterpolatePoint
ST_LineInterpolatePoint(geom, fraction)
子類型POINT的GEOMETRY。
ST_LineInterpolatePoint為插值點,即返回一個距離線起點為小數距離的點。
HQE
空間函數最佳實務
阿里雲為您提供了空間函數使用方法的最佳實務,詳情請參見使用空間函數查詢資料方法。