Spec-Zone.ru › Django 6.0

Справочник 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)

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 (Native)

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

Пример:

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 (Native)

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

Пример:

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 (Native)

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

Пример:

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 (Bilateral)

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

Пример:

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 (Bilateral)

Возвращает true, если геометрия поискового выражения пересекает внутреннюю область геометрического поля, но не его границу (или внешнюю область).

Пример:

Zipcode.objects.filter(poly__contains_properly=geom)

Сервер

Эквивалент SQL

PostGIS

ST_ContainsProperly(poly, geom)

coveredby

Доступность: PostGIS, Oracle, MariaDB, MySQL, PGRaster (Bilateral), SpatiaLite

Проверяет, что ни одна точка геометрического поля не находится за пределами геометрии поискового выражения. [3]

Пример:

Zipcode.objects.filter(poly__coveredby=geom)

Сервер

Эквивалент SQL

PostGIS

ST_CoveredBy(poly, geom)

Oracle

SDO_COVEREDBY(poly, geom)

MariaDB

MBRCoveredBy(poly, geom)

MySQL

MBRCoveredBy(poly, geom)

SpatiaLite

CoveredBy(poly, geom)

Изменено в Django 5.2:

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

Изменено в Django 6.0:

Добавлена поддержка MariaDB 12.0.1+.

covers

Доступность: PostGIS, Oracle, MySQL, PGRaster (Bilateral), SpatiaLite

Проверяет, что ни одна точка геометрии поискового выражения не находится за пределами геометрического поля. [3]

Пример:

Zipcode.objects.filter(poly__covers=geom)

Сервер

Эквивалент SQL

PostGIS

ST_Covers(poly, geom)

Oracle

SDO_COVERS(poly, geom)

MySQL

MBRCovers(poly, geom)

SpatiaLite

Covers(poly, geom)

Изменено в Django 5.2:

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

crosses

Доступность: PostGIS, MariaDB, MySQL, SpatiaLite, PGRaster (Conversion)

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

Пример:

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 (Bilateral)

Проверяет, не пересекается ли геометрическое поле с геометрией поискового выражения в пространственном смысле.

Пример:

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 (Conversion)

Проверяет, равняется ли геометрическое поле геометрии поискового выражения в пространственном смысле.

Пример:

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 (Bilateral)

Проверяет, «равно» ли геометрическое поле геометрии поискового выражения. В Oracle, MySQL и SpatiaLite проверяется пространственное равенство, а в PostGIS — равенство ограничивающих прямоугольников.

Пример:

Zipcode.objects.filter(poly=geom)

Сервер

Эквивалент SQL

PostGIS

poly ~= geom

Oracle

SDO_EQUAL(poly, geom)

MariaDB

ST_Equals(poly, geom)

MySQL

ST_Equals(poly, geom)

SpatiaLite

Equals(poly, geom)

intersects

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

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

Пример:

Zipcode.objects.filter(poly__intersects=geom)

Сервер

Эквивалент SQL

PostGIS

ST_Intersects(poly, geom)

Oracle

SDO_OVERLAPBDYINTERSECT(poly, geom)

MariaDB

ST_Intersects(poly, geom)

MySQL

ST_Intersects(poly, geom)

SpatiaLite

Intersects(poly, geom)

isempty

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

Проверяет, является ли геометрия пустой.

Пример:

Zipcode.objects.filter(poly__isempty=True)

isvalid

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

Проверяет, является ли геометрия допустимой.

Пример:

Zipcode.objects.filter(poly__isvalid=True)

Сервер

Эквивалент SQL

MariaDB, MySQL, PostGIS, SpatiaLite

ST_IsValid(poly)

Oracle

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(poly, 0.05) = 'TRUE'

Изменено в Django 6.0:

Добавлена поддержка MariaDB 12.0.1+.

geom_type

Добавлено в Django 6.0.

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

Возвращает тип геометрии геометрического поля.

Пример:

Zipcode.objects.filter(poly__geom_type="POLYGON")

Сервер

Эквивалент SQL

PostGIS

GeometryType(geom)

MariaDB

ST_GeometryType(geom)

MySQL

ST_GeometryType(geom)

Oracle

SDO_GEOMETRY.GET_GTYPE(geom)

SpatiaLite

GeometryType(geom)

overlaps

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

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

Сервер

Эквивалент SQL

PostGIS

ST_Overlaps(poly, geom)

Oracle

SDO_OVERLAPS(poly, geom)

MariaDB

ST_Overlaps(poly, geom)

MySQL

ST_Overlaps(poly, geom)

SpatiaLite

Overlaps(poly, geom)

relate

Доступность: PostGIS, MariaDB, Oracle, SpatiaLite, PGRaster (Conversion)

