Spec-Zone.ru › Django 5.1

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

Функции, описанные на этой странице, позволяют пользователям обращаться к функциям географической базы данных, которые можно использовать в аннотациях, агрегациях или фильтрах в 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

Площадь

class Area(expression, **extra) [source]

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

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

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

Представление в формате GeoJSON

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

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

Представление в формате GML

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

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

Представление в формате KML

class AsKML(expression, precision=8, **extra) [source]

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

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

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

Ключевой аргумент Описание
relative Если установлено в True, данные пути будут реализованы в терминах относительных перемещений. По умолчанию False, что означает, что вместо этого используются абсолютные перемещения.
precision Этот ключевой аргумент может быть использован для указания количества значащих цифр для координат в представлении SVG – значение по умолчанию равно 8.

AsWKB

class AsWKB(expression, **extra) [source]

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

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

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

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

BoundingCircle

class BoundingCircle(expression, num_seg=48, **extra) [source]

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

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

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

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

Была добавлена поддержка SpatiaLite 5.1+.

Centroid

class Centroid(expression, **extra) [source]

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

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

ClosestPoint

Новое в Django 5.0.
class ClosestPoint(expr1, expr2, **extra) [source]

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

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

Difference

class Difference(expr1, expr2, **extra) [source]

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

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

Distance

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

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

Envelope

class Envelope(expression, **extra) [source]

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

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

ForcePolygonCW

class ForcePolygonCW(expression, **extra) [source]

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

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

FromWKB

class FromWKB(expression, srid=0, **extra) [source]

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

Создаёт геометрию из двоичного представления Well-known (WKB). Необязательный аргумент srid позволяет указать SRID полученной геометрии. srid игнорируется в Oracle.

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

Был добавлен аргумент srid.

FromWKT

class FromWKT(expression, srid=0, **extra) [source]

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

Создаёт геометрию из текстового представления Well-known (WKT). Необязательный аргумент srid позволяет указать SRID полученной геометрии. srid игнорируется в Oracle.

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

Был добавлен аргумент srid.

GeoHash

class GeoHash(expression, precision=None, **extra) [source]

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

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

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

GeometryDistance

class GeometryDistance(expr1, expr2, **extra) [source]

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

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

Intersection

class Intersection(expr1, expr2, **extra) [source]

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

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

IsEmpty

class IsEmpty(expr) [source]

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

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

IsValid

class IsValid(expr) [source]

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

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

Length

class Length(expression, spheroid=True, **extra) [source]

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

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

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

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

LineLocatePoint

class LineLocatePoint(linestring, point, **extra) [source]

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

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

MakeValid

class MakeValid(expr) [source]

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

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

MemSize

class MemSize(expression, **extra) [source]

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

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

NumGeometries

class NumGeometries(expression, **extra) [source]

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

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

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

NumPoints

class NumPoints(expression, **extra) [source]

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

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

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

Perimeter

class Perimeter(expression, **extra) [source]

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

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

PointOnSurface

class PointOnSurface(expression, **extra) [source]

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

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

Reverse

class Reverse(expression, **extra) [source]

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

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

Scale

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

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

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

SnapToGrid

class SnapToGrid(expression, *args, **extra) [source]

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

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

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

SymDifference

class SymDifference(expr1, expr2, **extra) [source]

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

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

Transform

class Transform(expression, srid, **extra) [source]

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

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

Примечание

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

Translate

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

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

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

Union

class Union(expr1, expr2, **extra) [source]

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

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

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

Spec-Zone.ru

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