GEOS API

Контекст

Что такое GEOS?

GEOS расшифровывается как Geometry Engine - Open Source . Это библиотека C ++, производная от Java Topology Suite . GEOS реализует предикаты и пространственные операторы спецификации OpenGIS Simple Features for SQL . GEOS, ныне проект OSGeo, первоначально был разработан и поддерживается компанией Refractions Research (Виктория, Канада).

Особенности

GeoDjango реализует адаптацию библиотеки GEOS для Python на высоком уровне. Его особенности включают:

  • Лицензированный 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\x00[email protected]'))
>>> 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)

При применении индекса к a 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))

Геометрические объекты поддерживают операторы множества ( set ):

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

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

classmethodGEOSGeometry.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. В следующей таблице показаны значения, соответствующие каждому типу геометрии:

Геометрический объект МНЕ БЫ
Point 0
LineString 1
LinearRing 2
Polygon 3
MultiPoint 4
MultiLineString 5
MultiPolygon 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

Возвращает расширенный формат хорошо известного текста (WKT) геометрического объекта. Это представление специфично для PostGIS и является надмножеством стандарта WKT OGC [1] . Короче говоря, к представлению WKT добавляется, например, префикс SRID .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

Возвращает представление этого геометрического объекта на языке разметки Keyhole ( KML ). Это следует использовать только для геометрических объектов с SRID 4326 (WGS84), но это ограничение не применяется.

GEOSGeometry.ogr

Возвращает объект, OGRGeometry эквивалентный геометрическому объекту GEOS.

GEOSGeometry.wkb

Возвращает WKB (известное двоичное) представление этого геометрического объекта в виде буфера Python. Значение SRID не включено. Если хотите, используйте вместо этого свойство GEOSGeometry.ewkb .

GEOSGeometry.ewkb

Возвращает EWKB-представление этого геометрического объекта в виде буфера Python. Это расширение спецификации WKB, которое включает любые значения SRID, являющиеся частью этого объекта.

GEOSGeometry.wkt

Возвращает WKT (общеизвестный текст) представление этого геометрического объекта (стандарт OGC).

Методы пространственных предикатов

Все перечисленные ниже методы пространственного предиката принимают другой instance GEOSGeometry ( other ) в качестве параметра и возвращают логическое значение.

GEOSGeometry.contains( другое )

Возвращает, True если other.within(this) возвращается True .

GEOSGeometry.covers( другое )

Возвращает True , покрывает ли этот геометрический объект данный геометрический объект.

Предикат covers имеет следующие эквивалентные определения:

  • Каждая точка другого геометрического объекта является точкой этого геометрического объекта.
  • Матрица пересечений DE-9IM из двух геометрических объектов T*****FF* , *T****FF* , ***T**FF* или ****T*FF* .

Если какой-либо из геометрических объектов пуст, возвращается False .

Этот предикат похож на GEOSGeometry.contains() , но является более всеобъемлющим (т.е. возвращается True в большем количестве случаев). В частности, в отличие от него contains() , он не различает точки на границе и точки внутри геометрического объекта. В большинстве ситуаций covers() следует предпочесть contains() . В качестве дополнительного преимущества covers() он более подвержен оптимизации и поэтому должен работать намного лучше, чем contains() .

GEOSGeometry.crosses( другое )

Возвращает True , является ли матрица пересечения двух геометрических объектов DE-9IM T*T****** (для точки и кривой, точки и площади или линии и площади) или 0******** (для двух кривых).

GEOSGeometry.disjoint( другое )

Возвращает, соответствует True ли матрица пересечения двух геометрических объектов DE-9IM FF*FF**** .

GEOSGeometry.equals( другое )

Возвращает, соответствует True ли матрица пересечения двух геометрических объектов DE-9IM T*F**FFF* .

GEOSGeometry.equals_exact( другое , толерантность = 0 )

