Функции географической базы данных
Функции, документированные на этой странице, позволяют пользователям получить доступ к функциям географической базы данных для использования в аннотациях, агрегациях или фильтрах в Django.
Пример:
>>> from django.contrib.gis.db.models.functions import Length
>>> Track.objects.annotate(length=Length("line")).filter(length__gt=100)
Не все бэкэнды поддерживают все функции, поэтому обратитесь к документации каждой функции, чтобы узнать, поддерживает ли ваш бэкэнд базы данных нужную вам функцию. Если вы вызываете географическую функцию на бэкэнде, который её не поддерживает, вы получите NotImplementedError исключение.
Краткое описание функций:
| Измерение | Связи | Операции | Редакторы | Формат входных данных | Формат выходных данных | Разное |
|---|---|---|---|---|---|---|
Area | Azimuth | Difference | ForcePolygonCW | AsGeoJSON | IsEmpty | |
Distance | BoundingCircle | Intersection | MakeValid | AsGML | IsValid | |
GeometryDistance | Centroid | SymDifference | Reverse | AsKML | MemSize | |
Length | ClosestPoint | Union | Scale | AsSVG | NumGeometries | |
Perimeter |
Envelope LineLocatePoint PointOnSurface
|
SnapToGrid Transform Translate
|
FromWKB FromWKT
|
AsWKB AsWKT GeoHash
| NumPoints |
Area
-
class Area(expression, **extra)
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает площадь поля как Area меру.
MySQL и SpatiaLite без LWGEOM/RTTOPO не поддерживают вычисления площади в географических системах координат.
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]}
| Ключевой аргумент | Описание |
|---|---|
bbox | Установите значение True , если хотите, чтобы в возвращаемом GeoJSON был включен прямоугольник ограничивающей рамки. Игнорируется в Oracle. |
crs | Установите значение True , если хотите, чтобы система координат была включена в возвращаемый GeoJSON. Игнорируется в MySQL и Oracle. |
precision | Может использоваться для задания количества значащих цифр для координат в представлении GeoJSON — значение по умолчанию 8. Игнорируется в Oracle. |
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. |
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. |
AsWKB
-
class AsWKB(expression, **extra)
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает представление геометрии в формате Well-known binary (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@'
AsWKT
-
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)'
Azimuth
-
class Azimuth(point_a, point_b, **extra)
Доступность: PostGIS, SpatiaLite (LWGEOM/RTTOPO)
Возвращает азимут в радианах отрезка, определяемого заданными геометрическими точками, или None, если две точки совпадают. Азимут — это угол, отсчитываемый от севера, и он положителен по часовой стрелке: север = 0; восток = π/2; юг = π; запад = 3π/2.
BoundingCircle
-
class BoundingCircle(expression, num_seg=48, **extra)
Принимает одно географическое поле или выражение и возвращает наименьший круг, который может полностью содержать геометрию.
Параметр num_seg используется только в PostGIS.
Centroid
-
class Centroid(expression, **extra)
Доступность: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает значение centroid геометрии.
ClosestPoint
-
class ClosestPoint(expr1, expr2, **extra)
Доступность: PostGIS, SpatiaLite
Принимает два географических поля или выражения и возвращает 2-мерную точку на геометрии A, которая находится ближе всего к геометрии B.
Difference
-
class Difference(expr1, expr2, **extra)
Доступность: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite
Принимает два географических поля или выражения и возвращает геометрическую разность, то есть часть геометрии A, которая не пересекается с геометрией B.
Distance
-
class Distance(expr1, expr2, spheroid=None, **extra)
Доступность: MariaDB, MySQL, 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 — это значение расстояния в километрах. Смотрите Объекты измерений для получения подробной информации о применении и списка Поддерживаемых единиц измерения.
Envelope
-
class Envelope(expression, **extra)
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает геометрию, представляющую прямоугольник, охватывающий геометрию.
ForcePolygonCW
-
class ForcePolygonCW(expression, **extra)
Доступность: PostGIS, SpatiaLite
Принимает одно географическое поле или выражение и возвращает измененную версию многоугольника/многоугольника, в котором все внешние кольца ориентированы по часовой стрелке, а все внутренние кольца ориентированы против часовой стрелки. Неполигональные геометрии возвращаются без изменений.
FromWKB
-
class FromWKB(expression, **extra)
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Создает геометрию из представления Well-known binary (WKB).
FromWKT
-
class FromWKT(expression, **extra)
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Создаёт геометрию из представления Well-known text (WKT).
GeoHash
-
class GeoHash(expression, precision=None, **extra)
Доступность: MySQL, PostGIS, SpatiaLite (LWGEOM/RTTOPO)
Принимает одно географическое поле или выражение и возвращает представление GeoHash геометрии.
Аргумент precision управляет количеством символов в результате.
GeometryDistance
-
class GeometryDistance(expr1, expr2, **extra)
Доступность: PostGIS
Принимает два географических поля или выражения и возвращает расстояние между ними. При использовании в условии order_by() он предоставляет наборы результатов ближайших соседей с использованием индексов.
Intersection
-
class Intersection(expr1, expr2, **extra)
Доступность: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite
Принимает два географических поля или выражения и возвращает геометрическое пересечение между ними.
IsEmpty
-
class IsEmpty(expr)
Доступность: PostGIS
Принимает географическое поле или выражение и проверяет, является ли значение пустой геометрией. Возвращает True если значение пустое и False в противном случае.
IsValid
-
class IsValid(expr)
Доступность: MySQL, PostGIS, Oracle, SpatiaLite
Принимает географическое поле или выражение и проверяет, является ли значение правильно сформированной геометрией. Возвращает True если значение — это валидная геометрия, и False в противном случае.
Length
-
class Length(expression, spheroid=True, **extra)
Доступность: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite
Принимает одно географическое поле линию или полилинию, выражение и возвращает его длину как меру Distance.
В PostGIS и SpatiaLite, когда координаты геодезические (угловые), вы можете указать, должен ли вычисление основываться на простой сфере (менее точное, менее ресурсоёмкое) или на эллипсоиде (более точное, более ресурсоёмкое), используя аргумент spheroid.
MySQL не поддерживает вычисление длин на географических системах координат.
LineLocatePoint
-
class LineLocatePoint(linestring, point, **extra)
Доступность: PostGIS, SpatiaLite
Возвращает число с плавающей точкой от 0 до 1, представляющее положение ближайшей точки на linestring к заданной point, как доля длины 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 для любой не-LINESTRING геометрии возвращает None.
Perimeter
-
class Perimeter(expression, **extra)
Доступность: PostGIS, Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает периметр поля геометрии как объект Distance.
PointOnSurface
-
class PointOnSurface(expression, **extra)
Доступность: PostGIS, MariaDB, 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)
Доступность: MariaDB, MySQL, 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)
Доступность: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite
Принимает два географических поля или выражения и возвращает объединение обеих геометрий.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/ref/contrib/gis/functions/