Spec-Zone.ru › Django 1.8

Справочник API GeoQuerySet

class GeoQuerySet(model=None)

Пространственные запросы

Так же, как при использовании API наборов запросов, взаимодействие с GeoQuerySet происходит путём цепочки фильтров. Вместо обычных Django полей запросов в этом разделе доступны пространственные запросы для GeometryField.

Для введения см. введение в пространственные запросы. Для обзора совместимых запросов с конкретным пространственным бэкэндом, обратитесь к таблице совместимости пространственных запросов.

bbcontains

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

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

Пример:

Zipcode.objects.filter(poly__bbcontains=geom)
Бэкэнд Эквивалент SQL
PostGIS poly ~ geom
MySQL MBRContains(poly, geom)
SpatiaLite MbrContains(poly, geom)

bboverlaps

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

Проверяет, перекрываются ли ограничивающие рамки (bounding boxes) геометрического поля и геометрии поиска.

Пример:

Zipcode.objects.filter(poly__bboverlaps=geom)
Бэкэнд Эквивалент SQL
PostGIS poly && geom
MySQL MBROverlaps(poly, geom)
SpatiaLite MbrOverlaps(poly, geom)

contained

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

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

Пример:

Zipcode.objects.filter(poly__contained=geom)
Бэкэнд Эквивалент SQL
PostGIS poly @ geom
MySQL MBRWithin(poly, geom)
SpatiaLite MbrWithin(poly, geom)

contains

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

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

Пример:

