地理数据库功能

本页中记录的函数允许用户访问要在Django的注释、聚合或筛选器中使用的地理数据库函数。

示例:

>>> from django.contrib.gis.db.models.functions import Length
>>> Track.objects.annotate(length=Length("line")).filter(length__gt=100)

并非所有后端都支持所有函数,因此请参阅每个函数的文档以查看数据库后端是否支持要使用的函数。如果在后端调用不支持它的地理函数,您将得到 NotImplementedError 例外。

测量

Area

class Area(expression, **extra)[源代码]

Availability :MariaDB, MySQL, Oracle, PostGIS ,SpatiaLite

接受单个地理字段或表达式,并将字段的区域作为 Area 措施。

没有LWGEOM/RTTOPO的MySQL和SpatiaLite不支持地理SRSS上的面积计算。

Distance

class Distance(expr1, expr2, spheroid=None, **extra)[源代码]

Availability :MariaDB, MySQLPostGIS 、Oracle、SpatiaLite

接受两个地理字段或表达式并返回它们之间的距离,作为 Distance 对象。在MySQL上,当坐标为大地坐标时,返回原始浮点值。

在支持大地坐标距离计算的后端,根据几何体的SRID值(例如 ST_DistanceSphere 后地理信息系统)

当使用大地坐标(角度)坐标计算距离时,与默认的wgs84(4326)srid一样,可以设置 spheroid 关键字参数,用于确定计算是基于简单球体(不太准确、资源密集型)还是基于球体(更准确、资源密集型)。

在下面的示例中,从霍巴特市到其他城市的距离 PointFieldAustraliaCity 计算查询集:

>>> 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
...

备注

因为 distance 属性是 Distance 对象,您可以轻松地用您选择的单位表示值。例如, city.distance.mi 是以英里为单位的距离值,并且 city.distance.km 是以公里为单位的距离值。见 测量对象 有关使用详细信息和 支持单位 .

GeometryDistance

class GeometryDistance(expr1, expr2, **extra)[源代码]

AvailabilityPostGIS

接受两个地理字段或表达并返回它们之间的距离。当用于 order_by() 条款,它提供索引辅助的最近邻结果集。

Length

class Length(expression, spheroid=True, **extra)[源代码]

Availability :MariaDB, MySQL 、Oracle、 PostGIS ,SpatiaLite

接受单个地理行字符串或多行字符串字段或表达式,并将其长度作为 Distance 措施。

在Postgis和Spatialite上,当坐标为大地坐标(角度)时,可以指定计算是基于简单球体(不太精确,资源密集度较低)还是基于球体(更准确,资源密集度较高),使用 spheroid 关键字参数。

MySQL不支持地理SRSE上的长度计算。

Perimeter

class Perimeter(expression, **extra)[源代码]

可用性PostGIS ,甲骨文,太空石

接受单个地理字段或表达式,并将几何字段的周长作为 Distance 对象。

关系

Azimuth

class Azimuth(point_a, point_b, **extra)[源代码]

AvailabilityPostGIS ,SpatiaLite(LWGEOM/RTTOPO)

返回由给定点几何图形定义的段的方位角(以弧度为单位),或 None 如果两点重合。方位角是从北方参照的角度,并且是正顺时针方向:北方。= 0 东方= π/2 南= π 韦斯特 3π/2 .

BoundingCircle

class BoundingCircle(expression, num_seg=48, **extra)[源代码]

AvailabilityPostGISOracle ,SpatiaLite 5.1+

接受单个地理字段或表达式,并返回可以完全包含几何图形的最小圆形多边形。

这个 num_seg 参数仅用于PostGIS。

Centroid

class Centroid(expression, **extra)[源代码]

Availability :MariaDB, MySQLPostGIS 、Oracle、SpatiaLite

接受单个地理字段或表达式并返回 centroid 几何图形的值。

ClosestPoint

class ClosestPoint(expr1, expr2, **extra)[源代码]

AvailabilityPostGIS ,SpatiaLite

接受两个地理字段或表达式,并返回几何图形A上最接近几何图形B的二维点。

Envelope

class Envelope(expression, **extra)[源代码]

Availability :MariaDB, MySQLOraclePostGIS ,SpatiaLite

接受单个地理字段或表达式,并返回表示几何图形边界框的几何图形。

LineLocatePoint

class LineLocatePoint(linestring, point, **extra)[源代码]

可用性PostGIS SpatiaLite

