Функции географических баз данных¶
Функции, описанные на этой странице, позволяют пользователям получать доступ к функциям географических баз данных, которые можно использовать в аннотациях, агрегатах или фильтрах в Django.
Например:
>>> from django.contrib.gis.db.models.functions import Length
>>> Track.objects.annotate(length=Length("line")).filter(length__gt=100)
Не все серверные части поддерживают все функции, поэтому обратитесь к документации каждой функции, чтобы узнать, поддерживает ли ваша база данных ту функцию, которую вы хотите использовать. Если вы вызовете географическую функцию на сервере, который ее не поддерживает, вы получите исключение NotImplementedError.
Краткое описание функции:
Измерение |
Отношения |
Операции |
Редакторы |
Формат ввода |
Выходной формат |
Разнообразный |
|---|---|---|---|---|---|---|
|
|
|
||||
|
|
|
||||
|
|
|||||
|
|
|
||||
|
Площадь¶
- class Area(expression, **extra)¶
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает площадь поля как меру Area.
MySQL и SpatiaLite без LWGEOM/RTTOPO не поддерживают вычисления площади на географических SRS.
AsGeoJSON¶
- class AsGeoJSON(expression, bbox=False, crs=False, precision=8, **extra)¶
Доступность: MariaDB, MySQL, 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]}
Ключевое слово Аргумент |
Описание |
|---|---|
|
Установите для этого параметра значение «True», если вы хотите, чтобы ограничивающая рамка была включена в возвращаемый GeoJSON. Игнорируется в Oracle. |
|
Установите для этого параметра значение «True», если вы хотите, чтобы система координат была включена в возвращаемый GeoJSON. Игнорируется в MySQL и Oracle. |
|
Его можно использовать для указания количества значащих цифр координат в представлении GeoJSON — значение по умолчанию — 8. Игнорируется в Oracle. |
АсГМЛ¶
- 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. |
AsSVG¶
- class AsSVG(expression, relative=False, precision=8, **extra)¶
Доступность: PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает представление геометрии в формате `Scalable Vector Graphics (SVG)`__.
Ключевое слово Аргумент |
Описание |
|---|---|
|
Если установлено значение «True», данные пути будут реализованы в виде относительных перемещений. По умолчанию установлено значение «False», что означает, что вместо этого используются абсолютные перемещения. |
|
Это ключевое слово можно использовать для указания количества значащих цифр координат в представлении SVG — значение по умолчанию — 8. |
АсВКБ¶
- class AsWKB(expression, **extra)¶
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает «хорошо известное двоичное (WKB)» представление геометрии.
Например:
>>> 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)¶
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает представление геометрии в формате Well-known text (WKT).
Например:
>>> City.objects.annotate(wkt=AsWKT("point")).get(name="Chelyabinsk").wkt
'POINT (55.137555 61.451728)'
Азимут¶
- class Azimuth(point_a, point_b, **extra)¶
Доступность: PostGIS, SpatiaLite (LWGEOM/RTTOPO)
Возвращает азимут в радианах сегмента, определенного заданной геометрией точки, или «Нет», если две точки совпадают. Азимут представляет собой угол, отсчитываемый от севера, и положителен по часовой стрелке: север = 0; восток = π/2; юг = π; запад = 3π/2.
Ограничивающийкруг¶
- class BoundingCircle(expression, num_seg=48, **extra)¶
Доступность: PostGIS, Oracle, SpatiaLite 5.1+
Принимает одно географическое поле или выражение и возвращает наименьший круговой многоугольник, который может полностью содержать геометрию.
Параметр num_seg используется только в PostGIS.
Добавлена поддержка SpatiaLite 5.1+.
Центроид¶
- class Centroid(expression, **extra)¶
Доступность: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает значение «центроида» геометрии.
Точка Ближайшей¶
- class ClosestPoint(expr1, expr2, **extra)¶
Доступность: PostGIS, SpatiaLite
Принимает два географических поля или выражения и возвращает двумерную точку геометрии A, ближайшую к геометрии B.
Разница¶
- 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, чтобы решить, должно ли вычисление основываться на простой сфере (менее точно, менее ресурсоемко) или на сфероиде (более точно, более ресурсоемко).
В следующем примере вычисляется расстояние от города Хобарт до любого другого 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» — это значение расстояния в километрах. Подробности использования и список поддерживаемых единиц см. в документе Объекты измерения.
Конверт¶
- class Envelope(expression, **extra)¶
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает геометрию, представляющую ограничивающую рамку геометрии.
ForcePolygonCW¶
- class ForcePolygonCW(expression, **extra)¶
Доступность: PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает модифицированную версию многоугольника/мультиполигона, в которой все внешние кольца ориентированы по часовой стрелке, а все внутренние кольца ориентированы против часовой стрелки. Неполигональные геометрии возвращаются без изменений.
Из WKB¶
- class FromWKB(expression, srid=0, **extra)¶
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Создает геометрию из Well-known бинарного (WKB) представления. Необязательный аргумент srid позволяет указать SRID результирующей геометрии. srid игнорируется в Oracle.
Был добавлен аргумент srid.
Из WKT¶
- class FromWKT(expression, srid=0, **extra)¶
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Создает геометрию из представления Well-known text (WKT). Необязательный аргумент srid позволяет указать SRID результирующей геометрии. srid игнорируется в Oracle.
Был добавлен аргумент srid.
ГеоХэш¶
- class GeoHash(expression, precision=None, **extra)¶
Доступность: MySQL, PostGIS, SpatiaLite (LWGEOM/RTTOPO)
Принимает одно географическое поле или выражение и возвращает представление геометрии GeoHash__.
Аргумент ключевого слова precision контролирует количество символов в результате.
GeometryDistance¶
- class GeometryDistance(expr1, expr2, **extra)¶
Доступность: PostGIS
Принимает два географических поля или выражения и возвращает расстояние между ними. При использовании в предложении order_by() он предоставляет наборы результатов ближайших соседей с помощью индекса.
Перекресток¶
- class Intersection(expr1, expr2, **extra)¶
Доступность: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite
Принимает два географических поля или выражения и возвращает геометрическое пересечение между ними.
IsEmpty¶
- class IsEmpty(expr)¶
Доступность: PostGIS
Принимает географическое поле или выражение и проверяет, является ли значение пустой геометрией. Возвращает True, если его значение пусто, и False в противном случае.
Действителен¶
- class IsValid(expr)¶
Доступность: MySQL, PostGIS, Oracle, SpatiaLite
Принимает географическое поле или выражение и проверяет, правильно ли сформировано значение. Возвращает 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)¶
Доступность: PostGIS, SpatiaLite (LWGEOM/RTTOPO)
Принимает географическое поле или выражение и пытается преобразовать значение в допустимую геометрию без потери входных вершин. Уже допустимые геометрии возвращаются без изменений. Простые многоугольники могут стать мультиполигонами, и результат может иметь меньшую размерность, чем входные данные.
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
Принимает два географических поля или выражения и возвращает объединение обеих геометрий.