Объекты измерения
Модуль django.contrib.gis.measure содержит объекты, которые позволяют удобно представлять единицы измерения расстояния и площади. [1] В частности, он реализует два объекта, Distance и Area — оба из которых могут быть получены через удобные алиасы D и A, соответственно.
Пример
Объекты 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 | Ярд (Sears) |
clarke_ft | Фут по Кларку |
chain | Цепь |
chain_benoit | Цепь (Benoit) |
chain_sears | Цепь (Sears) |
british_chain_benoit | Британская цепь (Benoit 1895 B) |
british_chain_sears_truncated | Британская цепь (Sears 1922 усеченная) |
gold_coast_ft | Фут Золотого Берега |
link | Связка |
link_benoit | Связка (Benoit) |
link_sears | Связка (Sears) |
clarke_link | Связка Кларка |
fathom | Сажень |
rod | Жердь |
furlong | Фурлонг |
nm | Морская миля |
nm_uk | Морская миля (Великобритания) |
german_m | Немецкий правовой метр |
Примечание
Атрибуты Area такие же, как и атрибуты Distance, за исключением того, что они имеют префикс sq_ (единицы площади квадратные). Например, Area(sq_m=2) создаёт объект Area, представляющий две квадратные единицы метра.
В дополнение к единицам с префиксом sq_ также поддерживаются следующие единицы для Area:
| Атрибут единицы | Полное название или алиас(ы) |
|---|---|
ha | Гектар |
Добавлена поддержка единицы ha.
API измерений
Distance
-
class Distance(**kwargs)[source] -
Для инициализации объекта расстояния передайте ключевое слово, соответствующее желаемому имени атрибута единицы, установленное с желаемым значением. Например, следующее создаёт объект расстояния, представляющий 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)[source] -
Для инициализации объекта площади передайте ключевое слово, соответствующее желаемому имени атрибута единицы, установленное с желаемым значением. Например, следующее создаёт объект площади, представляющий 5 квадратных миль:
>>> 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 о размерных единицах для робототехники. |
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.1/ref/contrib/gis/measure/