Spec-Zone.ru › Django 2.0

Функции географической базы данных

Функции, описанные на этой странице, позволяют пользователям получить доступ к функциям географической базы данных, которые можно использовать в аннотациях, агрегациях или фильтрах в Django.

Пример:

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

Не все бэкэнды поддерживают все функции, поэтому обратитесь к документации каждой функции, чтобы узнать, поддерживает ли ваш бэкэнд базы данных нужную вам функцию. Если вы вызовете географическую функцию на бэкэнде, который её не поддерживает, вы получите NotImplementedError исключение.

Резюме функций:

Измерение Взаимоотношения Операции Редакторы Формат вывода Разное
Area Azimuth Difference ForceRHR AsGeoJSON IsValid
Distance BoundingCircle Intersection MakeValid AsGML MemSize
Length Centroid SymDifference Reverse AsKML NumGeometries
Perimeter Envelope Union Scale AsSVG NumPoints
LineLocatePoint SnapToGrid GeoHash
PointOnSurface Transform
Translate

Площадь

class Area(expression, **extra)

Доступность: MySQL, Oracle, PostGIS, SpatiaLite

Принимает единственное географическое поле или выражение и возвращает площадь поля как меру Area.

MySQL и SpatiaLite без LWGEOM не поддерживают вычисления площади в географических системах координат.

Изменено в Django 1.11:

В более старых версиях на MySQL возвращалось значение без преобразования при использовании с проекциями.

AsGeoJSON

class AsGeoJSON(expression, bbox=False, crs=False, precision=8, **extra)

Доступность: MySQL (≥ 5.7.5), PostGIS, SpatiaLite

Принимает единственное географическое поле или выражение и возвращает представление геометрии в формате GeoJSON. Обратите внимание, что результат не является полной структурой GeoJSON, а только содержимое ключа geometry структуры GeoJSON. См. также Сериализатор GeoJSON.

Пример:

>>> City.objects.annotate(json=AsGeoJSON('point')).get(name='Chicago').json
{"type":"Point","coordinates":[-87.65018,41.85039]}
Аргумент ключевого слова Описание
bbox Установите это в True, если хотите включить прямоугольник ограничительной рамки в возвращаемый GeoJSON.
crs Установите это в True, если хотите включить систему координат в возвращаемый GeoJSON. Игнорируется в MySQL.
precision Может использоваться для указания количества значащих цифр координат в представлении GeoJSON — значение по умолчанию равно 8.
Изменено в Django 2.0:

Добавлена поддержка MySQL.

AsGML

class AsGML(expression, version=2, precision=8, **extra)

Доступность: Oracle, 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.
Изменено в Django 1.11:

Добавлена поддержка Oracle.

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.

Азимут

class Azimuth(point_a, point_b, **extra)
Новое в Django 2.0.

Доступность: PostGIS, SpatiaLite (LWGEOM)

Возвращает азимут в радианах сегмента, определённого заданными геометрическими точками, или None если две точки совпадают. Азимут — это угол, отсчитываемый от севера, и он положителен по часовой стрелке: север = 0; восток = π/2; юг = π; запад = 3π/2.

BoundingCircle

class BoundingCircle(expression, num_seg=48, **extra)

Доступность: PostGIS, Oracle

Принимает единственное географическое поле или выражение и возвращает наименьший круг, полностью содержащий геометрию.

Параметр num_seg используется только в PostGIS.

Изменено в Django 1.11:

Добавлена поддержка Oracle.

Centroid

class Centroid(expression, **extra)

Доступность: MySQL, PostGIS, Oracle, SpatiaLite

Принимает единственное географическое поле или выражение и возвращает centroid значение геометрии.

Difference

class Difference(expr1, expr2, **extra)

Доступность: MySQL (≥ 5.6.1), PostGIS, Oracle, SpatiaLite

Принимает два географических поля или выражения и возвращает геометрическую разность, то есть часть геометрии А, которая не пересекается с геометрией B.

Distance

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

