Справочник по 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)
Изменено в Django 3.0:

В предыдущих версиях 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)
Изменено в Django 3.0:

Добавлена ​​поддержка 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)
Изменено в Django 3.0:

В предыдущих версиях 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)
Изменено в Django 3.0:

В предыдущих версиях 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)
Изменено в Django 3.0:

В предыдущих версиях 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)
Изменено в Django 3.0:

В предыдущих версиях 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)
Изменено в Django 3.0:

В предыдущих версиях 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*')
Изменено в Django 3.1:

Добавлена ​​поддержка 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)
Изменено в Django 3.0:

В предыдущих версиях 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)
Изменено в Django 3.0:

В предыдущих версиях 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).

Copyright ©2020 All rights reserved