地理数据库函数

该页面上记录的功能允许用户访问地理数据库功能,以便在Django中的注释,聚合或过滤器中使用。

例如:

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

不是所有的后端都支持所有功能,所以参考每个函数的文档来查看你的数据库后端是否支持你想要使用的函数。 如果您在不支持的后端调用地理函数,则会得到NotImplementedError异常。

功能摘要:

测量 关系 操作 编者 输出格式
BoundingCircle 区别 ForceRHR AsGeoJSON 已验证
距离 形心 路口 MakeValid AsGML MEMSIZE
长度 信封 SymDifference 相反 AsKML NumGeometries
周长 PointOnSurface 联盟 规模 AsSVG 为NumPoints
    SnapToGrid 地理散列  
    转变    
    翻译    

Area

区域表达式** extra

可用性:MySQL,Oracle,PostGIS,SpatiaLite

接受单个地理字段或表达式,并返回字段的区域作为Area度量。

没有LWGEOM的MySQL和SpatiaLite不支持对地理SRS进行区域计算。

在Django更改1.11:

在旧版本中,当在投影SRS上使用时,MySQL返回原始值。

AsGeoJSON

AsGeoJSON表达式bbox = Falsecrs = Falseprecision = 8** extra

可用性PostGIS,SpatiaLite

接受单个地理字段或表达式并返回几何的GeoJSON表示。 请注意,结果不是GeoJSON结构中完整的GeoJSON结构,而只是GeoJSON结构的geometry键内容。 另见GeoJSON Serializer

例如:

>>> City.objects.annotate(json=AsGeoJSON('point')).get(name='Chicago').json
{"type":"Point","coordinates":[-87.65018,41.85039]}
关键词参数 描述
BBOX 如果希望将边界框包含在返回的GeoJSON中,请将其设置为True
CRS 如果希望坐标参考系统包含在返回的GeoJSON中,请将其设置为True
精确 它可用于指定GeoJSON表示中坐标的有效位数 - 默认值为8。

AsGML

AsGML表达式version = 2precision = 8** extra¶ T5>

可用性: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。
在Django更改1.11:

添加了Oracle支持。

AsKML

AsKML表达式precision = 8** extra

可用性PostGIS,SpatiaLite