Возвращает, True равны ли два геометрических объекта с точностью до определенного допуска. Значение tolerance должно быть числом с плавающей запятой, представляющим допуск ошибок при сравнении. Например, сравните равенство с одной тысячной единицы.poly1.equals_exact(poly2, 0.001)

GEOSGeometry.intersects( другое )

Возврат, True если GEOSGeometry.disjoint() есть False .

GEOSGeometry.overlaps( другое )

Возвращает True , является ли матрица пересечения двух геометрических объектов DE-9IM T*T***T** (для двух точек или двух поверхностей) или 1*T***T** (для двух кривых).

GEOSGeometry.relate_pattern( прочее , узор )

Возвращает , True если матрица пересечений DE-9IM двух геометрических объектов соответствует шаблону pattern заданного, строку из девяти символов в алфавите { T , F , * , 0 }.

GEOSGeometry.touches( другое )

Возвращает True , является ли матрица пересечения двух геометрических объектов DE-9IM FT******* , F**T***** или F***T**** .

GEOSGeometry.within( другое )

Возвращает, соответствует True ли матрица пересечения двух геометрических объектов DE-9IM T*F**F*** .

Топологические методы

GEOSGeometry.buffer( ширина , quadsegs = 8 )

Возвращает объект, GEOSGeometry представляющий все точки, расстояние до которых до этого геометрического объекта меньше или равно width заданной длине . Необязательный параметр quadsegs определяет количество сегментов, используемых для аппроксимации четверти круга (по умолчанию 8).

GEOSGeometry.buffer_with_style( ширина , quadsegs = 8 , end_cap_style = 1 , join_style = 1 , miter_limit = 5.0 )

То же, что buffer() , но позволяет настроить стиль штампа.

  • end_cap_style может быть круглым ( 1 ), плоским ( 2 ) или квадратным ( 3 ).
  • join_style может быть круглым ( 1 ), выступом ( 2 ) или скосом ( 3 ).
  • Ограничение количества вкладок ( mitre_limit ) влияет только на стиль соединения вкладок.
GEOSGeometry.difference( другое )

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

GEOSGeometry.interpolate( расстояние )
GEOSGeometry.interpolate_normalized( расстояние )

Учитывая расстояние (число с плавающей запятой), возвращает точку (или ближайшую точку) геометрического объекта ( LineString или MultiLineString ) на этом расстоянии. Стандартизированная версия принимает расстояние в виде числа с плавающей запятой между 0 (исходная точка) и 1 (конечная точка).

Инверсия GEOSGeometry.project() .

GEOSGeometry.intersection( другое )

Возвращает объект, GEOSGeometry представляющий точки, общие для этого геометрического объекта и объекта other .

GEOSGeometry.project( период )
GEOSGeometry.project_normalized( период )

Возвращает расстояние (число с плавающей запятой) от исходной точки геометрического объекта ( LineString или MultiLineString ) до точки, спроецированной на геометрию (то есть точки линии, ближайшей к данной точке). , Нормализованная версия возвращает расстояние в виде числа с плавающей запятой между 0 (исходная точка) и 1 (конечная точка).

Инверсия GEOSGeometry.interpolate() .

GEOSGeometry.relate( другое )

Возвращает матрицу пересечения DE-9IM (строку), представляющую топологическую связь между этим геометрическим объектом и объектом параметра.

GEOSGeometry.simplify( допуск = 0,0 , preserve_topology = False )

Возвращает новый объект GEOSGeometry , упрощенный до указанного допуска с использованием алгоритма Дугласа-Пекера. Более высокое значение допуска дает меньше очков в результате. Если допуск не указан, значение по умолчанию - 0.

По умолчанию эта функция не сохраняет топологию. Например, объекты Polygon можно разделить, объединить в линии или вовсе исчезнуть. Polygon Могут появляться или исчезать дыры, а линии могут пересекаться. После определения preserve_topology=True результат будет иметь те же размеры и такое же количество компонентов, что и исходный объект; однако эта функция работает намного медленнее.

GEOSGeometry.sym_difference( другое )

