测量对象 — Django 文档

来自菜鸟教程
Django/docs/2.2.x/ref/contrib/gis/measure
跳转至:导航、​搜索

测量对象

django.contrib.gis.measure 模块包含的对象允许方便地表示距离和面积测量单位。 1 具体来说,它实现了两个对象,DistanceArea——这两个对象都可以通过 DA 访问 方便的别名,分别。

示例

Distance 对象可以使用指示单元上下文的关键字参数来实例化。 在下面的示例中,两个不同的距离对象以公里 (km) 和英里 (mi) 为单位进行实例化:

>>> from django.contrib.gis.measure import D, Distance
>>> d1 = Distance(km=5)
>>> print(d1)
5.0 km
>>> d2 = D(mi=5) # `D` is an alias for `Distance`
>>> print(d2)
5.0 mi

转换很容易,只需访问首选单位属性即可获得转换后的距离量:

>>> print(d1.mi) # Converting 5 kilometers to miles
3.10685596119
>>> print(d2.km) # Converting 5 miles to kilometers
8.04672

此外,可以在距离对象之间执行算术运算:

>>> print(d1 + d2) # Adding 5 miles to 5 kilometers
13.04672 km
>>> print(d2 - d1) # Subtracting 5 kilometers from 5 miles
1.89314403881 mi

两个 Distance 对象相乘将产生一个 Area 对象,它使用平方度量单位:

>>> a = d1 * d2 # Returns an Area object.
>>> print(a)
40.2336 sq_km

要确定单元的属性缩写是什么,可以使用 unit_attname 类方法:

>>> print(Distance.unit_attname('US Survey Foot'))
survey_ft
>>> print(Distance.unit_attname('centimeter'))
cm

支持的单位

单位属性 全名或别名
km 公里,公里
mi 英里
m 米,米
yd 院子里
ft 足,足(国际)
survey_ft 我们 英尺,美国测量英尺
inch 英寸
cm 厘米
mm 毫米,毫米
um 千分尺、千分尺
british_ft 英足 (Sears 1922)
british_yd 英国船厂(Sears 1922)
british_chain_sears 英国连锁店(Sears 1922)
indian_yd 印度院子,院子(印度)
sears_yd 院子里(西尔斯)
clarke_ft 克拉克的脚
chain 链条
chain_benoit 链(贝努瓦)
chain_sears 链(西尔斯)
british_chain_benoit 英国连锁店(Benoit 1895 B)
british_chain_sears_truncated 英国连锁店(Sears 1922 截断)
gold_coast_ft 黄金海岸脚
link 链接
link_benoit 链接(贝努瓦)
link_sears 链接(西尔斯)
clarke_link 克拉克的链接
fathom
rod 竿
nm 海里
nm_uk 海里(英国)
german_m 德国法定米

笔记

Area 属性与 Distance 属性相同,只是它们以 sq_ 为前缀(面积单位本质上是正方形)。 例如,Area(sq_m=2) 创建一个代表两平方米的 Area 对象。


测量API

Distance

class Distance(**kwargs)

要初始化距离对象,请传入与所需 单元属性名称 设置所需值相对应的关键字。 例如,以下创建一个表示 5 英里的距离对象:

>>> dist = Distance(mi=5)
__getattr__(unit_att)

以对应于给定单位属性的单位返回距离值。 例如:

>>> print(dist.km)
8.04672
classmethod unit_attname(unit_name)

返回给定完整单位名称的距离单位属性名称。 例如:

>>> Distance.unit_attname('Mile')
'mi'
class D
Distance 类的别名。


Area

class Area(**kwargs)

要初始化区域对象,请传入与所需值 单元属性名称 相对应的关键字。 例如,下面创建一个代表 5 平方英里的 area 对象:

>>> a = Area(sq_mi=5)
__getattr__(unit_att)

以对应于给定单位属性的单位返回面积值。 例如:

>>> print(a.sq_km)
12.949940551680001
classmethod unit_attname(unit_name)

返回给定完整单位名称的面积单位属性名称。 例如:

>>> Area.unit_attname('Kilometer')
'sq_km'
class A
Area 类的别名。

脚注

1
Robert Coup 是测量对象的最初作者,其灵感来自 Brian Beck 在 geopy 中的工作和 Geoff Biggs 的机器人尺寸单位博士工作。