GEOS API
Обзор
Что такое GEOS?
GEOS расшифровывается как Geometry Engine — Open Source и представляет собой библиотеку на C++, портированную из Java Topology Suite. GEOS реализует пространственные предикатные функции и пространственные операторы стандарта OpenGIS Simple Features for SQL. GEOS, ныне проект OSGeo, первоначально был разработан и поддерживался компанией Refractions Research из Виктории, Канада.
Возможности
GeoDjango реализует высокоуровневый Python-обёртку для библиотеки GEOS, и её возможности включают:
- Интерфейс с лицензией BSD для геометрических процедур GEOS, реализованный чисто на Python с использованием
ctypes. - Слабая связь с GeoDjango. Например, объекты
GEOSGeometryмогут использоваться вне проекта/приложения Django. Другими словами, нет необходимости устанавливатьDJANGO_SETTINGS_MODULEили использовать базу данных и т. д. - Изменяемость: объекты
GEOSGeometryмогут быть изменены. - Многоплатформенность и проверенные тесты; совместимость с платформами Windows, Linux, Solaris и macOS.
Руководство
Этот раздел содержит краткое введение и руководство по использованию объектов GEOSGeometry.
Создание геометрии
Объекты GEOSGeometry могут быть созданы несколькими способами. Первый — просто создать объект на каком-либо пространственном вводе — ниже приведены примеры создания одной и той же геометрии из WKT, HEX, WKB и GeoJSON:
>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry('POINT(5 23)') # WKT
>>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX
>>> pnt = GEOSGeometry(buffer('\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@'))
>>> pnt = GEOSGeometry('{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }') # GeoJSON
Другой вариант — использовать конструктор для конкретного типа геометрии, которую вы хотите создать. Например, объект Point можно создать, передав координаты X и Y в его конструктор:
>>> from django.contrib.gis.geos import Point >>> pnt = Point(5, 23)
Все эти конструкторы принимают ключевой аргумент srid. Например:
>>> from django.contrib.gis.geos import GEOSGeometry, LineString, Point
>>> print(GEOSGeometry('POINT (0 0)', srid=4326))
SRID=4326;POINT (0 0)
>>> print(LineString((0, 0), (1, 1), srid=4326))
SRID=4326;LINESTRING (0 0, 1 1)
>>> print(Point(0, 0, srid=32140))
SRID=32140;POINT (0 0)
Наконец, есть фабричный метод fromfile(), который возвращает объект GEOSGeometry из файла:
>>> from django.contrib.gis.geos import fromfile
>>> pnt = fromfile('/path/to/pnt.wkt')
>>> pnt = fromfile(open('/path/to/pnt.wkt'))
Геометрии являются "питоническими"
Объекты GEOSGeometry «питонические», то есть к компонентам можно получить доступ, их можно изменить и перебрать, используя стандартные соглашения Python. Например, вы можете перебрать координаты в объекте Point:
>>> pnt = Point(5, 23) >>> [coord for coord in pnt] [5.0, 23.0]
С любым объектом геометрии свойство GEOSGeometry.coords может использоваться для получения координат геометрии в виде кортежа Python:
>>> pnt.coords (5.0, 23.0)
Вы можете получить/установить компоненты геометрии, используя стандартные методы индексирования Python. Однако, то, что возвращается, зависит от типа геометрии объекта. Например, индексирование объекта LineString возвращает кортеж координат:
>>> from django.contrib.gis.geos import LineString >>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0)) >>> line[0] (0.0, 0.0) >>> line[-2] (50.0, 0.0)
В то время как индексирование объекта Polygon вернёт кольцо (объект LinearRing) соответствующее индексу:
>>> from django.contrib.gis.geos import Polygon >>> poly = Polygon( ((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0)) ) >>> poly[0] <LinearRing object at 0x1044395b0> >>> poly[0][-2] # second-to-last coordinate of external ring (50.0, 0.0)
Кроме того, координаты/компоненты геометрии можно добавить или изменить, как и в Python-списке:
>>> line[0] = (1.0, 1.0) >>> line.pop() (0.0, 0.0) >>> line.append((1.0, 1.0)) >>> line.coords ((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))
Геометрии поддерживают операции, похожие на множества:
>>> from django.contrib.gis.geos import LineString >>> ls1 = LineString((0, 0), (2, 2)) >>> ls2 = LineString((1, 1), (3, 3)) >>> print(ls1 | ls2) # equivalent to `ls1.union(ls2)` MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3)) >>> print(ls1 & ls2) # equivalent to `ls1.intersection(ls2)` LINESTRING (1 1, 2 2) >>> print(ls1 - ls2) # equivalent to `ls1.difference(ls2)` LINESTRING(0 0, 1 1) >>> print(ls1 ^ ls2) # equivalent to `ls1.sym_difference(ls2)` MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))
Оператор равенства не проверяет пространственное равенство
Оператор равенства GEOSGeometry использует equals_exact(), а не equals(), т. е. требует, чтобы сравниваемые геометрии имели одинаковые координаты в тех же позициях с одинаковыми SRID:
>>> from django.contrib.gis.geos import LineString >>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((1, 1), (0, 0)) >>> ls3 = LineString((1, 1), (0, 0), srid=4326) >>> ls1.equals(ls2) True >>> ls1 == ls2 False >>> ls3 == ls2 # different SRIDs False
Объекты геометрии
GEOSGeometry
-
class GEOSGeometry(geo_input, srid=None) -
Параметры: - geo_input — значение входных данных геометрии (строка или буфер)
- srid (int) — идентификатор пространственной системы координат
Это базовый класс для всех объектов геометрии GEOS. Он инициализируется переданным аргументом geo_input, а затем предполагает соответствующий подкласс геометрии (например, GEOSGeometry('POINT(1 1)') создаст объект Point).
Параметр srid, если он задан, устанавливается в качестве SRID создаваемой геометрии, если у geo_input нет SRID. Если разные SRID предоставлены через параметры geo_input и srid, поднимается исключение ValueError:
>>> from django.contrib.gis.geos import GEOSGeometry
>>> GEOSGeometry('POINT EMPTY', srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry('SRID=4326;POINT EMPTY', srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry('SRID=1;POINT EMPTY', srid=4326)
Traceback (most recent call last):
...
ValueError: Input geometry already has SRID: 1.
Принимаются следующие форматы ввода вместе с соответствующими типами Python:
| Формат | Тип входных данных |
|---|---|
| WKT / EWKT | str |
| HEX / HEXEWKB | str |
| WKB / EWKB | buffer |
| GeoJSON | str |
Для формата GeoJSON SRID устанавливается на основе члена crs. Если crs не указан, SRID по умолчанию равен 4326.
-
classmethod GEOSGeometry.from_gml(gml_string) -
Создаёт объект
GEOSGeometryиз переданной строки GML.
Свойства
-
GEOSGeometry.coords -
Возвращает координаты геометрии в виде кортежа.
-
GEOSGeometry.dims -
Возвращает размерность геометрии:
-
0дляPointиMultiPoint -
1дляLineStringиMultiLineString -
2дляPolygonиMultiPolygon -
-1для пустыхGeometryCollection - максимальный размер элементов для непустых
GeometryCollection
-
-
GEOSGeometry.empty -
Возвращает значение True, если набор точек в геометрии пуст, иначе False.
-
GEOSGeometry.geom_type -
Возвращает строку, соответствующую типу геометрии. Например:
>>> pnt = GEOSGeometry('POINT(5 23)') >>> pnt.geom_type 'Point'
-
GEOSGeometry.geom_typeid -
Возвращает идентификационный номер типа геометрии GEOS. В следующей таблице показано значение для каждого типа геометрии:
Геометрия ID Point0 LineString1 LinearRing2 Polygon3 MultiPoint4 MultiLineString5 MultiPolygon6 GeometryCollection7
-
GEOSGeometry.num_coords -
Возвращает количество координат в геометрии.
-
GEOSGeometry.num_geom -
Возвращает количество геометрий в этой геометрии. Другими словами, вернет 1 для всех, кроме коллекций геометрий.
-
GEOSGeometry.hasz -
Возвращает булево значение, указывающее, является ли геометрия трехмерной.
-
GEOSGeometry.ring -
Возвращает булево значение, указывающее, является ли геометрия
LinearRing.
-
GEOSGeometry.simple -
Возвращает булево значение, указывающее, является ли геометрия «простой». Геометрия является простой тогда и только тогда, когда она не пересекается сама с собой (кроме точек границы). Например, объект
LineStringне является простым, если он пересекается сам с собой. Таким образом, объектыLinearRingиPolygonвсегда простые, потому что по определению они не могут пересекаться сами с собой.
-
GEOSGeometry.valid -
Возвращает булево значение, указывающее, является ли геометрия валидной.
-
GEOSGeometry.valid_reason -
Возвращает строку, описывающую причину, по которой геометрия невалидна.
-
GEOSGeometry.srid -
Свойство, которое может быть использовано для получения или установки SRID, связанного с геометрией. Например:
>>> pnt = Point(5, 23) >>> print(pnt.srid) None >>> pnt.srid = 4326 >>> pnt.srid 4326
Свойства вывода
Свойства в этом разделе экспортируют объект GEOSGeometry в другой формат. Этот вывод может быть в виде строки, буфера или даже другого объекта.
-
GEOSGeometry.ewkt -
Возвращает «расширенный» текст Well-Known (EWKT) геометрии. Это представление специфично для PostGIS и является супермножеством стандарта OGC WKT. [1] По сути, SRID добавляется перед представлением WKT, например
SRID=4326;POINT(5 23).Примечание
Вывод этого свойства не включает информацию 3dm, 3dz и 4d, которую PostGIS поддерживает в своих представлениях EWKT.
-
GEOSGeometry.hex -
Возвращает WKB этой геометрии в шестнадцатеричном формате. Обратите внимание, что значение SRID не включено в это представление, так как оно не является частью спецификации OGC (используйте свойство
GEOSGeometry.hexewkbвместо этого).
-
GEOSGeometry.hexewkb -
Возвращает EWKB этой геометрии в шестнадцатеричном формате. Это расширение спецификации WKB, включающее значение SRID, которое является частью этой геометрии.
-
GEOSGeometry.json -
Возвращает представление геометрии в формате GeoJSON. Обратите внимание, что результат не является полной структурой GeoJSON, а только содержимое ключа
geometryструктуры GeoJSON. См. также Сериализатор GeoJSON.
-
GEOSGeometry.geojson -
Псевдоним для
GEOSGeometry.json.
-
GEOSGeometry.kml -
Возвращает представление геометрии в формате KML (Keyhole Markup Language). Это следует использовать только для геометрий со SRID 4326 (WGS84), но это ограничение не проверяется.
-
GEOSGeometry.ogr -
Возвращает объект
OGRGeometry, соответствующий геометрии GEOS.
-
GEOSGeometry.wkb -
Возвращает представление геометрии в формате WKB (Well-Known Binary) в виде Python-буфера. Значение SRID не включено, используйте свойство
GEOSGeometry.ewkbвместо этого.
-
GEOSGeometry.ewkb -
Возвращает представление EWKB этой геометрии в виде Python-буфера. Это расширение спецификации WKB, включающее любое значение SRID, которое является частью этой геометрии.
-
GEOSGeometry.wkt -
Возвращает текст Well-Known (WKT) геометрии (стандарт OGC).
Пространственные предикаты
Все следующие пространственные предикаты принимают другой экземпляр GEOSGeometry (other) в качестве параметра и возвращают булево значение.
-
GEOSGeometry.contains(other) -
Возвращает
Trueеслиother.within(this)возвращаетTrue.
-
GEOSGeometry.covers(other) -
Возвращает
Trueесли эта геометрия покрывает указанную геометрию.Предикат
coversимеет следующие эквивалентные определения:- Каждая точка другой геометрии является точкой этой геометрии.
- Матрица пересечения DE-9IM для двух геометрий является
T*****FF*,*T****FF*,***T**FF*, или****T*FF*.
Если хотя бы одна геометрия пустая, возвращает
False.Этот предикат похож на
GEOSGeometry.contains(), но более общий (т.е. возвращаетTrueв большем количестве случаев). В частности, в отличие отcontains(), он не различает точки на границе и внутри геометрий. В большинстве ситуаций следует предпочестьcovers()contains(). В качестве дополнительной пользы,covers()лучше оптимизируется и, следовательно, должен превосходитьcontains().
-
GEOSGeometry.crosses(other) -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий равнаT*T******(для точки и кривой, точки и области или линии и области)0********(для двух кривых).
-
GEOSGeometry.disjoint(other) -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий равнаFF*FF****.
-
GEOSGeometry.equals(other) -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий равнаT*F**FFF*.
-
GEOSGeometry.equals_exact(other, tolerance=0) -
Возвращает true, если две геометрии точно равны с учётом заданной толерантности. Значение
toleranceдолжно быть числом с плавающей точкой, представляющим толерантность погрешности в сравнении, например,poly1.equals_exact(poly2, 0.001)будет сравнивать равенство с точностью до одной тысячной единицы.
-
GEOSGeometry.intersects(other) -
Возвращает
TrueеслиGEOSGeometry.disjoint()являетсяFalse.
-
GEOSGeometry.overlaps(other) -
Возвращает true, если матрица пересечения DE-9IM для двух геометрий равна
T*T***T**(для двух точек или двух поверхностей)1*T***T**(для двух кривых).
-
GEOSGeometry.relate_pattern(other, pattern) -
Возвращает
Trueесли элементы в матрице пересечения DE-9IM для этой геометрии и другой соответствуют заданномуpattern— строке из девяти символов из алфавита: {T,F,*,0}.
-
GEOSGeometry.touches(other) -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий равнаFT*******,F**T*****илиF***T****.
-
GEOSGeometry.within(other) -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий равнаT*F**F***.
Топологические методы
-
GEOSGeometry.buffer(width, quadsegs=8) -
Возвращает
GEOSGeometry, представляющий все точки, расстояние которых от этой геометрии меньше или равно заданномуwidth. Необязательное ключевое словоquadsegsзадаёт количество сегментов, используемых для аппроксимации четверти окружности (по умолчанию 8).
-
GEOSGeometry.buffer_with_style(width, quadsegs=8, end_cap_style=1, join_style=1, mitre_limit=5.0) -
То же, что и
buffer(), но позволяет настроить стиль буфера.-
end_cap_styleможет быть круглым (1), плоским (2) или квадратным (3). -
join_styleможет быть круглым (1), фасонным (2) или скошенным (3). - Предельное значение отношения фасок (
mitre_limit) влияет только на стиль соединения фасок.
-
-
GEOSGeometry.difference(other) -
Возвращает
GEOSGeometry, представляющий точки, составляющие эту геометрию, но не составляющие другую.
-
GEOSGeometry.interpolate(distance)
-
GEOSGeometry.interpolate_normalized(distance) -
При заданном расстоянии (число с плавающей точкой) возвращает точку (или ближайшую точку) в пределах геометрии (
LineStringилиMultiLineString) на этом расстоянии. Нормализованная версия принимает расстояние как число с плавающей точкой между 0 (начало) и 1 (конец).Обратная функция
GEOSGeometry.project().
-
GEOSGeometry.intersection(other) -
Возвращает
GEOSGeometry, представляющий точки, общие для этой геометрии и другой.
-
GEOSGeometry.project(point)
-
GEOSGeometry.project_normalized(point) -
Возвращает расстояние (число с плавающей точкой) от начала геометрии (
LineStringилиMultiLineString) до спроецированной точки на геометрии (т.е. до точки на линии, ближайшей к заданной точке). Нормализованная версия возвращает расстояние как число с плавающей точкой между 0 (началом) и 1 (концом).Обратная функция
GEOSGeometry.interpolate().
-
GEOSGeometry.relate(other) -
Возвращает матрицу пересечения DE-9IM (строку), представляющую топологические отношения между этой геометрией и другой.
-
GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False) -
Возвращает новую
GEOSGeometry, упрощённую до заданной толерантности с помощью алгоритма Дугласа-Пеккера. Большее значение толерантности подразумевает меньшее количество точек в выводе. Если толерантность не указана, она по умолчанию равна 0.По умолчанию эта функция не сохраняет топологию. Например, объекты
Polygonмогут быть разделены, сжаты до линий или исчезнуть.Polygonотверстия могут быть созданы или исчезнуть, а линии могут пересекаться. Указавpreserve_topology=True, результат будет иметь такую же размерность и количество компонентов, что и входные данные; однако это значительно медленнее.
-
GEOSGeometry.sym_difference(other) -
Возвращает
GEOSGeometry, объединяющий точки в этой геометрии, не входящие в другую, и точки в другой, не входящие в эту геометрию.
-
GEOSGeometry.union(other) -
Возвращает
GEOSGeometry, представляющий все точки в этой геометрии и другой.
Топологические свойства
-
GEOSGeometry.boundary -
Возвращает границу как новый объект геометрии.
-
GEOSGeometry.centroid -
Возвращает объект
Point, представляющий геометрический центр геометрии. Точка не гарантируется, что будет внутри геометрии.
-
GEOSGeometry.convex_hull -
Возвращает наименьший
Polygon, содержащий все точки в геометрии.
-
GEOSGeometry.envelope -
Возвращает
Polygon, представляющий охватывающую оболочку этой геометрии. Обратите внимание, что он также может вернутьPoint, если входная геометрия является точкой.
-
GEOSGeometry.point_on_surface -
Вычисляет и возвращает
Point, гарантированно находящуюся внутри этой геометрии.
-
GEOSGeometry.unary_union -
Вычисляет объединение всех элементов этой геометрии.
Результат подчиняется следующему соглашению:
- Объединение набора
LineStringприводит к полному узлению и растворению линий. - Объединение набора
Polygonвсегда возвращает геометрию типаPolygonилиMultiPolygon(в отличие отGEOSGeometry.union(), которое может возвращать геометрии меньшей размерности, если происходит коллапс топологии).
- Объединение набора
Другие свойства и методы
-
GEOSGeometry.area -
Это свойство возвращает площадь геометрии.
-
GEOSGeometry.extent -
Это свойство возвращает область определения этой геометрии в виде 4-кортежа, состоящего из
(xmin, ymin, xmax, ymax).
-
GEOSGeometry.clone() -
Этот метод возвращает
GEOSGeometry, являющийся клоном исходного.
-
GEOSGeometry.distance(geom) -
Возвращает расстояние между ближайшими точками этой геометрии и заданной
geom(другой объектGEOSGeometry).Примечание
Расчёты расстояний в GEOS линейные – другими словами, GEOS не выполняет сферические вычисления, даже если SRID указывает географическую систему координат.
-
GEOSGeometry.length -
Возвращает длину этой геометрии (например, 0 для
Point, длинуLineStringили окружностьPolygon).
-
GEOSGeometry.prepared -
Возвращает GEOS
PreparedGeometryдля содержимого этой геометрии.PreparedGeometryобъекты оптимизированы для операций содержит, пересекается, покрывает, пересекается, не пересекается, перекрывается, касается и находится внутри. Обратитесь к документации по Готовые геометрии для получения дополнительной информации.
-
GEOSGeometry.srs -
Возвращает объект
SpatialReference, соответствующий SRID геометрии, илиNone.
-
GEOSGeometry.transform(ct, clone=False) -
Преобразует геометрию в соответствии с заданным параметром преобразования координат (
ct), который может быть целочисленным SRID, строкой WKT пространственной ссылки, строкой PROJ, объектомSpatialReferenceили объектомCoordTransform. По умолчанию геометрия преобразуется на месте, и ничего не возвращается. Однако, если ключевое словоcloneустановлено, то геометрия не изменяется, и вместо этого возвращается преобразованный клон геометрии.Примечание
Вызывает
GEOSException, если GDAL недоступен или SRID геометрииNoneили меньше 0. Не накладывает никаких ограничений на SRID геометрии, если вызвана с объектомCoordTransform.
-
GEOSGeometry.make_valid() -
Новое в Django 4.1.
Возвращает эквивалентную корректную
GEOSGeometry, пытаясь не потерять ни одного вершина. Если геометрия уже корректна, она возвращается без изменений. Это аналогично базе данных функцииMakeValid. Требуется GEOS 3.8.
-
GEOSGeometry.normalize(clone=False) -
Преобразует эту геометрию в каноническую форму. Если ключевое слово
cloneустановлено, то геометрия не изменяется, и вместо этого возвращается нормализованный клон геометрии:>>> g = MultiPoint(Point(0, 0), Point(2, 2), Point(1, 1)) >>> print(g) MULTIPOINT (0 0, 2 2, 1 1) >>> g.normalize() >>> print(g) MULTIPOINT (2 2, 1 1, 0 0)
Изменено в Django 4.1:Добавлен аргумент
clone.
Point
-
class Point(x=None, y=None, z=None, srid=None) -
Объекты
Pointсоздаются с помощью аргументов, представляющих координаты компонентов точки, или с помощью одного последовательности координат. Например, следующие варианты эквивалентны:>>> pnt = Point(5, 23) >>> pnt = Point([5, 23])
Пустые объекты
Pointмогут быть созданы, не передавая аргументы или пустую последовательность. Следующие варианты эквивалентны:>>> pnt = Point() >>> pnt = Point([])
LineString
-
class LineString(*args, **kwargs) -
Объекты
LineStringсоздаются с использованием аргументов, которые представляют собой либо последовательность координат, либо объектыPoint. Например, следующие варианты эквивалентны:>>> ls = LineString((0, 0), (1, 1)) >>> ls = LineString(Point(0, 0), Point(1, 1))
Кроме того, объекты
LineStringтакже могут быть созданы путём передачи одной последовательности координат или объектовPoint:>>> ls = LineString( ((0, 0), (1, 1)) ) >>> ls = LineString( [Point(0, 0), Point(1, 1)] )
Пустые объекты
LineStringмогут быть созданы, не передавая аргументы или пустую последовательность. Следующие варианты эквивалентны:>>> ls = LineString() >>> ls = LineString([])
-
closed -
Возвращает, замкнута ли эта
LineString.
-
LinearRing
-
class LinearRing(*args, **kwargs) -
Объекты
LinearRingсоздаются точно так же, как объектыLineString, однако координаты должны быть замкнутыми, то есть первые координаты должны быть такими же, как и последние. Например:>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
Обратите внимание, что
(0, 0)– это первая и последняя координата – если они не были равны, произошла бы ошибка.-
is_counterclockwise -
Возвращает, является ли эта
LinearRingпротив часовой стрелки.
-
Polygon
-
class Polygon(*args, **kwargs) -
Объекты
Polygonмогут быть созданы путём передачи параметров, представляющих кольца многоугольника. Параметры могут быть экземплярамиLinearRingили последовательностью, которая может быть использована для созданияLinearRing:>>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0)) >>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4)) >>> poly = Polygon(ext_coords, int_coords) >>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))
-
classmethod from_bbox(bbox) -
Возвращает объект многоугольника из заданной области, 4-кортеж, содержащий
(xmin, ymin, xmax, ymax).
-
num_interior_rings -
Возвращает количество внутренних колец в этой геометрии.
-
Сравнение полигонов
Обратите внимание, что сравнить объекты Polygon напрямую с < или >, возможно, но так как сравнение выполняется через метод LineString полигона, это не имеет большого смысла (но это последовательно и быстро). Вы всегда можете принудительно выполнить сравнение с помощью свойства area:
>>> if poly_1.area > poly_2.area: >>> pass
Коллекции геометрий
MultiPoint
-
class MultiPoint(*args, **kwargs) -
Объекты
MultiPointможно создать, передав в качестве аргументов объектыPoint, или один последовательность объектовPoint:>>> mp = MultiPoint(Point(0, 0), Point(1, 1)) >>> mp = MultiPoint( (Point(0, 0), Point(1, 1)) )
MultiLineString
-
class MultiLineString(*args, **kwargs) -
Объекты
MultiLineStringможно создать, передав в качестве аргументов объектыLineString, или один последовательность объектовLineString:>>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((2, 2), (3, 3)) >>> mls = MultiLineString(ls1, ls2) >>> mls = MultiLineString([ls1, ls2])
-
merged -
Возвращает
LineString, представляющую собой объединённую линию всех компонентов в этойMultiLineString.
-
closed -
Возвращает
Trueтолько в том случае, если все элементы замкнуты.
-
MultiPolygon
-
class MultiPolygon(*args, **kwargs) -
Объекты
MultiPolygonможно создать, передав объектыPolygonили один последовательность объектовPolygon:>>> p1 = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) ) >>> p2 = Polygon( ((1, 1), (1, 2), (2, 2), (1, 1)) ) >>> mp = MultiPolygon(p1, p2) >>> mp = MultiPolygon([p1, p2])
GeometryCollection
-
class GeometryCollection(*args, **kwargs) -
Объекты
GeometryCollectionможно создать, передав другие объектыGEOSGeometry, или один последовательность объектовGEOSGeometry:>>> poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) ) >>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly) >>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))
Подготовленные геометрии
Чтобы получить подготовленную геометрию, обратитесь к свойству GEOSGeometry.prepared. После получения экземпляра PreparedGeometry его пространственные предикатные методы, перечисленные ниже, можно использовать с другими объектами GEOSGeometry. Операция с подготовленной геометрией может быть в разы быстрее — чем сложнее подготовленная геометрия, тем больше ускорение операции. Для получения дополнительной информации, пожалуйста, обратитесь к странице wiki GEOS по подготовленным геометриям.
Например:
>>> from django.contrib.gis.geos import Point, Polygon >>> poly = Polygon.from_bbox((0, 0, 5, 5)) >>> prep_poly = poly.prepared >>> prep_poly.contains(Point(2.5, 2.5)) True
PreparedGeometry
-
class PreparedGeometry -
Все методы
PreparedGeometryпринимают аргументother, который должен быть экземпляромGEOSGeometry.-
contains(other)
-
contains_properly(other)
-
covers(other)
-
crosses(other)
-
disjoint(other)
-
intersects(other)
-
overlaps(other)
-
touches(other)
-
within(other)
-
Фабрики геометрий
-
fromfile(file_h) -
Параметры: file_h (объект Python fileили строка пути к файлу) – входной файл, содержащий пространственные данныеТип возвращаемого значения: объект GEOSGeometry, соответствующий пространственным данным в файлеПример:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile('/home/bob/geom.wkt')
-
fromstr(string, srid=None) -
Параметры: Тип возвращаемого значения: объект
GEOSGeometry, соответствующий пространственным данным в строкеfromstr(string, srid)эквивалентноGEOSGeometry(string, srid).Пример:
>>> from django.contrib.gis.geos import fromstr >>> pnt = fromstr('POINT(-90.5 29.5)', srid=4326)
Объекты ввода/вывода
Объекты чтения
Классы ввода/вывода для чтения возвращают экземпляр GEOSGeometry из входных данных WKB и/или WKT, переданных в метод read(geom).
-
class WKBReader -
Пример:
>>> from django.contrib.gis.geos import WKBReader >>> wkb_r = WKBReader() >>> wkb_r.read('0101000000000000000000F03F000000000000F03F') <Point object at 0x103a88910>
-
class WKTReader -
Пример:
>>> from django.contrib.gis.geos import WKTReader >>> wkt_r = WKTReader() >>> wkt_r.read('POINT(1 1)') <Point object at 0x103a88b50>
Объекты записи
Все объекты записи имеют метод write(geom), который возвращает WKB или WKT заданной геометрии. Кроме того, объекты WKBWriter также имеют свойства, которые можно использовать для изменения порядка байтов и/или включения значения SRID (другими словами, EWKB).
-
class WKBWriter(dim=2) -
WKBWriterпредоставляет наибольший контроль над выводом. По умолчанию, при вызове методаwrite, он возвращает WKB, соответствующий OGC. Однако, он имеет свойства, которые позволяют создавать EWKB, расширенный стандарт WKB, содержащий дополнительную информацию. Подробнее о параметреdimсм. документацию поWKBWriter.outdim.-
write(geom)
Возвращает WKB заданной геометрии в виде объекта Python
buffer. Пример:>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write(pnt) <read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
-
write_hex(geom)
Возвращает WKB геометрии в шестнадцатеричном формате. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F'
-
byteorder
Это свойство можно установить для изменения порядка байтов представления геометрии.
Значение порядка байт Описание 0 Big Endian (например, совместимо с системами RISC) 1 Little Endian (например, совместимо с системами x86) Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1) >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F' >>> wkb_w.byteorder = 0 '00000000013FF00000000000003FF0000000000000'
-
outdim
Это свойство можно установить для изменения размерности вывода представления геометрии. Другими словами, если у вас есть 3D геометрия, установите значение 3, чтобы значение Z было включено в WKB.
Значение outdim Описание 2 По умолчанию, вывод 2D WKB. 3 Вывод 3D WKB. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> wkb_w.outdim 2 >>> pnt = Point(1, 1, 1) >>> wkb_w.write_hex(pnt) # By default, no Z value included: '0101000000000000000000F03F000000000000F03F' >>> wkb_w.outdim = 3 # Tell writer to include Z values >>> wkb_w.write_hex(pnt) '0101000080000000000000F03F000000000000F03F000000000000F03F'
-
srid
Установите это свойство с логическим значением, чтобы указать, следует ли включать SRID геометрии в представление WKB. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1, srid=4326) >>> wkb_w.write_hex(pnt) # By default, no SRID included: '0101000000000000000000F03F000000000000F03F' >>> wkb_w.srid = True # Tell writer to include SRID >>> wkb_w.write_hex(pnt) '0101000020E6100000000000000000F03F000000000000F03F'
-
-
class WKTWriter(dim=2, trim=False, precision=None) -
Этот класс позволяет выводить представление WKT геометрии. Подробнее о параметрах конструктора см. атрибуты
WKBWriter.outdim,trimиprecision.-
write(geom)
Возвращает WKT заданной геометрии. Пример:
>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1, 1) >>> wkt_w = WKTWriter() >>> wkt_w.write(pnt) 'POINT (1.0000000000000000 1.0000000000000000)'
-
outdim -
См.
WKBWriter.outdim.
-
trim
Это свойство используется для включения или отключения обрезки незначащих десятичных знаков.
>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1, 1) >>> wkt_w = WKTWriter() >>> wkt_w.trim False >>> wkt_w.write(pnt) 'POINT (1.0000000000000000 1.0000000000000000)' >>> wkt_w.trim = True >>> wkt_w.write(pnt) 'POINT (1 1)'
-
precision
Это свойство контролирует точность округления координат; если установлено значение
None, округление отключено.>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1.44, 1.66) >>> wkt_w = WKTWriter() >>> print(wkt_w.precision) None >>> wkt_w.write(pnt) 'POINT (1.4399999999999999 1.6599999999999999)' >>> wkt_w.precision = 0 >>> wkt_w.write(pnt) 'POINT (1 2)' >>> wkt_w.precision = 1 >>> wkt_w.write(pnt) 'POINT (1.4 1.7)'
-
Примечания
| [1] | См. PostGIS EWKB, EWKT и канонические формы, документацию PostGIS в гл. 4.1.2. |
Настройки
GEOS_LIBRARY_PATH
Строка, указывающая расположение библиотеки GEOS C. Обычно эта настройка используется только в том случае, если библиотека GEOS C находится в нестандартном расположении (например, /home/bob/lib/libgeos_c.so).
Примечание
Настройка должна содержать полный путь к C-библиотеке; другими словами, вам нужно использовать libgeos_c.so, а не libgeos.so.
Исключения
-
exception GEOSException -
Базовое исключение GEOS, указывает на ошибку, связанную с GEOS.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.1/ref/contrib/gis/geos/