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