Zipcode.objects.filter(poly__contains=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_Contains(poly, geom)
Oracle SDO_CONTAINS(poly, geom)
MySQL MBRContains(poly, geom)
SpatiaLite Contains(poly, geom)

contains_properly

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

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

Пример:

Zipcode.objects.filter(poly__contains_properly=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_ContainsProperly(poly, geom)

coveredby

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

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

Пример:

Zipcode.objects.filter(poly__coveredby=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_CoveredBy(poly, geom)
Oracle SDO_COVEREDBY(poly, geom)

covers

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

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

Пример:

Zipcode.objects.filter(poly__covers=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_Covers(poly, geom)
Oracle SDO_COVERS(poly, geom)

crosses

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

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

Пример:

Zipcode.objects.filter(poly__crosses=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_Crosses(poly, geom)
SpatiaLite Crosses(poly, geom)

disjoint

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

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

Пример:

Zipcode.objects.filter(poly__disjoint=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_Disjoint(poly, geom)
Oracle SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05)
MySQL MBRDisjoint(poly, geom)
SpatiaLite Disjoint(poly, geom)

equals

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

exact, same_as

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

intersects

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

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

Пример:

Zipcode.objects.filter(poly__intersects=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_Intersects(poly, geom)
Oracle SDO_OVERLAPBDYINTERSECT(poly, geom)
MySQL MBRIntersects(poly, geom)
SpatiaLite Intersects(poly, geom)

overlaps

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

relate

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

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

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:

SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')

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

SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')

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

touches

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

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

Пример:

Zipcode.objects.filter(poly__touches=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_Touches(poly, geom)
MySQL MBRTouches(poly, geom)
Oracle SDO_TOUCH(poly, geom)
SpatiaLite Touches(poly, geom)

within

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

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

Пример:

Zipcode.objects.filter(poly__within=geom)
Бэкэнд Эквивалент SQL
PostGIS ST_Within(poly, geom)
MySQL MBRWithin(poly, geom)
Oracle SDO_INSIDE(poly, geom)
SpatiaLite Within(poly, geom)

left

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

Проверяет, находится ли ограничивающая рамка (bounding box) геометрического поля строго слева от ограничивающей рамки (bounding box) геометрии поиска.

Пример:

Zipcode.objects.filter(poly__left=geom)

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

SELECT ... WHERE poly << geom

right

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

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

Пример:

Zipcode.objects.filter(poly__right=geom)

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

SELECT ... WHERE poly >> geom

overlaps_left

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

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

Пример:

Zipcode.objects.filter(poly__overlaps_left=geom)

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

SELECT ... WHERE poly &< geom

overlaps_right

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

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

Пример:

Zipcode.objects.filter(poly__overlaps_right=geom)

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

SELECT ... WHERE poly &> geom

overlaps_above

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

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

Пример:

Zipcode.objects.filter(poly__overlaps_above=geom)

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

SELECT ... WHERE poly |&> geom

overlaps_below

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

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

Пример:

Zipcode.objects.filter(poly__overlaps_below=geom)

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

SELECT ... WHERE poly &<| geom

strictly_above

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

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

Пример:

Zipcode.objects.filter(poly__strictly_above=geom)

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

SELECT ... WHERE poly |>> geom

strictly_below

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

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

Пример:

Zipcode.objects.filter(poly__strictly_below=geom)

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

SELECT ... WHERE poly <<| geom

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

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

Для обзора выполнения запросов по расстоянию обратитесь к введению в запросы по расстоянию.

Поиск по расстоянию имеет следующий вид:

<field>__<distance lookup>=(<geometry>, <distance value>[, 'spheroid'])

Значение, переданное в поиск по расстоянию, представляет собой кортеж; первые два значения являются обязательными и представляют собой геометрию для расчета расстояний и значение расстояния (число в единицах поля или объект Distance). При каждом поиске по расстоянию, кроме dwithin, может быть включён необязательный третий элемент, 'spheroid', чтобы указать GeoDjango использовать более точные функции расчёта расстояния по сфероиду для полей с геодезической системой координат (например, ST_Distance_Spheroid используется вместо ST_Distance_Sphere).

distance_gt

Возвращает модели, где расстояние от поля геометрии до геометрии поиска больше заданного значения расстояния.

Пример:

Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))
Бэкенд Эквивалент SQL
PostGIS 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(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(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(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.

GeoQuerySet Методы

GeoQuerySet методы указывают на то, что пространственная операция должна быть выполнена над каждым пространственным полем в наборе запросов и результат должен быть сохранён в новом атрибуте модели (который, как правило, носит имя GeoQuerySet метода).

Также существуют агрегатные GeoQuerySet методы, которые возвращают единственное значение вместо набора запросов. В этом разделе будет описан API и доступность каждого GeoQuerySet метода, доступного в GeoDjango.

Примечание

Какие методы доступны, зависит от вашего пространственного бэкенда. Подробности см. в таблице совместимости.

За исключением нескольких случаев, следующие ключевые аргументы могут быть использованы со всеми GeoQuerySet методами:

Ключевой аргумент Описание
field_name

По умолчанию GeoQuerySet методы используют первое геометрическое поле, встречающееся в модели. Этот ключевой аргумент следует использовать для указания другого геометрического поля (например, field_name='point2'), когда в модели есть несколько геометрических полей.

В PostGIS ключевой аргумент field_name также может быть использован для геометрических полей в моделях, связанных через отношение ForeignKey (например, field_name='related__point').

model_att

По умолчанию GeoQuerySet методы, как правило, прикрепляют свой результат к атрибуту с тем же именем, что и GeoQuerySet метод. Установка этого ключевого аргумента с желаемым именем атрибута переопределит это поведение по умолчанию. Например, qs = Zipcode.objects.centroid(model_att='c') прикрепит центр Zipcode геометрического поля к атрибуту c каждой модели вместо атрибута centroid.

Этот ключевой аргумент необходим, если имя метода совпадает с существующим GeoQuerySet методом – если вы хотите использовать area() метод в модели с атрибутом PolygonField, например.

Измерение

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

area

GeoQuerySet.area(**kwargs)

Возвращает площадь геометрического поля в атрибуте area каждого элемента этого набора запросов GeoQuerySet.

distance

GeoQuerySet.distance(geom, **kwargs)

Этот метод принимает геометрию в качестве параметра и прикрепляет атрибут distance к каждой модели в возвращенном наборе запросов, содержащий расстояние (в качестве объекта Distance) до заданной геометрии.

В следующем примере (взятом из GeoDjango тестов расстояния), вычисляется расстояние от города Хобарт (Тасмания) до каждой другой точки PointField в AustraliaCity наборе запросов:

>>> pnt = AustraliaCity.objects.get(name='Hobart').point
>>> for city in AustraliaCity.objects.distance(pnt): print(city.name, city.distance)
Wollongong 990071.220408 m
Shellharbour 972804.613941 m
Thirroul 1002334.36351 m
Mittagong 975691.632637 m
Batemans Bay 834342.185561 m
Canberra 598140.268959 m
Melbourne 575337.765042 m
Sydney 1056978.87363 m
Hobart 0.0 m
Adelaide 1162031.83522 m
Hillsdale 1049200.46122 m

Примечание

Поскольку атрибут distance представляет собой объект Distance, вы легко можете выразить значение в нужных вам единицах. Например, city.distance.mi – это значение расстояния в милях, а city.distance.km – значение расстояния в километрах. Подробности использования см. в Объекты измерения и в списке Поддерживаемые единицы.

length

GeoQuerySet.length(**kwargs)

Возвращает длину геометрического поля в атрибуте length (объект Distance) для каждой модели в наборе результатов запроса.

perimeter

GeoQuerySet.perimeter(**kwargs)

Возвращает периметр геометрического поля в атрибуте perimeter (объект Distance) для каждой модели в наборе результатов запроса.

Геометрические отношения

Следующие методы не принимают аргументы и прикрепляют геометрические объекты к каждому элементу набора результатов GeoQuerySet, который является результатом функции связи, вычисленной для геометрического поля.

centroid

GeoQuerySet.centroid(**kwargs)

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

Возвращает значение centroid для географического поля в атрибуте centroid для каждого элемента набора результатов GeoQuerySet.

envelope

GeoQuerySet.envelope(**kwargs)

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

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

point_on_surface

GeoQuerySet.point_on_surface(**kwargs)

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

Возвращает геометрию типа Точка, гарантированно лежащую на поверхности геометрического поля в атрибуте point_on_surface для каждого элемента набора результатов запроса; в противном случае устанавливает значение None.

Редакторы геометрии

force_rhr

GeoQuerySet.force_rhr(**kwargs)

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

Возвращает изменённую версию полигона/многоугольника, в котором все вершины следуют правилу правой руки, и прикрепляет её как атрибут force_rhr к каждому элементу набора результатов запроса.

reverse_geom

GeoQuerySet.reverse_geom(**kwargs)

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

Инвертирует порядок координат геометрического поля и прикрепляет его как атрибут reverse к каждому элементу набора результатов запроса.

scale

GeoQuerySet.scale(x, y, z=0.0, **kwargs)

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

snap_to_grid

GeoQuerySet.snap_to_grid(*args, **kwargs)

Привязывает все точки входной геометрии к сетке. Способ привязки геометрии к сетке зависит от количества числовых аргументов (чисел с плавающей точкой, целых или длинных).

Количество аргументов Описание
1 Единый размер для привязки к X и Y сеткам.
2 Размеры X и Y для привязки к сетке.
4 Размеры X, Y и соответствующие начала отсчёта X, Y.

transform

GeoQuerySet.transform(srid=4326, **kwargs)

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

Метод transform преобразует геометрическое поле модели в систему пространственных координат, заданную параметром srid. Если параметр srid не указан, по умолчанию используется 4326 (WGS84).

Примечание

В отличие от других методов GeoQuerySet, transform сохраняет результат «на месте». Другими словами, новый атрибут для преобразованной геометрии не добавляется к моделям.

Примечание

Какая система пространственных координат соответствует целочисленному SRID может зависеть от используемой пространственной базы данных. Иными словами, номера SRID, используемые для Oracle, не обязательно совпадают с номерами, используемыми PostGIS.

Пример:

>>> qs = Zipcode.objects.all().transform() # Transforms to WGS84
>>> qs = Zipcode.objects.all().transform(32140) # Transforming to "NAD83 / Texas South Central"
>>> print(qs[0].poly.srid)
32140
>>> print(qs[0].poly)
POLYGON ((234055.1698884720099159 4937796.9232223574072123 ...

translate

GeoQuerySet.translate(x, y, z=0.0, **kwargs)

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

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

Операции с геометрией

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

Следующие методы принимают геометрию в качестве параметра и прикрепляют геометрию к каждому элементу набора результатов GeoQuerySet, который является результатом операции.

difference

GeoQuerySet.difference(geom)

Возвращает пространственное различие географического поля с заданной геометрией в атрибуте difference для каждого элемента набора результатов GeoQuerySet.

intersection

GeoQuerySet.intersection(geom)

Возвращает пространственное пересечение географического поля с заданной геометрией в атрибуте intersection для каждого элемента набора результатов GeoQuerySet.

sym_difference

GeoQuerySet.sym_difference(geom)

Возвращает симметричное различие географического поля с заданной геометрией в атрибуте sym_difference для каждого элемента набора результатов GeoQuerySet.

union

GeoQuerySet.union(geom)

Возвращает объединение географического поля с заданной геометрией в атрибуте union для каждого элемента набора результатов GeoQuerySet.

Вывод геометрии

Следующие методы GeoQuerySet вернут атрибут, содержащий значение геометрического поля в каждой модели, преобразованное в требуемый формат вывода.

geohash

GeoQuerySet.geohash(precision=20, **kwargs)

Добавляет атрибут geohash к каждой модели набора результатов запроса, содержащий представление геометрии в формате GeoHash.

geojson

GeoQuerySet.geojson(**kwargs)

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

Добавляет атрибут geojson к каждой модели в наборе результатов запроса, содержащий представление геометрии в формате GeoJSON.

Ключевой аргумент Описание
precision Может использоваться для указания количества значащих цифр координат в представлении GeoJSON — значение по умолчанию равно 8.
crs Установите это значение в True, если вы хотите включить систему пространственных координат в возвращаемый GeoJSON.
bbox Установите это значение в True, если вы хотите включить прямоугольник, охватывающий геометрию, в возвращаемый GeoJSON.

gml

GeoQuerySet.gml(**kwargs)

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

Добавляет атрибут gml к каждой модели в наборе результатов запроса, содержащий представление геометрии в формате Geographic Markup Language (GML).

Пример:

>>> qs = Zipcode.objects.all().gml()
>>> print(qs[0].gml)
<gml:Polygon srsName="EPSG:4326"><gml:OuterBoundaryIs>-147.78711,70.245363 ...  -147.78711,70.245363</gml:OuterBoundaryIs></gml:Polygon>
Ключевой аргумент Описание
precision Этот ключевой аргумент относится только к PostGIS. Он может использоваться для указания количества значащих цифр координат в представлении GML — значение по умолчанию равно 8.
version Этот ключевой аргумент относится только к PostGIS. Он может использоваться для указания версии GML, которая может принимать значения 2 или 3. Значение по умолчанию равно 2.

kml

GeoQuerySet.kml(**kwargs)

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

Добавляет атрибут kml к каждой модели в наборе результатов запроса, содержащий представление геометрии в формате Keyhole Markup Language (KML). Следует отметить, что содержимое KML преобразуется в WGS84 при необходимости.

Пример:

>>> qs = Zipcode.objects.all().kml()
>>> 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.

svg

GeoQuerySet.svg(**kwargs)

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

Добавляет атрибут svg к каждой модели в наборе результатов запроса, содержащий данные пути в формате Scalable Vector Graphics (SVG) для геометрических полей.

Аргумент ключевого слова Описание
relative Если установлено значение True, данные пути будут реализованы с точки зрения относительных перемещений. По умолчанию используется False, что означает использование абсолютных перемещений.
precision Это ключевое слово можно использовать для указания количества значащих цифр для координат в представлении SVG — значение по умолчанию равно 8.

Разное

mem_size

GeoQuerySet.mem_size(**kwargs)

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

Возвращает размер занимаемой памяти (в байтах) поля геометрии в атрибуте mem_size каждого элемента набора GeoQuerySet.

num_geom

GeoQuerySet.num_geom(**kwargs)

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

Возвращает количество геометрий в атрибуте num_geom каждого элемента набора GeoQuerySet, если поле геометрии представляет собой набор (например, поле GEOMETRYCOLLECTION или MULTI*); в противном случае устанавливает значение None.

num_points

GeoQuerySet.num_points(**kwargs)

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

Возвращает количество точек в первой линии в поле геометрии в атрибуте num_points каждого элемента набора GeoQuerySet; в противном случае устанавливает значение None.

Пространственные агрегаты

Методы агрегации

Устарело начиная с версии 1.8: Методы агрегации теперь устарели. Используйте их функциональные аналоги.

collect

GeoQuerySet.collect(**kwargs)

Устарело начиная с версии 1.8: Используйте агрегат Collect вместо него.

Сокращение для aggregate(Collect(<field>)).

extent

GeoQuerySet.extent(**kwargs)

Устарело начиная с версии 1.8: Используйте агрегат Extent вместо него.

Сокращение для aggregate(Extent(<field>)).

extent3d

GeoQuerySet.extent3d(**kwargs)

Устарело начиная с версии 1.8: Используйте агрегат Extent вместо него.

Сокращение для aggregate(Extent3D(<field>)).

make_line

GeoQuerySet.make_line(**kwargs)

Устарело начиная с версии 1.8: Используйте агрегат MakeLine вместо него.

Сокращение для aggregate(MakeLine(<field>)).

unionagg

GeoQuerySet.unionagg(**kwargs)

Устарело начиная с версии 1.8: Используйте агрегат Union вместо него.

Сокращение для aggregate(Union(<field>)).

Функции агрегации

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)

Доступность: PostGIS, Spatialite (≥3.0)

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

Extent

class Extent(geo_field)

Доступность: PostGIS, Oracle, Spatialite (≥3.0)

Возвращает диапазон всех 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)

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

Возвращает 3D-диапазон всех 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)

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

Возвращает LineString, построенный из геометрий точечных полей в QuerySet. В настоящее время сортировка набора запросов не влияет на результат.

Пример:

>>> print(City.objects.filter(name__in=('Houston', 'Dallas')
...      ).aggregate(MakeLine('poly'))['poly__makeline']
LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)

Union

class 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 из раздела 11 руководства Oracle по пространственным данным.
[3] (1, 2) Для объяснения этой процедуры см. Особенности пространственного предиката "содержит" OGC Мартина Дэвиса (разработчика PostGIS).
[4] См. документацию PostGIS ST_ContainsProperly документацию для получения дополнительной информации.

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

Spec-Zone.ru

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