Функции географической базы данных ¶
Функции, описанные на этой странице, позволяют пользователям получать доступ к функциям географической базы данных, которые можно использовать в аннотациях, агрегатах или фильтрах в 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
¶
-
class
Area
( выражение , ** extra ) ¶
Доступность : MariaDB, MySQL , Oracle, PostGIS , SpatiaLite
Принимает одно географическое поле или выражение и возвращает площадь поля в качестве Area
меры.
MySQL и SpatiaLite без LWGEOM не поддерживают вычисления площади на географических SRS.
AsGeoJSON
¶
-
class
AsGeoJSON
( выражение , 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. |
Добавлена поддержка Oracle.
AsGML
¶
-
class
AsGML
( выражение , версия = 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
¶
-
class
AsKML
( выражение , точность = 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. |
Недокументированный version
параметр удален.
AsSVG
¶
-
class
AsSVG
( выражение , relative = False , precision = 8 , ** extra ) ¶
Доступность : PostGIS , SpatiaLite
Принимает одно географическое поле или выражение и возвращает представление геометрии в формате масштабируемой векторной графики (SVG) .
Аргумент ключевого слова | Описание |
---|---|
relative |
Если установлено значение True , данные пути будут реализованы в виде относительных перемещений. По умолчанию False , это означает, что вместо этого используются абсолютные ходы. |
precision |
Это ключевое слово может использоваться для указания количества значащих цифр для координат в представлении SVG - значение по умолчанию - 8. |
AsWKB
¶
-
class
AsWKB
( выражение , ** 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\[email protected]\x00X\x1d9\xd2\[email protected]'
AsWKT
¶
-
class
AsWKT
( выражение , ** extra ) ¶
Доступность : 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
¶
-
class
BoundingCircle
( выражение , num_seg = 48 , ** extra ) ¶
Доступность : PostGIS , Oracle
Принимает одно географическое поле или выражение и возвращает наименьший многоугольник круга, который может полностью содержать геометрию.
num_seg
Параметр используется только на PostGIS.
Centroid
¶
-
class
Centroid
( выражение , ** extra ) ¶
Доступность : MariaDB, MySQL , PostGIS , Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает centroid
значение геометрии.
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 необработанное значение с плавающей запятой возвращается, когда координаты являются геодезическими.
На бэкэндах, которые поддерживают вычисление расстояний по геодезическим координатам, соответствующая бэкэнд-функция автоматически выбирается в зависимости от значения 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
( выражение , ** extra ) ¶
Доступность : MariaDB, MySQL , Oracle , PostGIS , SpatiaLite
Принимает одно географическое поле или выражение и возвращает геометрию, представляющую ограничивающую рамку геометрии.
ForcePolygonCW
¶
-
class
ForcePolygonCW
( выражение , ** extra ) ¶
Доступность : PostGIS , SpatiaLite
Принимает одно географическое поле или выражение и возвращает измененную версию многоугольника / мультиполигона, в котором все внешние кольца ориентированы по часовой стрелке, а все внутренние кольца ориентированы против часовой стрелки. Неполигональная геометрия возвращается без изменений.
GeoHash
¶
-
class
GeoHash
( выражение , точность = None , ** extra ) ¶
Доступность : MySQL (≥ 5.7.5), PostGIS , SpatiaLite (LWGEOM)
Принимает одно географическое поле или выражение и возвращает представление геометрии GeoHash .
precision
Ключевое слово аргумент контролирует количество символов в результате.
GeometryDistance
¶
-
class
GeometryDistance
( expr1 , expr2 , ** extra ) ¶
Доступность : PostGIS
Принимает два географических поля или выражения и возвращает расстояние между ними. При использовании в order_by()
предложении он предоставляет наборы результатов для ближайшего соседа с помощью индекса.
Intersection
¶
-
class
Intersection
( expr1 , expr2 , ** extra ) ¶
Доступность : MariaDB, MySQL , PostGIS , Oracle, SpatiaLite
Принимает два географических поля или выражения и возвращает геометрическое пересечение между ними.
IsValid
¶
-
класс
IsValid
( выражение ) ¶
Доступность : MySQL (≥ 5.7.5), PostGIS , Oracle, SpatiaLite (LWGEOM)
Принимает географическое поле или выражение и проверяет, правильно ли сформировано значение. Возвращает, True
если его значение является допустимой геометрией, и в False
противном случае.
Length
¶
-
class
Length
( выражение , spheroid = True , ** extra ) ¶
Доступность : MariaDB, MySQL , Oracle, PostGIS , SpatiaLite
Принимает отдельную географическую строку или многострочное поле или выражение и возвращает его длину в качестве Distance
меры.
В PostGIS и SpatiaLite, когда координаты являются геодезическими (угловыми), вы можете указать, должен ли расчет быть основан на простой сфере (менее точный, менее ресурсоемкий) или на сфероиде (более точный, более ресурсоемкий) с spheroid
ключевое слово аргумент.
MySQL не поддерживает вычисления длины на географических SRS.
LineLocatePoint
¶
-
class
LineLocatePoint
( linestring , point , ** extra ) ¶
Доступность : PostGIS , SpatiaLite
Возвращает число с плавающей запятой между 0 и 1, представляющее местоположение ближайшей точки
linestring
к заданному point
, как часть длины 2D-линии.
MakeValid
¶
-
класс
MakeValid
( выражение ) ¶
Доступность : PostGIS , SpatiaLite (LWGEOM)
Принимает географическое поле или выражение и пытается преобразовать значение в допустимую геометрию, не теряя ни одной из входных вершин. Уже действительные геометрии возвращаются без изменений. Простые многоугольники могут стать мультиполигонами, и результат может иметь меньшую размерность, чем входные.
MemSize
¶
-
class
MemSize
( выражение , ** extra ) ¶
Доступность : PostGIS
Принимает одно географическое поле или выражение и возвращает размер памяти (количество байтов), занимаемый геометрическим полем.
NumGeometries
¶
-
class
NumGeometries
( выражение , ** extra ) ¶
Доступность : MariaDB, MySQL , PostGIS , Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает количество геометрических фигур, если геометрическое поле является коллекцией (например, поле GEOMETRYCOLLECTION
или MULTI*
). Возвращает 1 для одиночной геометрии.
В MySQL возвращается None
для одиночной геометрии.
NumPoints
¶
-
class
NumPoints
( выражение , ** extra ) ¶
Доступность : MariaDB, MySQL , PostGIS , Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает количество точек в геометрии.
В MySQL возвращается None
для любой негеометрии LINESTRING
.
Perimeter
¶
-
class
Perimeter
( выражение , ** extra ) ¶
Доступность : PostGIS , Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает периметр геометрического поля как Distance
объект.
PointOnSurface
¶
-
class
PointOnSurface
( выражение , ** extra ) ¶
Доступность : PostGIS , MariaDB, Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает Point
геометрию, гарантированно лежащую на поверхности поля; в противном случае возвращается None
.
Reverse
¶
-
class
Reverse
( выражение , ** extra ) ¶
Доступность : PostGIS , Oracle, SpatiaLite
Принимает одно географическое поле или выражение и возвращает геометрию с обратными координатами.
Scale
¶
-
class
Scale
( выражение , 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
¶
-
class
SymDifference
( expr1 , expr2 , ** extra ) ¶
Доступность : MariaDB, MySQL , PostGIS , Oracle, SpatiaLite
Принимает два географических поля или выражения и возвращает геометрическую симметричную разницу (объединение без пересечения) между заданными параметрами.
Transform
¶
-
class
Transform
( выражение , srid , ** extra ) ¶
Доступность : PostGIS , Oracle, SpatiaLite
Принимает географическое поле или выражение и целочисленный код SRID и возвращает преобразованную геометрию в систему пространственной привязки, указанную
srid
параметром.
Примечание
Какой системе пространственной привязки соответствует целочисленный SRID, может зависеть от используемой пространственной базы данных. Другими словами, номера SRID, используемые для Oracle, не обязательно совпадают с номерами, используемыми PostGIS.