返回0到1之间的浮点值,表示上最近点的位置 linestring 到给定的 point ,作为二维线条长度的一部分。

PointOnSurface

class PointOnSurface(expression, **extra)[源代码]

AvailabilityPostGIS 、MariaDB、Oracle、SpatiaLite

接受单个地理字段或表达式并返回 Point 几何体保证位于场的表面;否则返回 None .

操作

Difference

class Difference(expr1, expr2, **extra)[源代码]

Availability :MariaDB, MySQLPostGIS 、Oracle、SpatiaLite

接受两个地理字段或表达式并返回几何差异,即几何A中不与几何B相交的部分。

Intersection

class Intersection(expr1, expr2, **extra)[源代码]

Availability :MariaDB, MySQLPostGIS 、Oracle、SpatiaLite

接受两个地理字段或表达式,并返回它们之间的几何交集。

SymDifference

class SymDifference(expr1, expr2, **extra)[源代码]

Availability :MariaDB, MySQLPostGIS 、Oracle、SpatiaLite

接受两个地理字段或表达式,并返回给定参数之间的几何对称差(不带交叉点的并集)。

Union

class Union(expr1, expr2, **extra)[源代码]

Availability :MariaDB, MySQLPostGIS 、Oracle、SpatiaLite

接受两个地理字段或表达式,并返回两个几何图形的并集。

编辑

ForcePolygonCW

class ForcePolygonCW(expression, **extra)[源代码]

可用性PostGIS SpatiaLite

接受单个地理字段或表达式并返回多边形/多多边形的修改版本,其中所有外环顺时针方向,所有内环逆时针方向。非多边形几何体返回时不变。

MakeValid

class MakeValid(expr)[源代码]

AvailabilityPostGIS ,SpatiaLite(LWGEOM/RTTOPO)

接受地理字段或表达式,并尝试将该值转换为有效的几何图形,而不丢失任何输入顶点。返回已经有效的几何图形时不做任何更改。简单多边形可能成为多多边形,其结果可能比输入的尺寸小。

Reverse

class Reverse(expression, **extra)[源代码]

可用性PostGIS ,甲骨文,太空石

接受单个地理字段或表达式,并返回具有反转坐标的几何图形。

Rotate

New in Django Development version.
class Rotate(expression, angle, origin=None, **extra)[源代码]

Availability : PostGIS

将几何体旋转指定的 angle 围绕起源。可选地,可以围绕由 origin 参数.

Scale

class Scale(expression, x, y, z=0.0, **extra)[源代码]

可用性PostGIS SpatiaLite

接受单个地理字段或表达式,并通过将其与缩放坐标相乘返回几何图形。 xy ,并且可以选择 z 参数。

SnapToGrid

class SnapToGrid(expression, *args, **extra)[源代码]

可用性PostGIS SpatiaLite

接受单个地理字段或表达式,并返回一个几何图形,其中所有点都捕捉到给定网格。几何图形如何捕捉到网格取决于给定了多少个数值(浮点、整数或长)参数。

参数个数

描述

1

用于捕捉X和Y轴网的单个大小。

2

要对齐网格的X和Y大小。

4

X,Y大小和相应的X,Y原点。

Transform

class Transform(expression, srid, **extra)[源代码]

可用性PostGIS ,甲骨文,太空石

接受地理字段或表达式和SRID整数代码,并将转换后的几何图形返回到由 srid 参数。

备注

整数srid对应的空间引用系统可能取决于所使用的空间数据库。换句话说,用于Oracle的SRID编号不一定与PostGIS使用的编号相同。

Translate

class Translate(expression, x, y, z=0.0, **extra)[源代码]

可用性PostGIS SpatiaLite

接受单个地理字段或表达式,并返回坐标偏移量为 xy ,并且可以选择 z 数字参数。

输入格式

FromWKB

class FromWKB(expression, srid=0, **extra)[源代码]

Availability :MariaDB, MySQL 、Oracle、 PostGIS ,SpatiaLite

从以下位置创建几何图形 Well-known binary (WKB) 代表权。可选的 srid 参数允许指定结果几何图形的SRID。 srid 在Oracle上被忽略。

FromWKT

class FromWKT(expression, srid=0, **extra)[源代码]

Availability :MariaDB, MySQL 、Oracle、 PostGIS ,SpatiaLite

从以下位置创建几何图形 Well-known text (WKT) 代表权。可选的 srid 参数允许指定结果几何图形的SRID。 srid 在Oracle上被忽略。

