Справочник по API GeoQuerySet
-
class GeoQuerySet(model=None)
Пространственные запросы
Пространственные запросы в этом разделе доступны для 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, MySQL, SpatiaLite, PGRaster (Прямая)
Проверяет, полностью ли прямоугольник ограничительной рамки геометрического или растрового поля содержит прямоугольник ограничительной рамки геометрии запроса.
Пример:
Zipcode.objects.filter(poly__bbcontains=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | poly ~ geom |
| MySQL | MBRContains(poly, geom) |
| SpatiaLite | MbrContains(poly, geom) |
bboverlaps
Доступность: PostGIS, MySQL, SpatiaLite, PGRaster (Прямая)
Проверяет, пересекаются ли прямоугольники ограничительной рамки геометрического поля и геометрии запроса.
Пример:
Zipcode.objects.filter(poly__bboverlaps=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | poly && geom |
| MySQL | MBROverlaps(poly, geom) |
| SpatiaLite | MbrOverlaps(poly, geom) |
contained
Доступность: PostGIS, MySQL, SpatiaLite, PGRaster (Прямая)
Проверяет, полностью ли прямоугольник ограничительной рамки геометрического поля содержится в прямоугольнике ограничительной рамки геометрии запроса.
Пример:
Zipcode.objects.filter(poly__contained=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | poly @ geom |
| MySQL | MBRWithin(poly, geom) |
| SpatiaLite | MbrWithin(poly, geom) |
contains
Доступность: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Двусторонняя)
Проверяет, содержит ли геометрическое поле геометрию запроса.
Пример:
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, PGRaster (Двусторонняя)
Возвращает true, если геометрия запроса пересекает внутреннюю часть геометрического поля, но не границу (или внешний вид). [4]
Пример:
Zipcode.objects.filter(poly__contains_properly=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | ST_ContainsProperly(poly, geom) |
coveredby
Доступность: PostGIS, Oracle, PGRaster (Двусторонняя)
Проверяет, что ни одна точка в геометрическом поле не находится вне геометрии запроса. [3]
Пример:
Zipcode.objects.filter(poly__coveredby=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | ST_CoveredBy(poly, geom) |
| Oracle | SDO_COVEREDBY(poly, geom) |
covers
Доступность: PostGIS, Oracle, PGRaster (Двусторонняя)
Проверяет, что ни одна точка в геометрии запроса не находится вне геометрического поля. [3]
Пример:
Zipcode.objects.filter(poly__covers=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | ST_Covers(poly, geom) |
| Oracle | SDO_COVERS(poly, geom) |
crosses
Доступность: PostGIS, SpatiaLite, PGRaster (Преобразование)
Проверяет, пересекает ли геометрическое поле геометрию запроса.
Пример:
Zipcode.objects.filter(poly__crosses=geom)
| Бэкенд | Эквивалент SQL |
|---|---|
| PostGIS | ST_Crosses(poly, geom) |
| SpatiaLite | Crosses(poly, geom) |
disjoint
Доступность: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Двусторонняя)
Проверяет, являются ли геометрическое поле и геометрия запроса пространственно непересекающимися.
Пример:
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, PGRaster (Преобразование)
exact, same_as
Доступность: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Двусторонняя)
intersects
Доступность: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Двусторонняя)
Проверяет, пересекаются ли геометрическое поле и геометрия запроса.
Пример:
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) |
isvalid
Доступность: PostGIS
Проверяет, является ли геометрия корректной.
Пример:
Zipcode.objects.filter(poly__isvalid=True)
Эквивалент PostGIS:
SELECT ... WHERE ST_IsValid(poly)
overlaps
Доступность: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Двусторонняя)
relate
Доступность: PostGIS, Oracle, SpatiaLite, PGRaster (Преобразование)
Проверяет, связаны ли геометрическое поле и геометрия запроса заданными значениями в заданном шаблоне. Этот запрос требует кортеж-параметр, (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*'))
Эквивалент PostGIS SQL:
SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')
Эквивалент SpatiaLite SQL:
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*')
Oracle
Здесь шаблон соотношения состоит как минимум из одной из девяти строк соотношений: TOUCH, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT, EQUAL, INSIDE, COVEREDBY, CONTAINS, COVERS, ON, и ANYINTERACT. Несколько строк могут быть объединены с помощью логического булевого оператора ИЛИ, например, 'inside+touch'. [2] Строки соотношений нечувствительны к регистру.
Пример:
Zipcode.objects.filter(poly__relate=(geom, 'anyinteract'))
Эквивалент Oracle SQL:
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, PGRaster (Взаимно)
Проверяет, находится ли геометрическое поле внутри геометрии поиска.
Пример:
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, 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, 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, либо query expression <ref/models/expressions>). Для передачи индекса полосы в поиск используйте кортеж из 3 элементов, где второй элемент - индекс полосы.
В PostGIS при каждом поиске по расстоянию, кроме 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 |
По умолчанию методы В PostGIS ключевое слово |
model_att |
По умолчанию, методы Это ключевое слово требуется, если имя метода конфликтует с существующим методом |
Измерение
Доступность: 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 вместо неё.
Привязывает все точки входной геометрии к сетке. Способ привязки геометрии к сетке зависит от количества числовых аргументов (float, integer или long).
| Количество аргументов | Описание |
|---|---|
| 1 | Единственный размер для привязки к сеткам X и Y. |
| 2 | Размеры X и Y для привязки к сетке. |
| 4 | Размеры X, Y и соответствующие им начальные значения X, Y. |
transform
-
GeoQuerySet.transform(srid=4326, **kwargs)
Устарело начиная с версии 1.9: Используйте функцию Transform вместо неё.
Доступность: 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)
Устарело начиная с версии 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 к каждой модели в наборе запросов, содержащему представление геометрии в формате 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)
Устарело начиная с версии 1.9: Используйте функцию AsKML вместо этого.
Доступно: 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)
Устарело начиная с версии 1.9: Используйте функцию AsSVG вместо этого.
Доступно: PostGIS, SpatiaLite
Присоединяет атрибут svg к каждой модели в наборе запросов, содержащему данные пути Scalable Vector Graphics (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.
Функции агрегирования
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
Возвращает объект геометрии GEOMETRYCOLLECTION или MULTI, извлекаемый из столбца геометрии. Это аналогично упрощенной версии агрегата Union, за исключением того, что он может быть на несколько порядков быстрее, чем выполнение объединения, так как он просто сворачивает геометрии в коллекцию или многообъект, не заботясь о растворении границ.
Extent
-
class Extent(geo_field)[source]
Доступность: 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)[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, SpatiaLite
Возвращает линию, построенную из геометрий точечных полей в QuerySet. В настоящее время упорядочивание набора запросов не оказывает влияния.
Добавлена поддержка SpatiaLite.
Пример:
>>> 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)[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) Для объяснения этой процедуры, прочтите Особенности пространственного предиката «содержит» OGC Мартина Дэвиса (разработчика PostGIS). |
| [4] | См. документацию PostGIS по ST_ContainsProperly документации для получения дополнительной информации. |
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.10/ref/contrib/gis/geoquerysets/