接受单个地理字段或表达式,并返回几何的键孔标记语言(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

AsSVG表达式relative = Falseprecision = 8** extra¶ T5>

可用性PostGIS,SpatiaLite

接受单个地理字段或表达式并返回几何的可伸缩矢量图形(SVG)表示。

关键词参数 描述
相对的 如果设置为True,路径数据将以相对移动方式实现。 默认为False,这意味着使用绝对移动。
精确 该关键字可用于指定SVG表示中坐标的有效位数 - 默认值为8。

BoundingCircle

BoundingCircle表达式num_seg = 48** extra

可用性PostGISOracle(≥12.1.0.2)

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

num_seg参数仅用于PostGIS。

在Django更改1.11:

添加了Oracle支持。

Centroid

Centroid表达式** extra

可用性:MySQL,PostGIS,Oracle,SpatiaLite

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

Difference

差异expr1expr2** extra

可用性:MySQL(≥5.6.1),PostGIS,Oracle,SpatiaLite

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

在Django更改1.10:

添加了MySQL支持。

Distance

Distance(expr1, expr2, spheroid=None, **extra)

可用性:MySQL(≥5.6.1),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
...

由于distance属性是一个Distance对象,您可以轻松地以您所选择的单位表示值。 例如,city.distance.mi是距离值,以英里为单位,city.distance.km是以公里为单位的距离值。 有关使用细节和Supported units的列表,请参见Measurement Objects

在Django更改1.11:

在旧版本中,当在投影SRS上使用时,MySQL返回原始值。

Envelope

信封表达式** extra

可用性:MySQL,PostGIS,SpatiaLite

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

ForceRHR

ForceRHR表达式** extra

可用性PostGIS

接受单个地理字段或表达式并返回多边形/多边形的修改版本,其中所有顶点都遵循右侧规则。

GeoHash

GeoHash表达式precision =无** extra

可用性PostGIS,SpatiaLite(LWGEOM)

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

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

在Django更改1.10:

添加了SpatiaLite支持。

Intersection

交点expr1expr2** extra

可用性:MySQL(≥5.6.1),PostGIS,Oracle,SpatiaLite

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

在Django更改1.10:

添加了MySQL支持。

IsValid

的IsValid T0>( EXPR T1>)¶ T2>
Django中的新功能1.10。

可用性PostGIS,Oracle,SpatiaLite(LWGEOM)

接受地理字段或表达式,并测试该值是否形成良好。 如果其值为有效几何,则返回True,否则返回False

在Django更改1.11:

添加了SpatiaLite和Oracle支持。

Length

长度表达式spheroid = True** extra

可用性:MySQL,Oracle,PostGIS,SpatiaLite

接受一个单一的地理线索或多列表示字段或表达式,并返回其长度作为Distance度量。

在PostGIS和SpatiaLite上,当坐标为大地测量(角度)时,您可以指定计算是基于一个简单的球体(不太准确,更少的资源密集型)还是在球体上(更准确,更多的资源密集型) spheroid关键字参数。

MySQL不支持对地理SRS进行长度计算。

在Django更改1.11:

在旧版本中,MySQL返回原始值。

MakeValid

MakeValid T0>( EXPR T1>)¶ T2>
Django中的新功能1.10。

可用性PostGIS,SpatiaLite(LWGEOM)

接受地理字段或表达式,并尝试将值转换为有效几何,而不会丢失任何输入顶点。 已经有效的几何数据没有变化地返回。 简单的多边形可能会成为多边形,结果可能比输入的维度更小。

在Django更改1.11:

添加了SpatiaLite支持。

MemSize

MemSize表达式** extra

可用性PostGIS

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

NumGeometries

NumGeometries表达式** extra

可用性:MySQL,PostGIS,Oracle,SpatiaLite

Accepts a single geographic field or expression and returns the number of geometries if the geometry field is a collection (e.g., a GEOMETRYCOLLECTION or MULTI* field). 对于单个几何返回1。

在MySQL上,为单个几何返回None

NumPoints

NumPoints表达式** extra

可用性:MySQL,PostGIS,Oracle,SpatiaLite

接受单个地理字段或表达式并返回几何域中第一个线串中的点数;否则返回None

Perimeter

周长表达式** extra

可用性PostGIS,Oracle,SpatiaLite

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

PointOnSurface

PointOnSurface表达式** extra

可用性PostGIS,Oracle,SpatiaLite

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

Reverse

反向表达式** extra

可用性PostGIS,Oracle,SpatiaLite

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

Scale

表达式xyz = 0.0**额外 T5>)¶ T6>

可用性PostGIS,SpatiaLite

接受单个地理字段或表达式,并通过将它们与xy和可选的z参数相乘来返回具有缩放坐标的几何。

SnapToGrid

SnapToGrid表达式* args** extra

可用性PostGIS,SpatiaLite

接受单个地理字段或表达式,并返回一个几何图形,其中所有点都贴在给定的网格上。 几何被贴到网格上取决于给定数量(float,integer或long)的数值。

参数数量 描述
1 单个尺寸可以同时捕捉X和Y格栅。
2 X和Y尺寸将网格捕捉到。
4 X,Y大小和相应的X,Y起源。

SymDifference

SymDifferenceexpr1expr2** extra

可用性:MySQL(≥5.6.1),PostGIS,Oracle,SpatiaLite

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

在Django更改1.10:

添加了MySQL支持。

Transform

转换表达式srid** extra

可用性PostGIS,Oracle,SpatiaLite

接受地理字段或表达式和SRID整数代码,并将转换的几何返回到由srid参数指定的空间参考系统。

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

Translate

表达式xyz = 0.0**额外 T5>)¶ T6>

可用性PostGIS,SpatiaLite

接受单个地理字段或表达式,并返回其坐标由xy和可选的z数字参数偏移的几何。

Union

联合expr1expr2** extra

可用性:MySQL(≥5.6.1),PostGIS,Oracle,SpatiaLite

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