输出格式

AsGeoJSON

class AsGeoJSON(expression, bbox=False, crs=False, precision=8, **extra)[源代码]

Availability :MariaDB, MySQL 、Oracle、 PostGIS ,SpatiaLite

接受单个地理字段或表达式,并返回 GeoJSON 几何图形的表示。请注意,结果不是完整的GeoJackson结构,而只是 geometry GeojSON结构的关键内容。另见 GeoJSON 串行化器

示例:

>>> City.objects.annotate(json=AsGeoJSON("point")).get(name="Chicago").json
{"type":"Point","coordinates":[-87.65018,41.85039]}

关键字参数

描述

bbox

将此选项设置为 True 如果您希望边界框包含在返回的GeoJSON中。忽视Oracle。

crs

将此选项设置为 True 如果您希望将坐标参考系包含在返回的GeojSON中。忽视了SQL和Oracle。

precision

它可以用于指定GeoJSON表示中坐标的有效位数--默认值为8。忽视Oracle。

AsGML

class AsGML(expression, version=2, precision=8, **extra)[源代码]

可用性 甲骨文, PostGIS SpatiaLite

接受单个地理字段或表达式并返回 `Geographic Markup Language (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>

关键字参数

描述

precision

指定GML表示中坐标的有效位数——默认值为8。在Oracle上忽略。

version

指定要使用的GML版本:2(默认)或3。

AsKML

class AsKML(expression, precision=8, **extra)[源代码]

可用性PostGIS SpatiaLite

接受单个地理字段或表达式并返回 `Keyhole Markup Language (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>

关键字参数

描述

precision

此关键字可用于指定kml表示中坐标的有效位数——默认值为8。

AsSVG

class AsSVG(expression, relative=False, precision=8, **extra)[源代码]

可用性PostGIS SpatiaLite

接受单个地理字段或表达式并返回 `Scalable Vector Graphics (SVG)`_ _几何图形的表示。

关键字参数

描述

relative

如果设置为 True 路径数据将根据相对移动来实现。默认为 False ,表示使用绝对移动。

precision

此关键字可用于指定SVG表示中坐标的有效位数——默认值为8。

AsWKB

class AsWKB(expression, **extra)[源代码]

Availability :MariaDB, MySQL 、Oracle、 PostGIS ,SpatiaLite

接受单个地理字段或表达式,并返回 Well-known binary (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

class AsWKT(expression, **extra)[源代码]

Availability :MariaDB, MySQL 、Oracle、 PostGIS ,SpatiaLite

接受单个地理字段或表达式,并返回 Well-known text (WKT) 几何图形的表示形式。

示例:

>>> City.objects.annotate(wkt=AsWKT("point")).get(name="Chelyabinsk").wkt
'POINT (55.137555 61.451728)'

GeoHash

class GeoHash(expression, precision=None, **extra)[源代码]

AvailabilityMySQLPostGIS ,SpatiaLite(LWGEOM/RTTOPO)

接受单个地理字段或表达式并返回 GeoHash _几何图形的表示。

这个 precision 关键字参数控制结果中的字符数。

其他

IsEmpty

class IsEmpty(expr)[源代码]

AvailabilityPostGIS

接受地理字段或表达式并测试值是否为空几何图形。退货 True 如果它的值为空并且 False 否则的话。

IsValid

class IsValid(expr)[源代码]

AvailabilityMySQLPostGIS 、Oracle、SpatiaLite

接受地理字段或表达式,并测试值的格式是否正确。退换商品 True 如果其值是有效的几何图形并且 False 否则。

MemSize

class MemSize(expression, **extra)[源代码]

可用性PostGIS

接受单个地理字段或表达式,并返回几何字段所占用的内存大小(字节数)。

NumGeometries

class NumGeometries(expression, **extra)[源代码]

Availability :MariaDB, MySQLPostGIS 、Oracle、SpatiaLite

接受单个地理字段或表达式,如果几何字段是集合(例如 GEOMETRYCOLLECTIONMULTI* 字段)。对于单个几何图形返回1。

在mysql上,返回 None 对于单个几何图形。

NumPoints

class NumPoints(expression, **extra)[源代码]

Availability :MariaDB, MySQLPostGIS 、Oracle、SpatiaLite

接受单个地理字段或表达式,并返回几何图形中的点数。

在mysql上,返回 None 对于任何非``linestring``几何图形。