Справочник по API GIS QuerySet ¶
Пространственные поиски ¶
Пространственные запросы в этом разделе доступны как для, так GeometryField
и для RasterField
.
Для обзора см. Введение в пространственный поиск . Обзор совместимости различных запросов в зависимости от используемого пространственного механизма см. В таблице совместимости пространственного поиска .
Запросы с матрицами ¶
Все примеры в приведенной ниже ссылке относятся к геометрическим полям и входам, но эти запросы можно очень хорошо использовать с объектами массивов с обеих сторон. Если запрос не поддерживает ввод массива , ввод автоматически преобразуется в геометрический объект, когда это необходимо, с помощью функции ST_Polygon . См. Также введение в матричные запросы .
Операторы базы данных, используемые в запросах, можно разделить на три категории:
- Встроенная поддержка матрицы
N
: оператор изначально принимает матричные объекты с обеих сторон запроса, и входные данные матрицы могут смешиваться с входными геометрическими данными. - Поддержка двусторонних матриц
B
: оператор поддерживает матричные объекты только в том случае, если обе стороны запроса получают матричный ввод. Данные матрицы автоматически преобразуются в геометрические объекты в случае смешанных запросов. - Поддерживается геометрическое преобразование
C
. Запрос изначально не поддерживает матричные объекты, все матричные данные автоматически преобразуются в геометрические объекты.
В приведенных ниже примерах показан эквивалентный код SQL для запросов с различными типами поддержки матриц. Такая же схема применяется для всех пространственных запросов.
случай | Запрос | Эквивалент SQL |
---|---|---|
N, B | rast__contains=rst |
ST_Contains(rast, rst) |
N, B | rast__1__contains=(rst, 2) |
ST_Contains(rast, 1, rst, 2) |
ДО НАШЕЙ ЭРЫ | rast__contains=geom |
ST_Contains(ST_Polygon(rast), geom) |
ДО НАШЕЙ ЭРЫ | rast__1__contains=geom |
ST_Contains(ST_Polygon(rast, 1), geom) |
ДО НАШЕЙ ЭРЫ | poly__contains=rst |
ST_Contains(poly, ST_Polygon(rst)) |
ДО НАШЕЙ ЭРЫ | poly__contains=(rst, 1) |
ST_Contains(poly, ST_Polygon(rst, 1)) |
В.С. | rast__crosses=rst |
ST_Crosses(ST_Polygon(rast), ST_Polygon(rst)) |
В.С. | rast__1__crosses=(rst, 2) |
ST_Crosses(ST_Polygon(rast, 1), ST_Polygon(rst, 2)) |
В.С. | rast__crosses=geom |
ST_Crosses(ST_Polygon(rast), geom) |
В.С. | poly__crosses=rst |
ST_Crosses(poly, ST_Polygon(rst)) |
Пространственные запросы с растровыми объектами поддерживаются только движком PostGIS (в этом разделе он называется PGRaster).
bbcontains
¶
Доступность : PostGIS , MariaDB, MySQL, SpatiaLite, PGRaster (родной)
Проверяет, полностью ли ограничивающий прямоугольник геометрического или матричного поля ограничивающий прямоугольник геометрического поиска.
Пример:
Zipcode.objects.filter(poly__bbcontains=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | poly ~ geom |
MariaDB | MBRContains(poly, geom) |
MySQL | MBRContains(poly, geom) |
SpatiaLite | MbrContains(poly, geom) |
bboverlaps
¶
Доступность : PostGIS , MariaDB, MySQL, SpatiaLite, PGRaster (родной)
Проверяет, закрывает ли ограничивающий прямоугольник геометрического поля частично ограничивающий прямоугольник геометрического поиска.
Пример:
Zipcode.objects.filter(poly__bboverlaps=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | poly && geom |
MariaDB | MBROverlaps(poly, geom) |
MySQL | MBROverlaps(poly, geom) |
SpatiaLite | MbrOverlaps(poly, geom) |
contained
¶
Доступность : PostGIS , MariaDB, MySQL, SpatiaLite, PGRaster (родной)
Проверяет, полностью ли ограничивающий прямоугольник геометрического поля содержится в ограничивающем прямоугольнике геометрического поиска.
Пример:
Zipcode.objects.filter(poly__contained=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | poly @ geom |
MariaDB | MBRWithin(poly, geom) |
MySQL | MBRWithin(poly, geom) |
SpatiaLite | MbrWithin(poly, geom) |
contains
¶
Доступность : PostGIS , Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (двусторонняя)
Проверяет, содержит ли геометрическое поле в пространстве геометрический объект поиска.
Пример:
Zipcode.objects.filter(poly__contains=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Contains(poly, geom) |
оракул | SDO_CONTAINS(poly, geom) |
MariaDB | ST_Contains(poly, geom) |
MySQL | ST_Contains(poly, geom) |
SpatiaLite | Contains(poly, geom) |
В предыдущих версиях MySQL использовал MBRContains
и работал только с ограничивающими рамками.
contains_properly
¶
Наличие : PostGIS , PGRaster (двусторонний)
Возвращает, имеет True
ли геометрический объект поиска пересечение с внутренней частью геометрического поля, но не с его границами (или внешней стороной).
Пример:
Zipcode.objects.filter(poly__contains_properly=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_ContainsProperly(poly, geom) |
coveredby
¶
Доступность : PostGIS , Oracle, PGRaster (двусторонний), SpatiaLite
Проверяет, не находится ли никакая точка геометрического поля за пределами геометрического объекта поиска. [3]
Пример:
Zipcode.objects.filter(poly__coveredby=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_CoveredBy(poly, geom) |
оракул | SDO_COVEREDBY(poly, geom) |
SpatiaLite | CoveredBy(poly, geom) |
covers
¶
Доступность : PostGIS , Oracle, PGRaster (двусторонний), SpatiaLite
Проверяет, нет ли точек геометрического объекта поиска вне геометрического поля. [3]
Пример:
Zipcode.objects.filter(poly__covers=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Covers(poly, geom) |
оракул | SDO_COVERS(poly, geom) |
SpatiaLite | Covers(poly, geom) |
crosses
¶
Доступность : PostGIS , MariaDB, MySQL, SpatiaLite, PGRaster (конвертация)
Проверяет, пересекается ли геометрическое поле в пространстве с геометрическим объектом поиска.
Пример:
Zipcode.objects.filter(poly__crosses=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Crosses(poly, geom) |
MariaDB | ST_Crosses(poly, geom) |
MySQL | ST_Crosses(poly, geom) |
SpatiaLite | Crosses(poly, geom) |
Добавлена поддержка MySQL.
disjoint
¶
Доступность : PostGIS , Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (двусторонняя)
Проверяет, отличается ли геометрическое поле пространственно от геометрического объекта поиска.
Пример:
Zipcode.objects.filter(poly__disjoint=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Disjoint(poly, geom) |
оракул | SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05) |
MariaDB | ST_Disjoint(poly, geom) |
MySQL | ST_Disjoint(poly, geom) |
SpatiaLite | Disjoint(poly, geom) |
В предыдущих версиях MySQL использовал MBRDisjoint
и работал только с ограничивающими рамками.
equals
¶
Доступность : PostGIS , Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (преобразование)
Проверяет, совпадает ли геометрическое поле в пространстве с геометрическим объектом поиска.
Пример:
Zipcode.objects.filter(poly__equals=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Equals(poly, geom) |
оракул | SDO_EQUAL(poly, geom) |
MariaDB | ST_Equals(poly, geom) |
MySQL | ST_Equals(poly, geom) |
SpatiaLite | Equals(poly, geom) |
В предыдущих версиях MySQL использовал MBREquals
и работал только с ограничивающими рамками.
exact
, same_as
¶
Доступность : PostGIS , Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (двусторонняя)
Проверяет, "равно ли" геометрическое поле заданному геометрическому объекту. В Oracle, MySQL и Spatialite тест выполняется на пространственное равенство, а в PostGIS тест сравнивает равенство ограничивающих прямоугольников.
Пример:
Zipcode.objects.filter(poly=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | poly ~= geom |
оракул | SDO_EQUAL(poly, geom) |
MariaDB | ST_Equals(poly, geom) |
MySQL | ST_Equals(poly, geom) |
SpatiaLite | Equals(poly, geom) |
В предыдущих версиях MySQL использовал MBREquals
и работал только с ограничивающими рамками.
intersects
¶
Доступность : PostGIS , Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (двусторонняя)
Проверяет, имеет ли геометрическое поле пространственное пересечение с геометрическим объектом поиска.
Пример:
Zipcode.objects.filter(poly__intersects=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Intersects(poly, geom) |
оракул | SDO_OVERLAPBDYINTERSECT(poly, geom) |
MariaDB | ST_Intersects(poly, geom) |
MySQL | ST_Intersects(poly, geom) |
SpatiaLite | Intersects(poly, geom) |
В предыдущих версиях MySQL использовал MBRIntersects
и работал только с ограничивающими рамками.
isvalid
¶
Доступность : MySQL (≥ 5.7.5), PostGIS , Oracle, SpatiaLite
Проверяет, действителен ли геометрический объект.
Пример:
Zipcode.objects.filter(poly__isvalid=True)
двигатель | Эквивалент SQL |
---|---|
MySQL, PostGIS, SpatiaLite | ST_IsValid(poly) |
оракул | SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(poly, 0.05) = 'TRUE' |
overlaps
¶
Доступность : PostGIS , Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (двусторонняя)
Проверяет, перекрывает ли геометрическое поле геометрический объект поиска.
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Overlaps(poly, geom) |
оракул | SDO_OVERLAPS(poly, geom) |
MariaDB | ST_Overlaps(poly, geom) |
MySQL | ST_Overlaps(poly, geom) |
SpatiaLite | Overlaps(poly, geom) |
В предыдущих версиях MySQL использовал MBROverlaps
и работал только с ограничивающими рамками.
relate
¶
Доступность : PostGIS , MariaDB, Oracle, SpatiaLite, PGRaster (преобразование)
Проверяет, имеет ли геометрическое поле пространственную связь с геометрическим объектом поиска в соответствии со значениями, указанными в заданном шаблоне. Для этого поиска требуется параметр в виде кортежа ; форма зависит от космического двигателя:(géom, motif)
motif
MariaDB, PostGIS и SpatiaLite ¶
Для этих космических машин шаблон пересечения представляет собой строку из девяти символов, которая определяет пересечения между внутренней, границами и внешней частью геометрического поля и геометрического объекта поиска. Матрица пересечений можно использовать только следующие символы: 1
, 2
, T
, F
или *
. Этот тип исследования позволяет уточнить конкретную геометрическую взаимосвязь в соответствии с моделью DE-9IM. [1]
Геометрический пример:
# A tuple lookup parameter is used to specify the geometry and
# the intersection pattern (the pattern here is for 'contains').
Zipcode.objects.filter(poly__relate=(geom, 'T*T***FF*'))
SQL-эквивалент PostGIS и MariaDB:
SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')
Эквивалент SQL SpatiaLite:
SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')
Пример матрицы:
Zipcode.objects.filter(poly__relate=(rast, 1, 'T*T***FF*'))
Zipcode.objects.filter(rast__2__relate=(rast, 1, 'T*T***FF*'))
Эквивалент PostGIS SQL:
SELECT ... WHERE ST_Relate(poly, ST_Polygon(rast, 1), 'T*T***FF*')
SELECT ... WHERE ST_Relate(ST_Polygon(rast, 2), ST_Polygon(rast, 1), 'T*T***FF*')
Добавлена поддержка MariaDB.
Оракул ¶
Здесь шаблон отношений включает в себя , по меньшей мере , один из девяти каналов возможных отношений: TOUCH
, OVERLAPBDYDISJOINT
, OVERLAPBDYINTERSECT
, EQUAL
, INSIDE
, COVEREDBY
, CONTAINS
, COVERS
, ON
и ANYINTERACT
. Например, несколько строк можно объединить с помощью логического оператора ИЛИ 'inside+touch'
. [2] В строках отношений регистр не учитывается.
Пример:
Zipcode.objects.filter(poly__relate=(geom, 'anyinteract'))
Эквивалент SQL Oracle:
SELECT ... WHERE SDO_RELATE(poly, geom, 'anyinteract')
touches
¶
Доступность : PostGIS , Oracle, MariaDB, MySQL, SpatiaLite
Проверяет, касается ли геометрическое поле в пространстве геометрического объекта поиска.
Пример:
Zipcode.objects.filter(poly__touches=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Touches(poly, geom) |
MariaDB | ST_Touches(poly, geom) |
MySQL | ST_Touches(poly, geom) |
оракул | SDO_TOUCH(poly, geom) |
SpatiaLite | Touches(poly, geom) |
В предыдущих версиях MySQL использовал MBRTouches
и работал только с ограничивающими рамками.
within
¶
Доступность : PostGIS , Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (двусторонняя)
Проверяет, находится ли геометрическое поле пространственно внутри геометрического объекта поиска.
Пример:
Zipcode.objects.filter(poly__within=geom)
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Within(poly, geom) |
MariaDB | ST_Within(poly, geom) |
MySQL | ST_Within(poly, geom) |
оракул | SDO_INSIDE(poly, geom) |
SpatiaLite | Within(poly, geom) |
В предыдущих версиях MySQL использовал MBRWithin
и работал только с ограничивающими рамками.
left
¶
Доступность : PostGIS , PGRaster (конвертация)
Проверяет, находится ли ограничивающий прямоугольник геометрического поля строго слева от ограничивающего прямоугольника геометрического поиска.
Пример:
Zipcode.objects.filter(poly__left=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly << geom
right
¶
Доступность : PostGIS , PGRaster (конвертация)
Проверяет, находится ли ограничивающий прямоугольник геометрического поля строго справа от ограничивающего прямоугольника геометрического поиска.
Пример:
Zipcode.objects.filter(poly__right=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly >> geom
overlaps_left
¶
Наличие : PostGIS , PGRaster (двусторонний)
Проверяет, перекрывается ли ограничивающий прямоугольник геометрического поля или находится ли он слева от ограничивающего прямоугольника геометрического поиска.
Пример:
Zipcode.objects.filter(poly__overlaps_left=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly &< geom
overlaps_right
¶
Наличие : PostGIS , PGRaster (двусторонний)
Проверяет, перекрывается ли ограничивающий прямоугольник геометрического поля или находится ли он справа от ограничивающего прямоугольника геометрического поиска.
Пример:
Zipcode.objects.filter(poly__overlaps_right=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly &> geom
overlaps_above
¶
Доступность : PostGIS , PGRaster (конвертация)
Проверяет, перекрывается ли ограничивающий прямоугольник геометрического поля ограничивающий прямоугольник геометрического поля или находится над ним.
Пример:
Zipcode.objects.filter(poly__overlaps_above=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly |&> geom
overlaps_below
¶
Доступность : PostGIS , PGRaster (конвертация)
Проверяет, перекрывается ли ограничивающий прямоугольник поля геометрии ограничивающий прямоугольник геометрического поиска или находится ниже него.
Пример:
Zipcode.objects.filter(poly__overlaps_below=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly &<| geom
strictly_above
¶
Доступность : PostGIS , PGRaster (конвертация)
Проверяет, находится ли ограничивающий прямоугольник геометрического поля строго над ограничивающим прямоугольником геометрического поиска.
Пример:
Zipcode.objects.filter(poly__strictly_above=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly |>> geom
strictly_below
¶
Доступность : PostGIS , PGRaster (конвертация)
Проверяет, находится ли ограничивающий прямоугольник геометрического поля строго ниже ограничивающего прямоугольника геометрического поиска.
Пример:
Zipcode.objects.filter(poly__strictly_below=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly <<| geom
Дистанционный поиск ¶
Доступность : PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (родной)
Обзор построения дистанционных запросов см. Во введении по дистанционным запросам .
Запросы на дистанцию оформляются в следующей форме:
<field>__<distance lookup>=(<geometry/raster>, <distance value>[, 'spheroid'])
<field>__<distance lookup>=(<raster>, <band_index>, <distance value>[, 'spheroid'])
<field>__<band_index>__<distance lookup>=(<raster>, <band_index>, <distance value>[, 'spheroid'])
Значение, переданное в запрос расстояния, является кортежем; первые два значения являются обязательными и представляют соответственно геометрический объект, до которого должно быть вычислено расстояние, и значение расстояния (либо число в единицах поля, либо объект, Distance
либо выражение запроса ). Чтобы передать индекс полосы в запрос, используйте кортеж из 3 элементов, где второй - это индекс полосы.
Для всех поисков расстояний, кроме dwithin
необязательного значения ,, 'spheroid'
может быть добавлено ,, чтобы использовать функции вычисления сфероидального расстояния для полей с геодезической системой координат.
В PostgreSQL опция 'spheroid'
использует ST_DistanceSpheroid вместо ST_DistanceSphere . Более простая функция ST_Distance используется с системами координат проекции. Матрицы преобразуются в геометрию для запросов на основе сфероида.
distance_gt
¶
Возвращает объекты, для которых расстояние между полем геометрии и объектом геометрии поиска больше заданного значения расстояния.
Пример:
Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Distance/ST_Distance_Sphere(poly, geom) > 5 |
MariaDB | ST_Distance(poly, geom) > 5 |
MySQL | ST_Distance(poly, geom) > 5 |
оракул | SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) > 5 |
SpatiaLite | Distance(poly, geom) > 5 |
distance_gte
¶
Возвращает объекты, для которых расстояние между полем геометрии и объектом геометрии поиска больше или равно заданному значению расстояния.
Пример:
Zipcode.objects.filter(poly__distance_gte=(geom, D(m=5)))
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Distance/ST_Distance_Sphere(poly, geom) >= 5 |
MariaDB | ST_Distance(poly, geom) >= 5 |
MySQL | ST_Distance(poly, geom) >= 5 |
оракул | SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) >= 5 |
SpatiaLite | Distance(poly, geom) >= 5 |
distance_lt
¶
Возвращает объекты, для которых расстояние между полем геометрии и объектом геометрии поиска меньше заданного значения расстояния.
Пример:
Zipcode.objects.filter(poly__distance_lt=(geom, D(m=5)))
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Distance/ST_Distance_Sphere(poly, geom) < 5 |
MariaDB | ST_Distance(poly, geom) < 5 |
MySQL | ST_Distance(poly, geom) < 5 |
оракул | SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) < 5 |
SpatiaLite | Distance(poly, geom) < 5 |
distance_lte
¶
Возвращает объекты, для которых расстояние между полем геометрии и объектом геометрии поиска меньше или равно заданному значению расстояния.
Пример:
Zipcode.objects.filter(poly__distance_lte=(geom, D(m=5)))
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_Distance/ST_Distance_Sphere(poly, geom) <= 5 |
MariaDB | ST_Distance(poly, geom) <= 5 |
MySQL | ST_Distance(poly, geom) <= 5 |
оракул | SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) <= 5 |
SpatiaLite | Distance(poly, geom) <= 5 |
dwithin
¶
Возвращает объекты, для которых расстояние между полем геометрии и объектом геометрии поиска не превышает заданное значение расстояния. Обратите внимание, что вы можете предоставлять объекты только в том Distance
случае, если соответствующие геометрические объекты находятся в системе координат проекции. Для геометрических объектов географического типа необходимо использовать единицы геометрического поля (например, градусы для WGS84
).
Пример:
Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))
двигатель | Эквивалент SQL |
---|---|
PostGIS | ST_DWithin(poly, geom, 5) |
оракул | SDO_WITHIN_DISTANCE(poly, geom, 5) |
SpatiaLite | PtDistWithin(poly, geom, 5) |
Функции агрегирования ¶
Django предоставляет несколько функций агрегирования, специфичных для географических данных. Подробнее об использовании этих функций см. В тематическом руководстве по агрегированию .
Именованный параметр | Описание |
---|---|
tolerance |
Этот параметр действителен только для Oracle. Это значение допуска, используемое процедурой SDOAGGRTYPE ; документации Oracle содержит более подробную информацию. |
Пример:
>>> from django.contrib.gis.db.models import Extent, Union
>>> WorldBorder.objects.aggregate(Extent('mpoly'), Union('mpoly'))
Collect
¶
-
класс
Collect
( geo_field ) ¶
Доступность : PostGIS , SpatiaLite
Возвращает геометрический объект GEOMETRYCOLLECTION
или MULTI
из геометрического столбца. Это похоже на упрощенную версию агрегации Union
, за исключением того, что она может быть действительно быстрее, чем объединение, потому что она накапливает геометрические объекты в коллекции или нескольких геометрических объектах, не беспокоясь о слиянии объектов.
Extent
¶
-
класс
Extent
( geo_field ) ¶
Доступность : PostGIS , Oracle, SpatiaLite
Возвращает экстент всех полей geo_field
в QuerySet
виде кортежа из 4 элементов, сформированного из нижних левых и верхних правых координат.
Пример:
>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(Extent('poly'))
>>> print(qs['poly__extent'])
(-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
Extent3D
¶
-
класс
Extent3D
( geo_field ) ¶
Доступность : PostGIS
Возвращает трехмерный экстент всех полей geo_field
в QuerySet
виде 6-членного кортежа, состоящего из нижних левых и верхних правых координат (каждый раз с координатами x, y и z).
Пример:
>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(Extent3D('poly'))
>>> print(qs['poly__extent3d'])
(-96.8016128540039, 29.7633724212646, 0, -95.3631439208984, 32.782058715820, 0)
MakeLine
¶
-
класс
MakeLine
( geo_field ) ¶
Доступность : PostGIS , SpatiaLite
Возвращает строку, LineString
составленную из полей типа точки QuerySet
. В настоящее время сортировка набора запросов не действует.
Пример:
>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(MakeLine('poly'))
>>> print(qs['poly__makeline'])
LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)
Union
¶
-
класс
Union
( geo_field ) ¶
Доступность : PostGIS , Oracle, SpatiaLite
Этот метод возвращает объект, GEOSGeometry
образованный объединением всех геометрических объектов в наборе запроса. Имейте в виду, что использование Union
очень ресурсоемко и может занять много времени для больших наборов запросов.
Заметка
Если время вычисления при использовании этого метода слишком велико, рассмотрите возможность использования Collect
.
Пример:
>>> u = Zipcode.objects.aggregate(Union(poly)) # This may take a long time.
>>> u = Zipcode.objects.filter(poly__within=bbox).aggregate(Union(poly)) # A more sensible approach.
Сноски
[1] | См. Спецификацию простых функций OpenGIS для SQL , гл. 2.1.13.2, п. 2-13 (Размерно расширенная модель девяти пересечений). |
[2] | Смотрите в документации для оператора SDO_RELATE в пространственном и графики руководства разработки Oracle. |
[3] | ( 1 , 2 ) Для объяснения этой процедуры прочтите « Причуды пространственного предиката« Содержит » » Мартина Дэвиса (разработчика PostGIS). |