地理資料庫函式¶
此頁面上記載的函式允許使用者在 Django 中存取地理資料庫函式,以用於註釋、聚合或篩選。
範例
>>> from django.contrib.gis.db.models.functions import Length
>>> Track.objects.annotate(length=Length("line")).filter(length__gt=100)
並非所有後端都支援所有函式,因此請參閱每個函式的文件,以查看您的資料庫後端是否支援您想要使用的函式。如果您在不支援該函式的後端上呼叫地理函式,則會收到 NotImplementedError
例外狀況。
函式摘要
測量 |
關係 |
運算 |
編輯器 |
輸入格式 |
輸出格式 |
其他 |
---|---|---|---|---|---|---|
Area
¶
可用性:MariaDB、MySQL、Oracle、PostGIS、SpatiaLite
接受單一地理欄位或運算式,並以 Area
測量值傳回欄位的面積。
沒有 LWGEOM/RTTOPO 的 MySQL 和 SpatiaLite 不支援地理 SRSes 的面積計算。
AsGeoJSON
¶
可用性:MariaDB、MySQL、Oracle、PostGIS、SpatiaLite
接受單一地理欄位或運算式,並傳回幾何的 GeoJSON 表示法。請注意,結果不是完整的 GeoJSON 結構,而只是 GeoJSON 結構的 geometry
索引鍵內容。另請參閱 GeoJSON 序列化器。
範例
>>> City.objects.annotate(json=AsGeoJSON("point")).get(name="Chicago").json
{"type":"Point","coordinates":[-87.65018,41.85039]}
關鍵字引數 |
描述 |
---|---|
|
如果您想要將邊界框包含在傳回的 GeoJSON 中,請將此設定為 |
|
如果您想要將座標參考系統包含在傳回的 GeoJSON 中,請將此設定為 |
|
可用於指定 GeoJSON 表示法中座標的有效位數 - 預設值為 8。在 Oracle 上會忽略。 |
AsGML
¶
可用性:Oracle、PostGIS、SpatiaLite
接受單一地理欄位或運算式,並傳回幾何的地理標記語言 (GML) 表示法。
範例
>>> qs = Zipcode.objects.annotate(gml=AsGML("poly"))
>>> print(qs[0].gml)
<gml:Polygon srsName="EPSG:4326"><gml:OuterBoundaryIs>-147.78711,70.245363 ...
-147.78711,70.245363</gml:OuterBoundaryIs></gml:Polygon>
關鍵字引數 |
描述 |
---|---|
|
指定 GML 表示法中座標的有效位數 - 預設值為 8。在 Oracle 上會忽略。 |
|
指定要使用的 GML 版本:2(預設)或 3。 |
AsKML
¶
可用性:PostGIS、SpatiaLite
接受單一地理欄位或運算式,並傳回幾何的 Keyhole 標記語言 (KML) 表示法。
範例
>>> qs = Zipcode.objects.annotate(kml=AsKML("poly"))
>>> print(qs[0].kml)
<Polygon><outerBoundaryIs><LinearRing><coordinates>-103.04135,36.217596,0 ...
-103.04135,36.217596,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
關鍵字引數 |
描述 |
---|---|
|
此關鍵字可用於指定 KML 表示法中座標的有效位數 - 預設值為 8。 |
AsSVG
¶
可用性:PostGIS、SpatiaLite
接受單一地理欄位或運算式,並傳回幾何的 可縮放向量圖形 (SVG) 表示法。
關鍵字引數 |
描述 |
---|---|
|
如果設定為 |
|
此關鍵字可用於指定 SVG 表示法中座標的有效位數 - 預設值為 8。 |
AsWKB
¶
可用性:MariaDB、MySQL、Oracle、PostGIS、SpatiaLite
接受單一地理欄位或運算式,並傳回幾何的 知名二進位 (WKB) 表示法。
範例
>>> bytes(City.objects.annotate(wkb=AsWKB("point")).get(name="Chelyabinsk").wkb)
b'\x01\x01\x00\x00\x00]3\xf9f\x9b\x91K@\x00X\x1d9\xd2\xb9N@'
AsWKT
¶
可用性:MariaDB、MySQL、Oracle、PostGIS、SpatiaLite
接受單一地理欄位或運算式,並傳回幾何的Well-known text (WKT)表示法。
範例
>>> City.objects.annotate(wkt=AsWKT("point")).get(name="Chelyabinsk").wkt
'POINT (55.137555 61.451728)'
Azimuth
¶
可用性:PostGIS、SpatiaLite (LWGEOM/RTTOPO)
傳回由給定點幾何定義的線段的方位角(以弧度為單位),如果兩個點重合則傳回 None
。方位角是以北方為參考的角度,並以順時針方向為正:北方 = 0
;東方 = π/2
;南方 = π
;西方 = 3π/2
。
BoundingCircle
¶
可用性:PostGIS、Oracle、SpatiaLite 5.1+
接受單一地理欄位或運算式,並傳回可以完全包含該幾何的最小圓形多邊形。
num_seg
參數僅在 PostGIS 上使用。
新增了 SpatiaLite 5.1+ 的支援。
Centroid
¶
可用性:MariaDB、MySQL、PostGIS、Oracle、SpatiaLite
接受單一地理欄位或運算式,並傳回幾何的 centroid
值。
ClosestPoint
¶
可用性:PostGIS、SpatiaLite
接受兩個地理欄位或運算式,並傳回幾何 A 上最接近幾何 B 的二維點。
Difference
¶
可用性:MariaDB、MySQL、PostGIS、Oracle、SpatiaLite
接受兩個地理欄位或運算式,並傳回幾何差,即幾何 A 中不與幾何 B 相交的部分。
Distance
¶
可用性:MariaDB、MySQL、PostGIS、Oracle、SpatiaLite
接受兩個地理欄位或運算式,並以 Distance
物件的形式傳回它們之間的距離。在 MySQL 上,當座標為測地座標時,會傳回原始浮點數值。
在支援測地座標距離計算的後端上,會根據幾何圖形的 SRID 值自動選擇適當的後端函數(例如,PostGIS 上的 ST_DistanceSphere)。
當使用測地(角度)座標計算距離時(預設 WGS84 (4326) SRID 即為這種情況),您可以設定 spheroid
關鍵字引數,以決定計算應該基於簡單的球體(精確度較低、資源密集度較低)還是基於橢球體(精確度較高、資源密集度較高)。
在以下範例中,會計算從霍巴特市到 AustraliaCity
查詢集中每個其他PointField
的距離
>>> from django.contrib.gis.db.models.functions import Distance
>>> pnt = AustraliaCity.objects.get(name="Hobart").point
>>> for city in AustraliaCity.objects.annotate(distance=Distance("point", pnt)):
... print(city.name, city.distance)
...
Wollongong 990071.220408 m
Shellharbour 972804.613941 m
Thirroul 1002334.36351 m
...
Envelope
¶
可用性:MariaDB、MySQL、Oracle、PostGIS、SpatiaLite
接受單一地理欄位或運算式,並傳回表示該幾何圖形邊界框的幾何圖形。
ForcePolygonCW
¶
可用性:PostGIS、SpatiaLite
接受單一地理欄位或運算式,並傳回多邊形/多重多邊形的修改版本,其中所有外環都以順時針方向定向,所有內環都以逆時針方向定向。非多邊形幾何圖形會保持不變。
FromWKB
¶
可用性:MariaDB、MySQL、Oracle、PostGIS、SpatiaLite
從Well-known binary (WKB) 表示法建立幾何圖形。可選的 srid
引數允許指定產生的幾何圖形的 SRID。srid
在 Oracle 上會被忽略。
新增了 srid
引數。
FromWKT
¶
可用性: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
從Well-known text (WKT) 表示法建立幾何圖形。選用的 srid
引數允許指定結果幾何圖形的 SRID。srid
在 Oracle 上會被忽略。
新增了 srid
引數。
GeoHash
¶
可用性: MySQL, PostGIS, SpatiaLite (LWGEOM/RTTOPO)
接受單一地理欄位或表達式,並傳回幾何圖形的GeoHash表示法。
precision
關鍵字引數控制結果中的字元數。
GeometryDistance
¶
可用性: PostGIS
接受兩個地理欄位或表達式,並傳回它們之間的距離。當在 order_by()
子句中使用時,它會提供索引輔助的最近鄰結果集。
Intersection
¶
可用性: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite
接受兩個地理欄位或表達式,並傳回它們之間的幾何交集。
IsEmpty
¶
可用性: PostGIS
接受地理欄位或表達式,並測試該值是否為空幾何圖形。如果其值為空,則傳回 True
,否則傳回 False
。
IsValid
¶
可用性: MySQL, PostGIS, Oracle, SpatiaLite
接受地理欄位或表達式,並測試該值是否格式正確。如果其值為有效幾何圖形,則傳回 True
,否則傳回 False
。
Length
¶
可用性: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
接受單一地理線字串或多線字串欄位或表達式,並以 Distance
測量值傳回其長度。
在 PostGIS 和 SpatiaLite 上,當座標為大地測量 (角度) 時,您可以使用 spheroid
關鍵字引數指定計算應基於簡單球體(較不精確,資源密集度較低)還是基於橢球體(較精確,資源密集度較高)。
MySQL 不支援地理 SRS 上的長度計算。
LineLocatePoint
¶
可用性: PostGIS, SpatiaLite
傳回介於 0 和 1 之間的浮點數,表示 linestring
上最接近指定 point
的點的位置,以 2D 線長度的分數表示。
MakeValid
¶
可用性: PostGIS, SpatiaLite (LWGEOM/RTTOPO)
接受地理欄位或表達式,並嘗試將該值轉換為有效的幾何圖形,而不會遺失任何輸入頂點。已經有效的幾何圖形會以不變的方式傳回。簡單多邊形可能會變成多邊形,且結果的維度可能低於輸入。
MemSize
¶
可用性: PostGIS
接受單一地理欄位或表達式,並傳回幾何欄位所佔用的記憶體大小(以位元組為單位)。
NumGeometries
¶
可用性:MariaDB、MySQL、PostGIS、Oracle、SpatiaLite
接受單一地理欄位或表達式,如果幾何欄位是集合(例如 GEOMETRYCOLLECTION
或 MULTI*
欄位),則傳回幾何的數量。單一幾何則傳回 1。
在 MySQL 上,單一幾何會傳回 None
。
NumPoints
¶
可用性:MariaDB、MySQL、PostGIS、Oracle、SpatiaLite
接受單一地理欄位或表達式,並傳回幾何中的點數。
在 MySQL 上,任何非 LINESTRING
幾何都會傳回 None
。
Perimeter
¶
可用性:PostGIS、Oracle、SpatiaLite
接受單一地理欄位或表達式,並將幾何欄位的周長以 Distance
物件傳回。
PointOnSurface
¶
可用性:PostGIS、MariaDB、Oracle、SpatiaLite
接受單一地理欄位或表達式,並傳回保證位於欄位表面的 Point
幾何;否則傳回 None
。
Reverse
¶
可用性:PostGIS、Oracle、SpatiaLite
接受單一地理欄位或表達式,並傳回具有反轉座標的幾何。
Scale
¶
可用性:PostGIS、SpatiaLite
接受單一地理欄位或表達式,並傳回透過將座標乘以 x
、y
,以及可選的 z
參數縮放後的幾何。
SnapToGrid
¶
可用性:PostGIS、SpatiaLite
接受單一地理欄位或表達式,並傳回所有點都貼齊到指定網格的幾何。幾何如何貼齊網格取決於給定的數值(浮點數、整數或長整數)引數數量。
引數數量 |
描述 |
---|---|
1 |
單一尺寸,用於貼齊 X 和 Y 網格。 |
2 |
X 和 Y 尺寸,用於貼齊網格。 |
4 |
X、Y 尺寸以及對應的 X、Y 原點。 |
SymDifference
¶
可用性:MariaDB、MySQL、PostGIS、Oracle、SpatiaLite
接受兩個地理欄位或表達式,並傳回給定參數之間的幾何對稱差(聯集但不包含交集)。
Transform
¶
可用性:PostGIS、Oracle、SpatiaLite
接受地理欄位或表達式和 SRID 整數代碼,並傳回轉換為 srid
參數指定的空間參考系統的幾何。
請注意
整數 SRID 對應的空間參考系統可能取決於所使用的空間資料庫。換句話說,用於 Oracle 的 SRID 數字不一定與 PostGIS 使用的數字相同。
Translate
¶
可用性:PostGIS、SpatiaLite
接受單一地理欄位或表達式,並傳回其座標由 x
、y
,以及可選的 z
數值參數偏移的幾何。
Union
¶
可用性: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite
接受兩個地理欄位或表達式,並返回兩個幾何圖形的聯集。