• 3.1
  • 3.2
  • 6.1
  • Версия документации: 5.0

ГЕОС API

Фон

Что такое ГЕОС?

`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 могут быть изменены.

  • Кроссплатформенность протестирована.

Учебное пособие

Этот раздел содержит краткое введение и руководство по использованию объектов 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"))

Геометрии являются питоническими

Объекты GEOSGeometry являются «Pythonic», другими словами, к компонентам можно обращаться, изменять и перебирать их, используя стандартные соглашения 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

Геометрические объекты

ГЕОСГеометрия

class GEOSGeometry(geo_input, srid=None)
Параметры:
  • geo_input – Входное значение геометрии (строка или memoryview)

  • srid (int) – идентификатор пространственной привязки

Это базовый класс для всех объектов геометрии GEOS. Он инициализируется с использованием данного аргумента geo_input, а затем предполагает правильный подкласс геометрии (например, GEOSGeometry('POINT(1 1)') создаст объект Point).

Параметр srid, если он задан, устанавливается как SRID созданной геометрии, если geo_input не имеет SRID. Если через параметры geo_input и srid указаны разные 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:

Формат

Тип входа

ВКТ / ЭВКТ

ул

HEX/HEXEWKB

ул

ВКБ / ЭВКБ

просмотр памяти

GeoJSON

ул

Для формата GeoJSON SRID устанавливается на основе члена crs. Если crs не указан, SRID по умолчанию равен 4326.

classmethod GEOSGeometry.from_gml(gml_string)

Создает GEOSGeometry из заданной строки GML.

Характеристики

GEOSGeometry.coords

Возвращает координаты геометрии в виде кортежа.

GEOSGeometry.dims

Возвращает размер геометрии:

GEOSGeometry.empty

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

GEOSGeometry.geom_type

Возвращает строку, соответствующую типу геометрии. Например:

>>> pnt = GEOSGeometry("POINT(5 23)")
>>> pnt.geom_type
'Point'
GEOSGeometry.geom_typeid

Возвращает идентификационный номер типа геометрии GEOS. В следующей таблице показаны значения для каждого типа геометрии:

Геометрия

ИДЕНТИФИКАТОР

Точка

0

LineString

1

ЛинейноеКольцо

2

Многоугольник

3

MultiPoint

4

MultiLineString

5

Мультиполигон

6

GeometryCollection

7

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

Возвращает «расширенный» общеизвестный текст геометрии. Это представление специфично для 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). Это следует использовать только для геометрий с 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

Возвращает общеизвестный текст геометрии (стандарт 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)
New in Django 5.0.

Возвращает True, если две геометрии поточечно эквивалентны, проверяя, что структура, порядок и значения всех вершин идентичны во всех измерениях. Значения NaN считаются равными другим значениям NaN. Требуется ГЕОС 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 для этой геометрии и другой соответствуют заданному шаблону — строке из девяти символов алфавита: {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, который представляет все точки, расстояние от которых до этой геометрии меньше или равно заданной ширине. Необязательное ключевое слово 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)

Учитывая расстояние (float), возвращает точку (или ближайшую точку) в геометрии (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

Возвращает границу как вновь выделенный объект Geometry.

GEOSGeometry.centroid

Возвращает объект Point, представляющий геометрический центр геометрии. Точка не обязательно находится внутри геометрии.

GEOSGeometry.convex_hull

Возвращает наименьший Polygon, содержащий все точки геометрии.

GEOSGeometry.envelope

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

GEOSGeometry.point_on_surface

Вычисляет и возвращает Point, который гарантированно находится внутри этой геометрии.

GEOSGeometry.unary_union

Вычисляет объединение всех элементов этой геометрии.

Результат подчиняется следующему контракту:

  • Объединение набора LineStrings приводит к полному узлу и растворению линий.

  • Объединение набора Polygons всегда будет возвращать геометрию 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 оптимизированы для операций содержания, пересечения, покрытия, пересечения, разделения, перекрытия, касания и внутри. Дополнительную информацию можно найти в документации prepared-geometry.

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. Требуется ГЕОС 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)

Объекты Point создаются с использованием аргументов, которые представляют координаты компонентов точки или координаты одной последовательности. Например, следующие эквивалентны:

>>> pnt = Point(5, 23)
>>> pnt = Point([5, 23])

Пустые объекты Point могут быть созданы без передачи аргументов или пустой последовательности. Следующие действия эквивалентны:

>>> pnt = Point()
>>> pnt = Point([])

ЛинейнаяСтрока

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.

ЛинейноеКольцо

class LinearRing(*args, **kwargs)

Объекты LinearRing создаются точно так же, как объекты LineString, однако координаты должны быть закрытыми, другими словами, первые координаты должны совпадать с последними координатами. Например:

>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))

Обратите внимание, что (0, 0) — это первая и последняя координаты. Если бы они не были равны, возникла бы ошибка.

is_counterclockwise

Возвращает, движется ли это LinearRing против часовой стрелки.

Многоугольник

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)

Возвращает многоугольный объект из заданной ограничивающей рамки, четырехкортеж, содержащий (xmin, ymin, xmax, ymax).

num_interior_rings

Возвращает количество внутренних колец в этой геометрии.

Сравнение полигонов

Обратите внимание, что можно сравнивать объекты Polygon напрямую с < или >, но поскольку сравнение выполняется через LineString Polygon, это не имеет большого значения (но является последовательным и быстрым). Вы всегда можете принудительно выполнить сравнение с помощью свойства area:

>>> if poly_1.area > poly_2.area:
...     pass
...

Коллекции геометрии

Мультиточка

class MultiPoint(*args, **kwargs)

Объекты MultiPoint могут быть созданы путем передачи объектов Point в качестве аргументов или одной последовательности объектов Point:

>>> mp = MultiPoint(Point(0, 0), Point(1, 1))
>>> mp = MultiPoint((Point(0, 0), Point(1, 1)))

Мультистрочная строка

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 тогда и только тогда, когда все элементы закрыты.

Мультиполигон

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. Операция с подготовленной геометрией может выполняться на порядки быстрее — чем сложнее подготовленная геометрия, тем больше ускорение операции. Для получения дополнительной информации посетите вики-страницу 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

Подготовленная геометрия

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 (a Python file object or a string path to the file) – входной файл, содержащий пространственные данные

Тип результата:

GEOSGeometry, соответствующий пространственным данным в файле

Например:

>>> from django.contrib.gis.geos import fromfile
>>> g = fromfile("/home/bob/geom.wkt")
fromstr(string, srid=None)
Параметры:
  • string (str) – строка, содержащая пространственные данные

  • srid (int) – идентификатор пространственной привязки

Тип результата:

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 обеспечивает максимальный контроль над выводом. По умолчанию он возвращает OGC-совместимый WKB при вызове метода write. Однако у него есть свойства, позволяющие создавать EWKB — расширенный набор стандарта WKB, включающий дополнительную информацию. Дополнительную информацию об аргументе dim смотрите в документации WKBWriter.outdim.

write(geom)

Возвращает WKB заданной геометрии в виде объекта ``буфера““ Python. Пример:

>>> 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.

Уменьшить значение

Описание

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

Это свойство управляет точностью округления координат; если установлено значение «Нет», округление отключено.

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

Сноски

Настройки

GEOS_LIBRARY_PATH

Строка, определяющая расположение библиотеки GEOS C. Обычно этот параметр используется только в том случае, если библиотека GEOS C находится в нестандартном расположении (например, /home/bob/lib/libgeos_c.so).

Примечание

Параметр должен представлять собой полный путь к общей библиотеке C; другими словами, вы хотите использовать libgeos_c.so, а не libgeos.so.

Исключения

exception GEOSException

Базовое исключение GEOS указывает на ошибку, связанную с GEOS.

Back to Top