Spec-Zone.ru › Django 1.9

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

class GeoQuerySet(model=None)

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

Пространственные запросы в этом разделе доступны для GeometryField.

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

Краткое описание bbcontains

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

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

Пример:

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

Краткое описание bboverlaps

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

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

Пример:

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

Краткое описание contained

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

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

Пример:

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

Краткое описание 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

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

Пример:

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). Более простая функция ST_Distance используется с проекционными системами координат.

distance_gt

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

Пример:

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

Устарело начиная с версии 1.9: Использование методов 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 с именем area.

Измерение

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

area

GeoQuerySet.area(**kwargs)

Устарело начиная с версии 1.9: Используйте функцию Area вместо неё.

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

distance

GeoQuerySet.distance(geom, **kwargs)

Устарело начиная с версии 1.9: Используйте функцию Distance вместо неё.

Этот метод принимает геометрию в качестве параметра и прикрепляет атрибут 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)

Устаревшее начиная с версии 1.9: Используйте функцию Length вместо неё.

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

perimeter

GeoQuerySet.perimeter(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию Perimeter вместо неё.

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

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

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

centroid

GeoQuerySet.centroid(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию Centroid вместо неё.

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

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

envelope

GeoQuerySet.envelope(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию Envelope вместо неё.

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

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

point_on_surface

GeoQuerySet.point_on_surface(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию PointOnSurface вместо неё.

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

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

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

force_rhr

GeoQuerySet.force_rhr(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию ForceRHR вместо неё.

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

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

reverse_geom

GeoQuerySet.reverse_geom(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию Reverse вместо неё.

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

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

scale

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

Устаревшее начиная с версии 1.9: Используйте функцию Scale вместо неё.

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

snap_to_grid

GeoQuerySet.snap_to_grid(*args, **kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию SnapToGrid вместо неё.

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

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

transform

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

Устаревшее начиная с версии 1.9: Используйте функцию Transform вместо неё.

Метод 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)

Устаревшее начиная с версии 1.9: Используйте функцию Translate вместо неё.

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

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

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

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

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

difference

GeoQuerySet.difference(geom)

Устаревшее начиная с версии 1.9: Используйте функцию Difference вместо неё.

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

intersection

GeoQuerySet.intersection(geom)

Устаревшее начиная с версии 1.9: Используйте функцию Intersection вместо неё.

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

sym_difference

GeoQuerySet.sym_difference(geom)

Устаревшее начиная с версии 1.9: Используйте функцию SymDifference вместо неё.

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

union

GeoQuerySet.union(geom)

Устаревшее начиная с версии 1.9: Используйте функцию Union вместо неё.

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

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

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

geohash

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

Устаревшее начиная с версии 1.9: Используйте функцию GeoHash вместо неё.

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

geojson

GeoQuerySet.geojson(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию AsGeoJSON вместо неё.

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

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

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

gml

GeoQuerySet.gml(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию AsGML вместо неё.

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

Прикрепляет атрибут gml к каждой модели в наборе запросов, содержащий представление геометрии в формате языка разметки географии (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)

Устаревшее начиная с версии 1.9: Используйте функцию AsKML вместо неё.

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

Прикрепляет атрибут kml к каждой модели в наборе запросов, содержащий представление геометрии в формате языка разметки Keyhole (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)

Устаревшее начиная с версии 1.9: Используйте функцию AsSVG вместо неё.

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

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

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

Разное

mem_size

GeoQuerySet.mem_size(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию MemSize вместо неё.

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

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

num_geom

GeoQuerySet.num_geom(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию NumGeometries вместо неё.

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

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

num_points

GeoQuerySet.num_points(**kwargs)

Устаревшее начиная с версии 1.9: Используйте функцию NumPoints вместо неё.

Доступность: 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) [source]

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

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

Extent

class Extent(geo_field) [source]

Доступность: 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) [source]

Доступность: 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) [source]

Доступность: 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) [source]

Доступность: 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 Specification For SQL, в гл. 2.1.13.2, стр. 2-13 (Модель пересечения девяти измерений с расширением размерности).
[2] См. документацию SDO_RELATE из гл. 11 Руководства пользователя и справочника Oracle Spatial.
[3] (1, 2) Для объяснения этой процедуры прочитайте Особенности пространственного предиката «Contains» Мартина Дэвиса (разработчика PostGIS).
[4] См. документацию PostGIS ST_ContainsProperly по этому вопросу.

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

Spec-Zone.ru

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