Возвращает объект, GEOSGeometry образованный точками этого геометрического объекта, которых нет в объекте в параметре, а также точками в объекте в параметре, которых нет в этом объекте.

GEOSGeometry.union( другое )

Возвращает объект, 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 геометрического объекта или.

GEOSGeometry.transform( ct , clone = False )

Преобразует геометрический объект в соответствии с заданным параметром преобразования координат ( ct ), который может быть номером SRID, строкой пространственной привязки WKT, строкой PROJ.4, объектом SpatialReference или объектом CoordTransform . По умолчанию геометрический объект трансформируется сам и ничего не возвращается. Однако, когда параметр clone установлен, геометрический объект не изменяется, а возвращается преобразованный клон геометрического объекта.

Заметка

Выдает исключение, GEOSException если GDAL недоступен или если значение SRID геометрического объекта равно None или меньше 0. На код SRID геометрического объекта не накладывается никаких ограничений, когда он вызывается с объектом CoordTransform .

GEOSGeometry.normalize()

Преобразует этот геометрический объект в его каноническую форму:

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

Point

classPoint ( x = None , y = None , z = None , srid = None )

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

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

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

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

LineString

классLineString ( * аргументы , ** 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

классLinearRing ( * аргументы , ** kwargs )

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

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

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

is_counterclockwise
Новое в Django 3.1.

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

Polygon

классPolygon ( * аргументы , ** 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))
classmethodfrom_bbox ( bbox )

Возвращает объект многоугольника из заданного ограничивающего прямоугольника, включая кортеж из 4 элементов .(xmin, ymin, xmax, ymax)

num_interior_rings

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

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

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

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

Геометрические коллекции

MultiPoint

классMultiPoint ( * аргументы , ** kwargs )

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

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

MultiLineString

классMultiLineString ( * аргументы , ** 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 представляющую слияние всех компонентов этого объекта

closed

Возвращает, True если и только если все элементы закрыты. Требуется GEOS 3.5.

MultiPolygon

классMultiPolygon ( * аргументы , ** 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

классGeometryCollection ( * аргументы , ** 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 Wiki, посвященную подготовленным геометрическим объектам .

Например :

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

класс PreparedGeometry

Все методы объекта PreparedGeometry принимают один other (другой) параметр, который должен представлять экземпляр GEOSGeometry .

contains( другое )
contains_properly( другое )
covers( другое )
crosses( другое )
disjoint( другое )
intersects( другое )
overlaps( другое )
touches( другое )
within( другое )

Создание геометрических объектов

fromfile( file_h )
Настройки:file_h ( file объект Python или строковый путь к файлу) - входной файл, содержащий пространственные данные
Возвращаемый тип:объект, GEOSGeometry соответствующий пространственным данным файла

Пример:

>>> from django.contrib.gis.geos import fromfile
>>> g = fromfile('/home/bob/geom.wkt')
fromstr( строка , srid = Нет )
Настройки:
  • 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) .

класс WKBReader

Пример:

>>> from django.contrib.gis.geos import WKBReader
>>> wkb_r = WKBReader()
>>> wkb_r.read('0101000000000000000000F03F000000000000F03F')
<Point object at 0x103a88910>
класс 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).

классWKBWriter ( dim = 2 )

WKBWriter предлагает максимальный контроль над производимым контентом. По умолчанию он возвращает OGC-совместимое содержимое WKB при вызове его метода write . Однако у него есть свойства, позволяющие создавать формат EWKB, надмножество стандарта WKB, которое включает дополнительную информацию. См. Документацию WKBWriter.outdim для получения более подробной информации о параметре dim .

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

Это свойство может быть установлено для изменения порядка байтов геометрического представления.

Стоимость 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'
classWKTWriter ( 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 и Canonical Forms , документацию PostGIS в гл. 4.1.2.

Настройки

GEOS_LIBRARY_PATH

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

Заметка

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

Исключения

исключение GEOSException

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

Copyright ©2021 All rights reserved