Доступность: MySQL (≥ 5.6.1), PostGIS, Oracle, SpatiaLite

Принимает два географических поля или выражения и возвращает расстояние между ними как объект Distance. В MySQL возвращается значение типа float, когда координаты географические.

В бэкендах, которые поддерживают вычисление расстояния по географическим координатам, автоматически выбирается соответствующая функция бэкенда в зависимости от значения SRID геометрий (например, ST_DistanceSphere в PostGIS).

При вычислении расстояний по географическим (угловым) координатам, как это происходит с SRID по умолчанию WGS84 (4326), вы можете установить ключевое слово spheroid для выбора, основываться ли на расчёте на простой сфере (менее точный, менее ресурсоёмкий) или на сфероиде (более точный, более ресурсоёмкий).

В следующем примере вычисляется расстояние от города Хобарт до каждой другой PointField в наборе запросов AustraliaCity:

>>> 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 — значение расстояния в километрах. См. Объекты измерения для подробной информации об использовании и списка Поддерживаемых единиц.

Изменено в Django 1.11:

В более старых версиях при использовании на спроецированных SRS в MySQL возвращалось значение типа float.

Envelope

class Envelope(expression, **extra)

Доступность: MySQL, PostGIS, SpatiaLite

Принимает единственное географическое поле или выражение и возвращает геометрию, представляющую ограничивающую прямоугольную область геометрии.

ForceRHR

class ForceRHR(expression, **extra)

Доступность: PostGIS

Принимает единственное географическое поле или выражение и возвращает изменённую версию многоугольника/многоугольника, в котором все вершины следуют правилу правой руки.

GeoHash

class GeoHash(expression, precision=None, **extra)

Доступность: MySQL (≥ 5.7.5), PostGIS, SpatiaLite (LWGEOM)

Принимает единственное географическое поле или выражение и возвращает представление геометрии в формате GeoHash.

Ключевой параметр precision управляет количеством символов в результате.

Изменено в Django 2.0:

Добавлена поддержка MySQL.

Intersection

class Intersection(expr1, expr2, **extra)

Доступность: MySQL (≥ 5.6.1), PostGIS, Oracle, SpatiaLite

Принимает два географических поля или выражения и возвращает геометрическое пересечение между ними.

IsValid

class IsValid(expr)

Доступность: MySQL (≥ 5.7.5), PostGIS, Oracle, SpatiaLite (LWGEOM)

Принимает географическое поле или выражение и проверяет, является ли значение допустимой геометрией. Возвращает True если его значение является допустимой геометрией и False в противном случае.

Изменено в Django 1.11:

Добавлена поддержка SpatiaLite и Oracle.

Изменено в Django 2.0:

Добавлена поддержка MySQL.

Length

class Length(expression, spheroid=True, **extra)

Доступность: MySQL, Oracle, PostGIS, SpatiaLite

Принимает единственное географическое поле линий или полилиний или выражение и возвращает его длину как меру Distance.

В PostGIS и SpatiaLite, когда координаты географические (угловые), вы можете указать, следует ли выполнять вычисление на основе простой сферы (менее точная, менее ресурсоёмкая) или на основе сфероида (более точная, более ресурсоёмкая) с помощью ключевого аргумента spheroid.

MySQL не поддерживает вычисления длины для географических SRS.

Изменено в Django 1.11:

В более старых версиях в MySQL возвращалось значение типа float.

LineLocatePoint

class LineLocatePoint(linestring, point, **extra)
Новое в Django 2.0.

Доступность: PostGIS, SpatiaLite

Возвращает значение типа float от 0 до 1, представляющее положение ближайшей точки на linestring к заданной point, как долю 2D длины линии.

MakeValid

class MakeValid(expr)

Доступность: PostGIS, SpatiaLite (LWGEOM)

Принимает географическое поле или выражение и пытается преобразовать значение в допустимую геометрию, не теряя входных вершин. Уже допустимые геометрии возвращаются без изменений. Простые многоугольники могут стать многоугольниками, а результат может иметь более низкую размерность, чем входные данные.

