Spec-Zone.ru › Django 1.11

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

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

Пример:

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

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

Краткое описание функций:

Измерение Связи Операции Редакторы Формат вывода Разное
Area BoundingCircle Difference ForceRHR AsGeoJSON IsValid
Distance Centroid Intersection MakeValid AsGML MemSize
Length Envelope SymDifference Reverse AsKML NumGeometries
Perimeter PointOnSurface Union Scale AsSVG NumPoints
SnapToGrid GeoHash
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)

Доступность: 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.
precision Может быть использован для указания количества значащих цифр для координат в представлении GeoJSON — значение по умолчанию равно 8.

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.

BoundingCircle

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

Доступность: PostGIS, Oracle (≥ 12.1.0.2)

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

Параметр 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

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

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

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

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:

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

Envelope

class Envelope(expression, **extra)

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

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

ForceRHR

class ForceRHR(expression, **extra)

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

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

GeoHash

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

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

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

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

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

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

Intersection

class Intersection(expr1, expr2, **extra)

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

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

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

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

IsValid

class IsValid(expr)
Новое в Django 1.10.

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

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

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

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

Length

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

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

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

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

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

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

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

MakeValid

class MakeValid(expr)
Новое в Django 1.10.

Доступность: 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

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

Perimeter

class Perimeter(expression, **extra)

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

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

PointOnSurface

class PointOnSurface(expression, **extra)

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

Принимает одно географическое поле или выражение и возвращает Point геометрию, гарантированно лежащую на поверхности поля; в противном случае возвращает 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

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

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

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

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/1.11/ref/contrib/gis/functions/

Spec-Zone.ru

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