API GEOS

Фон

Что такое GEOS?

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

Особенности

GeoDjango реализует высокоуровневую оболочку Python для библиотеки GEOS, ее функции включают:

  • Лицензированный BSD интерфейс для геометрических процедур GEOS, реализованный исключительно на Python с использованием ctypes.
  • Слабо связано с GeoDjango. Например, GEOSGeometryобъекты могут использоваться вне проекта / приложения Django. Другими словами, не нужно иметьDJANGO_SETTINGS_MODULE установить или использовать базу данных и т. д.
  • Изменчивость: GEOSGeometryобъекты могут быть изменены.
  • Кроссплатформенность и тестирование; совместим с платформами Windows, Linux, Solaris и macOS.

Учебник

Этот раздел содержит краткое введение и руководство по использованию GEOSGeometryобъектов.

Создание геометрии

GEOSGeometryобъекты могут быть созданы несколькими способами. Первый - просто создать экземпляр объекта на некотором пространственном входе - ниже приведены примеры создания той же геометрии из WKT, HEX, WKB и GeoJSON:

>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry('POINT(5 23)') # WKT
>>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX
>>> pnt = GEOSGeometry(buffer('\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\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объекты являются «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. Однако то, что возвращается, зависит от типа геометрии объекта. Например, индексирование по a 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))

Геометрии поддерживают операторы, подобные множеству:

>>> 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(), not 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. Если с помощью параметров 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:

Формат Тип ввода
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

Возвращает логическое значение, указывающее, является ли геометрия a 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 (известное двоичное) представление этой геометрии в виде буфера Python. Значение SRID не включено, используйте GEOSGeometry.ewkbвместо него свойство.

GEOSGeometry.ewkb

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

GEOSGeometry.wkt

Возвращает общеизвестный текст геометрии (стандарт OGC).

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

Все следующие методы пространственного предиката принимают другой GEOSGeometryinstance ( 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 )

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

GEOSGeometry.intersects( другое )

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

GEOSGeometry.overlaps( другое )

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

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

Возвращает границу как недавно выделенный объект 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 для a Point, длину a LineStringили окружность a Polygon).

GEOSGeometry.prepared

Возвращает GEOS PreparedGeometryдля содержимого этой геометрии. PreparedGeometryобъекты оптимизированы для содержания, пересечений, покрытий, пересечений, непересекающихся, перекрытий, касаний и внутри операций. Обратитесь к документации 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.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объекты напрямую с помощью < или >, но поскольку сравнение выполняется с помощью 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представляя строковое слияние всех компонентов в этом MultiLineString.

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 о подготовленных геометриях .

Например:

>>> 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 или строковый путь к файлу) - входной файл, содержащий пространственные данные
Тип возврата:a, GEOSGeometryсоответствующий пространственным данным в файле

Пример:

>>> from django.contrib.gis.geos import fromfile
>>> g = fromfile('/home/bob/geom.wkt')
fromstr( строка , srid = Нет )
Параметры:
  • string ( str ) - строка, содержащая пространственные данные
  • srid ( int ) - идентификатор пространственной привязки
Тип возврата:

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

Объекты Writer

Все объекты записи имеют write(geom)метод, который возвращает либо WKB, либо WKT заданной геометрии. Кроме того, WKBWriterобъекты также имеют свойства, которые могут использоваться для изменения порядка байтов и / или включать значение SRID (другими словами, EWKB).

классWKBWriter ( dim = 2 )

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

write( geom )

Возвращает WKB заданной геометрии как bufferобъект 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

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

Значение 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 Value Описание
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