Изменено в Django 1.11:

Добавлена поддержка SpatiaLite.

MemSize

class MemSize(expression, **extra)

Доступность: PostGIS

Принимает единственное географическое поле или выражение и возвращает размер занимаемой памяти (в байтах) в поле геометрии.

NumGeometries

class NumGeometries(expression, **extra)

Доступность: MySQL, PostGIS, Oracle, SpatiaLite

Принимает единственное географическое поле или выражение и возвращает количество геометрий, если поле геометрии является коллекцией (например, поле GEOMETRYCOLLECTION или MULTI*). Для одиночных геометрий возвращает 1.

В MySQL для одиночных геометрий возвращается None.

NumPoints

class NumPoints(expression, **extra)

Доступность: MySQL, PostGIS, Oracle, SpatiaLite

Принимает единственное географическое поле или выражение и возвращает количество точек в геометрии.

В MySQL для геометрий, отличных от LINESTRING, возвращается None.

Изменено в Django 1.11:

Добавлена поддержка SpatiaLite для геометрий, отличных от LINESTRING.

Perimeter

class Perimeter(expression, **extra)

Доступность: PostGIS, Oracle, SpatiaLite

Принимает одно географическое поле или выражение и возвращает периметр геометрического поля в виде объекта Distance.

PointOnSurface

class PointOnSurface(expression, **extra)

Доступность: PostGIS, Oracle, SpatiaLite

Принимает одно географическое поле или выражение и возвращает геометрию, гарантированно расположенную на поверхности поля; в противном случае возвращает None.

Reverse

class Reverse(expression, **extra)

Доступность: PostGIS, Oracle, SpatiaLite

Принимает одно географическое поле или выражение и возвращает геометрию с инвертированными координатами.

Scale

class Scale(expression, x, y, z=0.0, **extra)

Доступность: PostGIS, SpatiaLite

Принимает одно географическое поле или выражение и возвращает геометрию с масштабированными координатами, умножив их на x, y, и необязательные z параметры.

SnapToGrid

class SnapToGrid(expression, *args, **extra)

Доступность: PostGIS, SpatiaLite

Принимает одно географическое поле или выражение и возвращает геометрию с привязанными ко всем точкам к заданной сетке. Способ привязки геометрии к сетке зависит от количества числовых (вещественных, целочисленных или длинных) аргументов.

Количество аргументов Описание
1 Один размер для привязки сетки по осям X и Y.
2 Размеры сетки по осям X и Y для привязки.
4 Размеры сетки по осям X и Y и соответствующие начала отсчёта по осям X и Y.

SymDifference

class SymDifference(expr1, expr2, **extra)

Доступность: MySQL (≥ 5.6.1), PostGIS, Oracle, SpatiaLite

Принимает два географических поля или выражения и возвращает геометрическую симметрическую разность (объединение без пересечения) между заданными параметрами.

Transform

class Transform(expression, srid, **extra)

Доступность: PostGIS, Oracle, SpatiaLite

Принимает географическое поле или выражение и целочисленный код SRID, и возвращает преобразованную геометрию в систему пространственных координат, указанную параметром srid.

Примечание

Какой системе пространственных координат соответствует целочисленный SRID, может зависеть от используемой пространственной базы данных. Другими словами, номера SRID, используемые для Oracle, необязательно совпадают с номерами, используемыми PostGIS.

Translate

class Translate(expression, x, y, z=0.0, **extra)

Доступность: PostGIS, SpatiaLite

Принимает одно географическое поле или выражение и возвращает геометрию со смещенными координатами на x, y, и необязательные z числовые параметры.

Union

class Union(expr1, expr2, **extra)

Доступность: MySQL (≥ 5.6.1), PostGIS, Oracle, SpatiaLite

Принимает два географических поля или выражения и возвращает объединение обеих геометрий.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.0/ref/contrib/gis/functions/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API