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(
... memoryview(
... b"\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@"
... )
... ) # WKB
>>> 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"))
Геометрии — это Python-объекты
Объекты GEOSGeometry являются «Python-объектами», другими словами, к компонентам можно получить доступ, изменить их и выполнить итерацию с использованием стандартных соглашений 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)[source] -
Параметры: -
geo_input — Значение входных данных геометрии (строка или
memoryview) - srid (int) — идентификатор пространственной системы координат
-
geo_input — Значение входных данных геометрии (строка или
Это базовый класс для всех геометрических объектов GEOS. Он инициализируется на основе переданного geo_input аргумента, а затем предполагает соответствующий подкласс геометрии (например, GEOSGeometry('POINT(1 1)') создаст объект Point).
Параметр srid, если задан, устанавливается в качестве SRID созданной геометрии, если geo_input не имеет SRID. Если разные SRID предоставлены через параметры geo_input и srid, возникает исключение ValueError.
Принимаются следующие форматы ввода вместе с соответствующими типами Python:
| Формат | Тип ввода |
|---|---|
| WKT / EWKT | str |
| HEX / HEXEWKB | str |
| WKB / EWKB | memoryview |
| 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 -
Возвращает, пустое ли множество точек в геометрии.
-
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.equals_identical(other) -
Новое в Django 5.0.
Возвращает
Trueесли две геометрии точечно эквивалентны, проверяя, что структура, порядок и значения всех вершин идентичны во всех измерениях.NaNзначения считаются равными другимNaNзначениям. Требуется GEOS 3.12.
-
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объекты оптимизированы для операций contains, intersects, covers, crosses, disjoint, overlaps, touches и within. Обратитесь к документации Prepared Geometries для получения дополнительной информации.
-
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() -
Возвращает эквивалентную корректную
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)
Точка
-
class Point(x=None, y=None, z=None, srid=None)[source] -
Объекты
Pointсоздаются с использованием аргументов, представляющих координаты компонентов точки, или с помощью единственной последовательности координат. Например, следующие варианты эквивалентны:>>> pnt = Point(5, 23) >>> pnt = Point([5, 23])
Пустые объекты
Pointмогут быть созданы, передав никаких аргументов или пустую последовательность. Следующие варианты эквивалентны:>>> pnt = Point() >>> pnt = Point([])
Линия
-
class LineString(*args, **kwargs)[source] -
Объекты
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замкнутой.
-
Линейная цепь
-
class LinearRing(*args, **kwargs)[source] -
Объекты
LinearRingсоздаются точно так же, как объектыLineString, однако координаты должны быть замкнутыми, то есть первая координата должна быть такой же, как последняя. Например:>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
Обратите внимание, что
(0, 0)является первой и последней координатой – если они не совпадают, будет выведено сообщение об ошибке.-
is_counterclockwise[source] -
Возвращает, является ли эта
LinearRingпротив часовой стрелки.
-
Многоугольник
-
class Polygon(*args, **kwargs)[source] -
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)[source] -
Возвращает объект полигона из заданной ограничивающей рамки (bounding-box), 4-кортежа, состоящего из
(xmin, ymin, xmax, ymax).
-
num_interior_rings[source] -
Возвращает количество внутренних колец в этой геометрии.
-
Сравнение полигонов
Обратите внимание, что можно напрямую сравнивать объекты Polygon с объектами < или >, но так как сравнение выполняется через LineString полигона, это не имеет особого смысла (но согласуется и быстро). Вы всегда можете принудительно сравнить объекты с помощью свойства area:
>>> if poly_1.area > poly_2.area: ... pass ...
Коллекции геометрий
MultiPoint
-
class MultiPoint(*args, **kwargs)[source] -
MultiPointобъекты могут быть созданы путём передачи в качестве аргументов объектовPoint, или единственной последовательности объектовPoint:>>> mp = MultiPoint(Point(0, 0), Point(1, 1)) >>> mp = MultiPoint((Point(0, 0), Point(1, 1)))
MultiLineString
-
class MultiLineString(*args, **kwargs)[source] -
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)[source] -
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)[source] -
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)[source] -
Параметры: file_h (объект Python fileили строковый путь к файлу) – входной файл, содержащий пространственные данныеТип возвращаемого значения: экземпляр GEOSGeometry, соответствующий пространственным данным в файлеПример:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile("/home/bob/geom.wkt")
-
fromstr(string, srid=None)[source] -
Параметры: Тип возвращаемого значения: экземпляр
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[source] -
Пример:
>>> from django.contrib.gis.geos import WKBReader >>> wkb_r = WKBReader() >>> wkb_r.read("0101000000000000000000F03F000000000000F03F") <Point object at 0x103a88910>
-
class WKTReader[source] -
Пример:
>>> 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)[source] -
WKBWriterпредоставляет наибольший контроль над выводом. По умолчанию он возвращает соответствующий стандарту OGC WKB, когда вызывается методwrite. Однако у него есть свойства, которые позволяют создавать EWKB — надмножество стандарта WKB, включающее дополнительную информацию. Более подробную информацию об аргументеdimсм. в документации кWKBWriter.outdim.-
write(geom)[source]
Возвращает 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)[source]
Возвращает WKB геометрии в шестнадцатеричном формате. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F'
-
byteorder
Это свойство можно установить для изменения порядка байтов представления геометрии.
Значение порядка байтов Описание 0 Большой порядок байтов (например, совместим с системами RISC) 1 Малый порядок байтов (например, совместим с системами 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[source]
Это свойство можно установить для изменения выходной размерности представления геометрии. Другими словами, если у вас есть 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[source]
Установите это свойство с булевым значением, чтобы указать, следует ли включать 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)[source] -
Этот класс позволяет выводить представление WKT геометрии. Подробную информацию об аргументах конструктора см. в атрибутах
WKBWriter.outdim,trimиprecision.-
write(geom)[source]
Возвращает 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[source] -
См.
WKBWriter.outdim.
-
trim[source]
Это свойство используется для включения или отключения обрезки ненужных десятичных знаков.
>>> 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[source]
Это свойство управляет точностью округления координат; если установлено в значение
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[source] -
Базовое исключение GEOS, указывает на ошибку, связанную с GEOS.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.1/ref/contrib/gis/geos/