Проверяет, связано ли геометрическое поле с геометрией поискового выражения в пространственном смысле согласно заданным значениям шаблона. Для этого поискового выражения требуется параметр-кортеж, (geom, pattern); формат pattern зависит от пространственного сервера:

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*')

Oracle

Здесь шаблон отношения состоит как минимум из одной из девяти строк отношения: TOUCH, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT, EQUAL, INSIDE, COVEREDBY, CONTAINS, COVERS, ON и ANYINTERACT. Несколько строк можно объединить логическим булевым оператором OR, например, '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)

Oracle

SDO_TOUCH(poly, geom)

SpatiaLite

Touches(poly, geom)

within

Доступность: PostGIS, Oracle, MariaDB, MySQL, SpatiaLite, PGRaster (Bilateral)

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

Пример:

Zipcode.objects.filter(poly__within=geom)

Сервер

Эквивалент SQL

PostGIS

ST_Within(poly, geom)

MariaDB

ST_Within(poly, geom)

MySQL

ST_Within(poly, geom)

Oracle

SDO_INSIDE(poly, geom)

SpatiaLite

Within(poly, geom)

left

Доступность: PostGIS, PGRaster (Conversion)

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

Пример:

Zipcode.objects.filter(poly__left=geom)

Эквивалент для PostGIS:

SELECT ... WHERE poly << geom

right

Доступность: PostGIS, PGRaster (Conversion)

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

Пример:

Zipcode.objects.filter(poly__right=geom)

Эквивалент для PostGIS:

SELECT ... WHERE poly >> geom

overlaps_left

Доступность: PostGIS, PGRaster (Bilateral)

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

Пример:

Zipcode.objects.filter(poly__overlaps_left=geom)

Эквивалент для PostGIS:

SELECT ... WHERE poly &< geom

overlaps_right

Доступность: PostGIS, PGRaster (Bilateral)

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

Пример:

Zipcode.objects.filter(poly__overlaps_right=geom)

Эквивалент для PostGIS:

SELECT ... WHERE poly &> geom

overlaps_above

Доступность: PostGIS, PGRaster (Conversion)

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

Пример:

Zipcode.objects.filter(poly__overlaps_above=geom)

Эквивалент для PostGIS:

SELECT ... WHERE poly |&> geom

overlaps_below

Доступность: PostGIS, PGRaster (Conversion)

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

Пример:

Zipcode.objects.filter(poly__overlaps_below=geom)

Эквивалент для PostGIS:

SELECT ... WHERE poly &<| geom

strictly_above

Доступность: PostGIS, PGRaster (Conversion)

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

Пример:

Zipcode.objects.filter(poly__strictly_above=geom)

Эквивалент для PostGIS:

SELECT ... WHERE poly |>> geom

strictly_below

Доступность: PostGIS, PGRaster (Conversion)

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

Пример:

Zipcode.objects.filter(poly__strictly_below=geom)

Эквивалент для PostGIS:

SELECT ... WHERE poly <<| geom

Поиск по расстоянию

Доступность: 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 или выражение запроса). Чтобы передать индекс полосы в поиск, используйте кортеж из трех элементов, где второй элемент — индекс полосы.

Для любого поиска по расстоянию, кроме 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, MariaDB, MySQL, SpatiaLite

Возвращает геометрический объект типа GEOMETRYCOLLECTION или MULTI из геометрического столбца. Это аналог упрощенной версии агрегата Union, но он может быть на несколько порядков быстрее объединения, поскольку собирает геометрии в коллекцию или составной объект, не объединяя границы.

Изменено в Django 6.0:

Добавлена поддержка MariaDB 12.0.1 и более поздних версий.

Extent

class Extent(geo_field, filter=None) [исходный код]

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

Возвращает охватывающую область всех geo_field в QuerySet в виде кортежа из четырех значений, содержащего координаты нижнего левого и верхнего правого углов.

Пример:

>>> qs = City.objects.filter(name__in=("Houston", "Dallas")).aggregate(Extent("poly"))
>>> print(qs["poly__extent"])
(-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)

Extent3D

class Extent3D(geo_field, filter=None) [исходный код]

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

Возвращает трехмерную охватывающую область всех geo_field в QuerySet в виде кортежа из шести значений, содержащего координаты нижнего левого и верхнего правого углов (для каждой точки указаны координаты 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

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)

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.

Сноски

[1]

См. Спецификацию OpenGIS Simple Feature для SQL, раздел 2.1.13.2, с. 2-13 (модель расширенного девятисеченного пересечения с учетом размерности).

[2]

См. документацию по SDO_RELATE в руководстве разработчика Oracle Spatial and Graph.

[3] (1,2)

Объяснение этой функции см. в статье Мартина Дэвиса (разработчика PostGIS) «Особенности пространственного предиката “Contains”».

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/ref/contrib/gis/geoquerysets/

Spec-Zone.ru

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