Spec-Zone.ru › Django 4.2

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

Функции, описанные на этой странице, позволяют пользователям получить доступ к функциям географической базы данных, которые можно использовать в аннотациях, агрегациях или фильтрах в 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 Envelope Union Scale AsSVG NumGeometries
Perimeter LineLocatePoint PointOnSurface SnapToGrid Transform Translate FromWKB FromWKT AsWKB AsWKT GeoHash NumPoints

Площадь

class Area(expression, **extra)

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

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

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

Формат GeoJSON

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.

Формат GML

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.

Формат KML

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.

Формат SVG

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)

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

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

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

Centroid

class Centroid(expression, **extra)

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

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

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

Новое в Django 4.2.
class FromWKB(expression, **extra)

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

Создаёт геометрию из представления Well-known binary (WKB).

FromWKT

Новое в Django 4.2.
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

Новое в Django 4.2.
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 возвращает None для любой не-LINESTRING геометрии.

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

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

Количество аргументов Описание
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/4.2/ref/contrib/gis/functions/

Spec-Zone.ru

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