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

Функции, описанные на этой странице, позволяют пользователям получать доступ к функциям географической базы данных, которые можно использовать в аннотациях, агрегатах или фильтрах в 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 IsValid
Distance BoundingCircle Intersection MakeValid AsGML MemSize
GeometryDistance Centroid SymDifference Reverse AsKML NumGeometries
Length Envelope Union Scale AsSVG NumPoints
Perimeter LineLocatePoint   SnapToGrid AsWKB  
PointOnSurface   Transform AsWKT  
    Translate GeoHash  

Area

classArea ( выражение , ** extra )

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

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

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

AsGeoJSON

classAsGeoJSON ( выражение , bbox = False , crs = False , precision = 8 , ** extra )

Доступность : 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.
precision Его можно использовать для указания количества значащих цифр для координат в представлении GeoJSON - значение по умолчанию - 8. Игнорируется в Oracle.
Изменено в Django 3.1:

Добавлена ​​поддержка Oracle.

AsGML

classAsGML ( выражение , версия = 2 , точность = 8 , ** дополнительно )

Доступность : 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>
Аргумент ключевого слова Описание
precision Задает количество значащих цифр для координат в представлении GML - значение по умолчанию - 8. Игнорируется в Oracle.
version Задает версию GML для использования: 2 (по умолчанию) или 3.

AsKML

classAsKML ( выражение , точность = 8 , ** дополнительно )

Доступность : 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>
Аргумент ключевого слова Описание
precision Это ключевое слово может использоваться для указания количества значащих цифр для координат в представлении KML - значение по умолчанию - 8.
Изменено в Django 3.1:

Недокументированный versionпараметр удален.

AsSVG

classAsSVG ( выражение , relative = False , precision = 8 , ** extra )

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

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

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

AsWKB

classAsWKB ( выражение , ** extra )
Новое в Django 3.1.

Доступность : 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\[email protected]\x00X\x1d9\xd2\[email protected]'

AsWKT

classAsWKT ( выражение , ** extra )
Новое в Django 3.1.

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

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

Пример:

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

Azimuth

классAzimuth ( point_a , point_b , ** extra )

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

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

BoundingCircle

classBoundingCircle ( выражение , num_seg = 48 , ** extra )

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

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

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

Centroid

classCentroid ( выражение , ** extra )

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

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

Difference

classDifference ( expr1 , expr2 , ** extra )

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

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

Distance

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

Envelope

classEnvelope ( выражение , ** extra )

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

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

ForcePolygonCW

classForcePolygonCW ( выражение , ** extra )

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

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

GeoHash

classGeoHash ( выражение , точность = None , ** extra )

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

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

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

GeometryDistance

classGeometryDistance ( expr1 , expr2 , ** extra )

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

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

Intersection

classIntersection ( expr1 , expr2 , ** extra )

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

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

IsValid

классIsValid ( выражение )

Доступность : MySQL (≥ 5.7.5), PostGIS , Oracle, SpatiaLite (LWGEOM)

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

Length

classLength ( выражение , spheroid = True , ** extra )

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

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

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

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

LineLocatePoint

classLineLocatePoint ( linestring , point , ** extra )

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

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

MakeValid

классMakeValid ( выражение )

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

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

MemSize

classMemSize ( выражение , ** extra )

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

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

NumGeometries

classNumGeometries ( выражение , ** extra )

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

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

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

NumPoints

classNumPoints ( выражение , ** extra )

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

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

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

Perimeter

classPerimeter ( выражение , ** extra )

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

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

PointOnSurface

classPointOnSurface ( выражение , ** extra )

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

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

Reverse

classReverse ( выражение , ** extra )

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

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

Scale

classScale ( выражение , x , y , z = 0.0 , ** extra )

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

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

SnapToGrid

классSnapToGrid ( выражение , * аргументы , ** дополнительные )

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

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

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

SymDifference

classSymDifference ( expr1 , expr2 , ** extra )

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

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

Transform

classTransform ( выражение , srid , ** extra )

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

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

Примечание

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

Translate

classTranslate ( выражение , x , y , z = 0.0 , ** extra )

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

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

Union

classUnion ( expr1 , expr2 , ** extra )

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

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

Copyright ©2021 All rights reserved