Справочник по API набора запросов GIS
Пространственные запросы
Пространственные запросы в этом разделе доступны для 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) |
| B, C | rast__contains=geom | ST_Contains(ST_Polygon(rast), geom) |
| B, C | rast__1__contains=geom | ST_Contains(ST_Polygon(rast, 1), geom) |
| B, C | poly__contains=rst | ST_Contains(poly, ST_Polygon(rst)) |
| B, C | poly__contains=(rst, 1) | ST_Contains(poly, ST_Polygon(rst, 1)) |
| C | rast__crosses=rst | ST_Crosses(ST_Polygon(rast), ST_Polygon(rst)) |
| C | rast__1__crosses=(rst, 2) | ST_Crosses(ST_Polygon(rast, 1), ST_Polygon(rst, 2)) |
| C | rast__crosses=geom | ST_Crosses(ST_Polygon(rast), geom) |
| C | 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) |
| Oracle | SDO_CONTAINS(poly, geom) |
| MariaDB | ST_Contains(poly, geom) |
| MySQL | ST_Contains(poly, geom) |
| SpatiaLite | Contains(poly, geom) |
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) |
| Oracle | 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) |
| Oracle | 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) |
disjoint
Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимная поддержка)
Проверяет, являются ли геометрическое поле и геометрия запроса пространственно непересекающимися.
Пример:
Zipcode.objects.filter(poly__disjoint=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | ST_Disjoint(poly, geom) |
| Oracle | SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05) |
| MariaDB | ST_Disjoint(poly, geom) |
| MySQL | ST_Disjoint(poly, geom) |
| SpatiaLite | Disjoint(poly, geom) |
equals
Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Преобразование)
Проверяет, равны ли геометрическое поле и геометрия запроса пространственно.
Пример:
Zipcode.objects.filter(poly__equals=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | ST_Equals(poly, geom) |
| Oracle | SDO_EQUAL(poly, geom) |
| MariaDB | ST_Equals(poly, geom) |
| MySQL | ST_Equals(poly, geom) |
| SpatiaLite | Equals(poly, geom) |
exact, same_as
Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимная поддержка)
Проверяет, «равны» ли геометрическое поле и геометрия запроса. В Oracle, MySQL и SpatiaLite это проверяет пространственное равенство, в PostGIS – равенство окружающих прямоугольников.
Пример:
Zipcode.objects.filter(poly=geom)
| Backend | SQL Equivalent |
|---|---|
| PostGIS | poly ~= geom |
| Oracle | SDO_EQUAL(poly, geom) |
| MariaDB | ST_Equals(poly, geom) |
| MySQL | ST_Equals(poly, geom) |
| SpatiaLite | Equals(poly, geom) |
id="std:fieldlookup-intersects">intersects
Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимный)
Проверяет, пересекается ли геометрическое поле с геометрией поиска.
Пример:
Zipcode.objects.filter(poly__intersects=geom)
| Backend | SQL Equivalent |
|---|---|
| PostGIS | ST_Intersects(poly, geom) |
| Oracle | SDO_OVERLAPBDYINTERSECT(poly, geom) |
| MariaDB | ST_Intersects(poly, geom) |
| MySQL | ST_Intersects(poly, geom) |
| SpatiaLite | Intersects(poly, geom) |
id="std:fieldlookup-isempty">isempty
Доступность: PostGIS
Проверяет, пуста ли геометрия.
Пример:
Zipcode.objects.filter(poly__isempty=True)
id="std:fieldlookup-isvalid">isvalid
Доступность: MySQL, PostGIS, Oracle, SpatiaLite
Проверяет, является ли геометрия валидной.
Пример:
Zipcode.objects.filter(poly__isvalid=True)
| Backend | SQL Equivalent |
|---|---|
| MySQL, PostGIS, SpatiaLite | ST_IsValid(poly) |
| Oracle | SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(poly, 0.05) = 'TRUE' |
id="std:fieldlookup-overlaps">overlaps
Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимный)
Проверяет, перекрывает ли геометрическое поле геометрию поиска.
| Backend | SQL Equivalent |
|---|---|
| PostGIS | ST_Overlaps(poly, geom) |
| Oracle | SDO_OVERLAPS(poly, geom) |
| MariaDB | ST_Overlaps(poly, geom) |
| MySQL | ST_Overlaps(poly, geom) |
| SpatiaLite | Overlaps(poly, geom) |
id="std:fieldlookup-relate">relate
Доступность: PostGIS, MariaDB, Oracle, SpatiaLite, PGRaster (Преобразование)
Проверяет, связана ли геометрическое поле с геометрией поиска по заданным значениям в заданном шаблоне. Этот поиск требует параметр кортежа, (geom, pattern); форма pattern будет зависеть от пространственного бэкенда:
id="mariadb-postgis-and-spatialite">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*"))
Эквивалент SQL для PostGIS:
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*')
id="oracle">Oracle
Здесь шаблон отношения состоит как минимум из одной из девяти строк отношения: 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')
id="std:fieldlookup-touches">touches
Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite
Проверяет, касается ли геометрическое поле геометрии поиска.
Пример:
Zipcode.objects.filter(poly__touches=geom)
| Backend | SQL Equivalent |
|---|---|
| PostGIS | ST_Touches(poly, geom) |
| MariaDB | ST_Touches(poly, geom) |
| MySQL | ST_Touches(poly, geom) |
| Oracle | SDO_TOUCH(poly, geom) |
| SpatiaLite | Touches(poly, geom) |
id="std:fieldlookup-within">within
Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Взаимный)
Проверяет, находится ли геометрическое поле внутри геометрии поиска.
Пример:
Zipcode.objects.filter(poly__within=geom)
| Backend | SQL Equivalent |
|---|---|
| PostGIS | ST_Within(poly, geom) |
| MariaDB | ST_Within(poly, geom) |
| MySQL | ST_Within(poly, geom) |
| Oracle | SDO_INSIDE(poly, geom) |
| SpatiaLite | Within(poly, geom) |
id="std:fieldlookup-left">left
Доступность: PostGIS, PGRaster (Преобразование)
Проверяет, находится ли прямоугольник обрамления геометрического поля строго слева от прямоугольника обрамления геометрии поиска.
Пример:
Zipcode.objects.filter(poly__left=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly << geom
id="std:fieldlookup-right">right
Доступность: PostGIS, PGRaster (Преобразование)
Проверяет, находится ли прямоугольник обрамления геометрического поля строго справа от прямоугольника обрамления геометрии поиска.
Пример:
Zipcode.objects.filter(poly__right=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly >> geom
id="std:fieldlookup-overlaps_left">overlaps_left
Доступность: PostGIS, PGRaster (Взаимный)
Проверяет, перекрывает ли прямоугольник обрамления геометрического поля или находится слева от прямоугольника обрамления геометрии поиска.
Пример:
Zipcode.objects.filter(poly__overlaps_left=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly &< geom
id="std:fieldlookup-overlaps_right">overlaps_right
Доступность: PostGIS, PGRaster (Взаимный)
Проверяет, перекрывает ли прямоугольник обрамления геометрического поля или находится справа от прямоугольника обрамления геометрии поиска.
Пример:
Zipcode.objects.filter(poly__overlaps_right=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly &> geom
id="std:fieldlookup-overlaps_above">overlaps_above
Доступность: PostGIS, PGRaster (Преобразование)
Проверяет, перекрывает ли прямоугольник обрамления геометрического поля или находится сверху от прямоугольника обрамления геометрии поиска.
Пример:
Zipcode.objects.filter(poly__overlaps_above=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly |&> geom
id="std:fieldlookup-overlaps_below">overlaps_below
Доступность: PostGIS, PGRaster (Преобразование)
Проверяет, перекрывает ли прямоугольник обрамления геометрического поля или находится снизу от прямоугольника обрамления геометрии поиска.
Пример:
Zipcode.objects.filter(poly__overlaps_below=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly &<| geom
id="std:fieldlookup-strictly_above">strictly_above
Доступность: PostGIS, PGRaster (Преобразование)
Проверяет, находится ли прямоугольник обрамления геометрического поля строго сверху от прямоугольника обрамления геометрии поиска.
Пример:
Zipcode.objects.filter(poly__strictly_above=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly |>> geom
id="std:fieldlookup-strictly_below">strictly_below
Доступность: PostGIS, PGRaster (Преобразование)
Проверяет, находится ли прямоугольник обрамления геометрического поля строго снизу от прямоугольника обрамления геометрии поиска.
Пример:
Zipcode.objects.filter(poly__strictly_below=geom)
Эквивалент PostGIS:
SELECT ... WHERE poly <<| geom
id="id6">Поиск расстояний
Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Native)
Для получения общего обзора выполнения запросов расстояния обратитесь к введению в запросы расстояний.
Поиск расстояний выполняется следующим образом:
<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 |
| Oracle | 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 |
| Oracle | 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 |
| Oracle | 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 |
| Oracle | 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) |
| Oracle | 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
-
class Collect(geo_field, filter=None)
Доступность: PostGIS, SpatiaLite
Возвращает GEOMETRYCOLLECTION или MULTI объект геометрии из столбца геометрии. Это аналогично упрощенной версии агрегата Union, но может быть на несколько порядков быстрее, чем выполнение объединения, поскольку он группирует геометрии в коллекцию или многообъектное представление, не заботясь о растворении границ.
Добавлена поддержка использования аргумента filter.
Extent
-
class Extent(geo_field, filter=None)
Доступность: 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)
Добавлена поддержка использования аргумента filter.
Extent3D
-
class Extent3D(geo_field, filter=None)
Доступность: PostGIS
Возвращает 3D протяжённость всех 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)
Добавлена поддержка использования аргумента filter.
MakeLine
-
class MakeLine(geo_field, filter=None)
Доступность: 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)
Добавлена поддержка использования аргумента filter.
Union
-
class Union(geo_field, filter=None)
Доступность: 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.
Добавлена поддержка использования аргумента filter.
Примечания
| [1] | См. OpenGIS Simple Feature Specification For SQL, в главе 2.1.13.2, стр. 2-13 (Модель девяти пересечений с расширенными измерениями). |
| [2] | См. документацию SDO_RELATE из Руководства разработчика Oracle Spatial and Graph. |
| [3] | (1, 2) Для объяснения этой процедуры, прочтите Особенности пространственного предиката «Содержит» Мартина Дэвиса (разработчика PostGIS). |
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/ref/contrib/gis/geoquerysets/