• 3.1
  • 5.0
  • 6.1
  • Версия документации: 3.2

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

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

Например:

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

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

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

Измерение

Отношения

Операции

Редакторы

Выходной формат

Разнообразный

Площадь

Азимут

Разница

ForcePolygonCW

AsGeoJSON

Действителен

Расстояние

BoundingCircle

Пересечение

MakeValid

AsGML

MemSize

GeometryDistance

Центроид

SymDifference

Реверс

AsKML

NumGeometries

Длина

Конверт

Союз

Масштаб

AsSVG

NumPoints

Периметр

LineLocatePoint

SnapToGrid

AsWKB

PointOnSurface

Трансформировать

AsWKT

Перевести

GeoHash

Площадь

class Area(expression, **extra)

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

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

MySQL and SpatiaLite without LWGEOM don’t support area calculations on geographic SRSes.

AsGeoJSON

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

Availability: MariaDB (≥ 10.2.4), MySQL (≥ 5.7.5), Oracle, 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. Игнорируется в Oracle.

crs

Установите для этого параметра значение «True», если вы хотите, чтобы система координат была включена в возвращаемый GeoJSON. Игнорируется в MySQL и Oracle.

точность

Его можно использовать для указания количества значащих цифр координат в представлении GeoJSON — значение по умолчанию — 8. Игнорируется в Oracle.

Changed in Django 3.1:

Oracle support was added.

АсГМЛ

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

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

АскМЛ

class AsKML(expression, precision=8, **extra)

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

Принимает одно географическое поле или выражение и возвращает представление геометрии в виде языка разметки Keyhole (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.

Changed in Django 3.1:

The undocumented version parameter was removed.

AsSVG

class AsSVG(expression, relative=False, precision=8, **extra)

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

Принимает одно географическое поле или выражение и возвращает представление геометрии в формате `Scalable Vector Graphics (SVG)`__.

Ключевое слово Аргумент

Описание

родственник

Если установлено значение «True», данные пути будут реализованы в виде относительных перемещений. По умолчанию установлено значение «False», что означает, что вместо этого используются абсолютные перемещения.

точность

Это ключевое слово можно использовать для указания количества значащих цифр координат в представлении SVG — значение по умолчанию — 8.

АсВКБ

class AsWKB(expression, **extra)
New in Django 3.1.

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

Accepts a single geographic field or expression and returns a `Well-known binary (WKB)`__ representation of the geometry.

Например:

>>> bytes(City.objects.annotate(wkb=AsWKB('point')).get(name='Chelyabinsk').wkb)
b'\x01\x01\x00\x00\x00]3\xf9f\x9b\x91K@\x00X\x1d9\xd2\xb9N@'

АсВКТ

class AsWKT(expression, **extra)
New in Django 3.1.

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

Accepts a single geographic field or expression and returns a `Well-known text (WKT)`__ representation of the geometry.

Например:

>>> City.objects.annotate(wkt=AsWKT('point')).get(name='Chelyabinsk').wkt
'POINT (55.137555 61.451728)'

Азимут

class Azimuth(point_a, point_b, **extra)

Availability: PostGIS, SpatiaLite (LWGEOM)

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

Ограничивающийкруг

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

Availability: PostGIS, Oracle

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

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

Центроид

class Centroid(expression, **extra)

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

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

Разница

class Difference(expr1, expr2, **extra)

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

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

Расстояние

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

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

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

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

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

In the following example, the distance from the city of Hobart to every other PointField in the AustraliaCity queryset is calculated:

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

Конверт

class Envelope(expression, **extra)

Availability: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

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

ForcePolygonCW

class ForcePolygonCW(expression, **extra)

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

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

ГеоХэш

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

Availability: MySQL (≥ 5.7.5), PostGIS, SpatiaLite (LWGEOM)

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

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

GeometryDistance

class GeometryDistance(expr1, expr2, **extra)

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

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

Перекресток

class Intersection(expr1, expr2, **extra)

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

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

Действителен

class IsValid(expr)

Availability: MySQL (≥ 5.7.5), PostGIS, Oracle, SpatiaLite (LWGEOM)

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

Длина

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

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

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

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

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

LineLocatePoint

class LineLocatePoint(linestring, point, **extra)

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

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

MakeValid

class MakeValid(expr)

Availability: PostGIS, SpatiaLite (LWGEOM)

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

MemSize

class MemSize(expression, **extra)

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

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

NumGeometries

class NumGeometries(expression, **extra)

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

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

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

NumPoints

class NumPoints(expression, **extra)

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

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

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

Периметр

class Perimeter(expression, **extra)

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

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

ТочкаНаПоверхности

class PointOnSurface(expression, **extra)

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

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

Реверс

class Reverse(expression, **extra)

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

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

Масштаб

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)

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

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

Трансформировать

class Transform(expression, srid, **extra)

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

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

Примечание

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

Перевести

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

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

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

Союз

class Union(expr1, expr2, **extra)

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

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

Back to Top