该页面上记录的功能允许用户访问地理数据库功能,以便在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进行区域计算。
在旧版本中,当在投影SRS上使用时,MySQL返回原始值。
AsGeoJSON
¶AsGeoJSON
(表达式,bbox = False,crs = False,precision = 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 = 2,precision = 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。 |
添加了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 = False,precision = 8,** extra )¶ T5>可用性:PostGIS,SpatiaLite
接受单个地理字段或表达式并返回几何的可伸缩矢量图形(SVG)表示。
关键词参数 | 描述 |
---|---|
相对的 |
如果设置为True ,路径数据将以相对移动方式实现。 默认为False ,这意味着使用绝对移动。 |
精确 |
该关键字可用于指定SVG表示中坐标的有效位数 - 默认值为8。 |
BoundingCircle
¶BoundingCircle
(表达式,num_seg = 48,** extra)¶接受单个地理字段或表达式,并返回可以完全包含几何的最小圆形多边形。
num_seg
参数仅用于PostGIS。
添加了Oracle支持。
Centroid
¶Centroid
(表达式,** extra)¶可用性:MySQL,PostGIS,Oracle,SpatiaLite
接受单个地理字段或表达式并返回几何的centroid
值。
Difference
¶差异
(expr1,expr2,** extra)¶可用性:MySQL(≥5.6.1),PostGIS,Oracle,SpatiaLite
接受两个地理字段或表达式并返回几何差异,即与几何B不相交的几何A的一部分。
添加了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。
在旧版本中,当在投影SRS上使用时,MySQL返回原始值。
GeoHash
¶GeoHash
(表达式,precision =无,** extra)¶可用性:PostGIS,SpatiaLite(LWGEOM)
接受单个地理字段或表达式并返回几何的GeoHash表示。
precision
关键字参数控制结果中的字符数。
添加了SpatiaLite支持。
Intersection
¶交点
(expr1,expr2,** extra)¶可用性:MySQL(≥5.6.1),PostGIS,Oracle,SpatiaLite
接受两个地理字段或表达式并返回它们之间的几何交集。
添加了MySQL支持。
IsValid
¶的IsValid T0>( EXPR T1>)¶ T2>
可用性:PostGIS,Oracle,SpatiaLite(LWGEOM)
接受地理字段或表达式,并测试该值是否形成良好。
如果其值为有效几何,则返回True
,否则返回False
。
添加了SpatiaLite和Oracle支持。
Length
¶长度
(表达式,spheroid = True,** extra)¶可用性:MySQL,Oracle,PostGIS,SpatiaLite
接受一个单一的地理线索或多列表示字段或表达式,并返回其长度作为Distance
度量。
在PostGIS和SpatiaLite上,当坐标为大地测量(角度)时,您可以指定计算是基于一个简单的球体(不太准确,更少的资源密集型)还是在球体上(更准确,更多的资源密集型) spheroid
关键字参数。
MySQL不支持对地理SRS进行长度计算。
在旧版本中,MySQL返回原始值。
MakeValid
¶ MakeValid T0>( EXPR T1>)¶ T2>
可用性:PostGIS,SpatiaLite(LWGEOM)
接受地理字段或表达式,并尝试将值转换为有效几何,而不会丢失任何输入顶点。 已经有效的几何数据没有变化地返回。 简单的多边形可能会成为多边形,结果可能比输入的维度更小。
添加了SpatiaLite支持。
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
。
PointOnSurface
¶PointOnSurface
(表达式,** extra)¶可用性:PostGIS,Oracle,SpatiaLite
接受单个地理字段或表达式,并返回保证位于字段表面上的Point
几何;否则返回None
。
Scale
¶
(表达式,x,y,z = 0.0,**额外 T5>)¶ T6>可用性:PostGIS,SpatiaLite
接受单个地理字段或表达式,并通过将它们与x
,y
和可选的z
参数相乘来返回具有缩放坐标的几何。
SnapToGrid
¶SnapToGrid
(表达式,* args,** extra)¶可用性:PostGIS,SpatiaLite
接受单个地理字段或表达式,并返回一个几何图形,其中所有点都贴在给定的网格上。 几何被贴到网格上取决于给定数量(float,integer或long)的数值。
参数数量 | 描述 |
---|---|
1 | 单个尺寸可以同时捕捉X和Y格栅。 |
2 | X和Y尺寸将网格捕捉到。 |
4 | X,Y大小和相应的X,Y起源。 |
SymDifference
¶SymDifference
(expr1,expr2,** extra)¶可用性:MySQL(≥5.6.1),PostGIS,Oracle,SpatiaLite
接受两个地理字段或表达式,并返回给定参数之间的几何对称差(无交集的联合)。
添加了MySQL支持。
Transform
¶转换
(表达式,srid,** extra)¶可用性:PostGIS,Oracle,SpatiaLite
接受地理字段或表达式和SRID整数代码,并将转换的几何返回到由srid
参数指定的空间参考系统。
注
整数SRID对应的空间参考系统可能取决于所使用的空间数据库。 换句话说,用于Oracle的SRID号码不一定与PostGIS使用的号码相同。
2017年9月6日