GEOS API
Обзор
Что такое GEOS?
GEOS расшифровывается как Geometry Engine - Open Source и представляет собой библиотеку на C++, адаптированную из Java Topology Suite. GEOS реализует пространственные предикаты и операторы OpenGIS Simple Features for SQL. GEOS, ныне проект OSGeo, был первоначально разработан и поддерживался компанией Refractions Research из Виктории, Канада.
Возможности
GeoDjango реализует высокоуровневый Python-обёртку для библиотеки GEOS, её возможности включают:
- Интерфейс с лицензией BSD к процедурам работы с геометрией GEOS, реализованный чисто на Python с использованием
ctypes. - Слабая зависимость от GeoDjango. Например, объекты
GEOSGeometryмогут использоваться вне проекта/приложения Django. Другими словами, нет необходимости устанавливатьDJANGO_SETTINGS_MODULEили использовать базу данных и т.д. - Изменяемость: объекты
GEOSGeometryмогут быть изменены. - Поддержка нескольких платформ и тестирование; совместимо с Windows, Linux, Solaris и Mac OS X.
Руководство
Этот раздел содержит краткое введение и руководство по использованию объектов 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(), т.е. требует, чтобы сравниваемые геометрии имели одинаковые координаты в одних и тех же позициях:
>>> from django.contrib.gis.geos import LineString >>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((1, 1), (0, 0)) >>> ls1.equals(ls2) True >>> ls1 == ls2 False
Объекты геометрии
GEOSGeometry
-
class GEOSGeometry(geo_input, srid=None)[source] -
Параметры: - geo_input – Значение входных данных геометрии (строка или буфер)
- srid (int) – идентификатор пространственной системы координат
Это базовый класс для всех объектов геометрии GEOS. Он инициализируется заданным аргументом geo_input, а затем предполагает соответствующий подкласс геометрии (например, GEOSGeometry('POINT(1 1)') создаст объект Point).
Принимаются следующие форматы ввода вместе с соответствующими типами Python:
| Формат | Тип ввода |
|---|---|
| WKT / EWKT |
str или unicode
|
| HEX / HEXEWKB |
str или unicode
|
| WKB / EWKB | buffer |
| GeoJSON (требуется GDAL) |
str или unicode
|
Свойства
-
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.Примечание
Требуется GDAL.
-
GEOSGeometry.wkb -
Возвращает представление WKB (Well-Known Binary) этой геометрии в виде Python-буфера. Значение SRID не включается, используйте свойство
GEOSGeometry.ewkbвместо него.
-
GEOSGeometry.ewkb -
Возвращает представление EWKB этой геометрии в виде Python-буфера. Это расширение спецификации WKB, которое включает любое значение SRID, являющееся частью этой геометрии.
-
GEOSGeometry.wkt -
Возвращает Well-Known Text (WKT) геометрии (стандарт OGC).
Изменено в Django 1.10:Незначительные нули удаляются из вывода.
Пространственные предикатны методы
Все следующие пространственные предикатны методы принимают другой экземпляр GEOSGeometry (other) в качестве параметра и возвращают булево значение.
-
GEOSGeometry.contains(other)[source] -
Возвращает
Trueеслиother.within(this)возвращаетTrue.
-
GEOSGeometry.covers(other)[source] -
Добавлена в Django 1.10.
Возвращает
Trueесли эта геометрия покрывает указанную геометрию.Предикат
coversимеет следующие эквивалентные определения:- Каждая точка другой геометрии является точкой этой геометрии.
- Матрица пересечения DE-9IM для двух геометрий равна
T*****FF*,*T****FF*,***T**FF*, или****T*FF*.
Если хотя бы одна из геометрий пуста, возвращает
False.Этот предикат похож на
GEOSGeometry.contains(), но более общий (т.е. возвращаетTrueв большем количестве случаев). В частности, в отличие отcontains(), он не различает точки на границе и внутри геометрий. В большинстве случаев,covers()следует предпочестьcontains(). Кроме того,covers()более пригоден для оптимизации и, следовательно, должен превосходитьcontains().
-
GEOSGeometry.crosses(other)[source] -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий равнаT*T******(для точки и кривой, точки и области или линии и области)0********(для двух кривых).
-
GEOSGeometry.disjoint(other)[source] -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий являетсяFF*FF****.
-
GEOSGeometry.equals(other)[source] -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий являетсяT*F**FFF*.
-
GEOSGeometry.equals_exact(other, tolerance=0)[source] -
Возвращает true, если две геометрии точно равны с заданной точностью. Значение
toleranceдолжно быть числом с плавающей точкой, представляющим толерантность ошибки в сравнении, например,poly1.equals_exact(poly2, 0.001)будет сравнивать равенство с точностью до одной тысячной единицы.
-
GEOSGeometry.intersects(other)[source] -
Возвращает
TrueеслиGEOSGeometry.disjoint()равноFalse.
-
GEOSGeometry.overlaps(other)[source] -
Возвращает true, если матрица пересечения DE-9IM для двух геометрий равна
T*T***T**(для двух точек или двух поверхностей)1*T***T**(для двух кривых).
-
GEOSGeometry.relate_pattern(other, pattern)[source] -
Возвращает
Trueесли элементы в матрице пересечения DE-9IM для этой геометрии и другой соответствуют заданному шаблону – строке из девяти символов алфавита: {T,F,*,0}.
-
GEOSGeometry.touches(other)[source] -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий равнаFT*******,F**T*****илиF***T****.
-
GEOSGeometry.within(other)[source] -
Возвращает
Trueесли матрица пересечения DE-9IM для двух геометрий равнаT*F**F***.
Топологические методы
-
GEOSGeometry.buffer(width, quadsegs=8)[source] -
Возвращает
GEOSGeometry, представляющую все точки, расстояние от которых до этой геометрии меньше или равно заданномуwidth. Опциональный параметрquadsegsустанавливает количество сегментов, используемых для аппроксимации четверти окружности (по умолчанию 8).
-
GEOSGeometry.difference(other)[source] -
Возвращает
GEOSGeometry, представляющую точки, составляющие эту геометрию, но не составляющие другую.
-
GEOSGeometry.interpolate(distance)
-
GEOSGeometry.interpolate_normalized(distance) -
При заданном расстоянии (число с плавающей точкой) возвращает точку (или ближайшую точку) внутри геометрии (
LineStringилиMultiLineString) на этом расстоянии. Нормализованная версия принимает расстояние как число с плавающей точкой между 0 (началом) и 1 (концом).Обратная функция
GEOSGeometry.project().
-
GEOSGeometry.intersection(other)[source] -
Возвращает
GEOSGeometry, представляющую точки, общие для этой геометрии и другой.
-
GEOSGeometry.project(point)
-
GEOSGeometry.project_normalized(point) -
Возвращает расстояние (число с плавающей точкой) от начала геометрии (
LineStringилиMultiLineString) до точки, спроектированной на геометрию (т. е. до точки на линии, ближайшей к заданной точке). Нормализованная версия возвращает расстояние как число с плавающей точкой между 0 (началом) и 1 (концом).Обратная функция
GEOSGeometry.interpolate().
-
GEOSGeometry.relate(other)[source] -
Возвращает матрицу пересечения DE-9IM (строку), представляющую топологические отношения между этой геометрией и другой.
-
GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False)[source] -
Возвращает новую
GEOSGeometry, упрощенную до заданной толерантности с использованием алгоритма Даугаса-Пеккера. Более высокое значение толерантности подразумевает меньше точек в выводе. Если толерантность не указана, по умолчанию используется 0.По умолчанию эта функция не сохраняет топологию. Например, объекты
Polygonмогут быть разделены, сжаты в линии или исчезнуть. Внутренние области объектовPolygonмогут быть созданы или исчезнуть, а линии могут пересекаться. Указавpreserve_topology=True, результат будет иметь ту же размерность и количество компонентов, что и входной; однако это значительно медленнее.
-
GEOSGeometry.sym_difference(other)[source] -
Возвращает
GEOSGeometry, объединяющую точки этой геометрии, не входящие в другую, и точки другой, не входящие в эту геометрию.
-
GEOSGeometry.union(other)[source] -
Возвращает
GEOSGeometry, представляющую все точки в этой геометрии и другой.
Топологические свойства
-
GEOSGeometry.boundary -
Возвращает границу как новый объект геометрии.
-
GEOSGeometry.centroid -
Возвращает объект
Point, представляющий геометрический центр геометрии. Точка не гарантированно находится внутри геометрии.
-
GEOSGeometry.convex_hull -
Возвращает наименьший
Polygon, содержащий все точки в геометрии.
-
GEOSGeometry.envelope -
Возвращает
Polygon, представляющий ограничивающую оболочку этой геометрии. Обратите внимание, что он также может вернутьPoint, если входная геометрия является точкой.
-
GEOSGeometry.point_on_surface -
Вычисляет и возвращает
Point, гарантированно находящуюся внутри этой геометрии.
-
GEOSGeometry.unary_union -
Новое в Django 1.10.
Вычисляет объединение всех элементов этой геометрии.
Результат подчиняется следующему соглашению:
- Объединение набора
LineStringприводит к полному узловому соединению и растворению линий. - Объединение набора
Polygonвсегда вернётPolygonилиMultiPolygonгеометрию (в отличие отGEOSGeometry.union(), которое может вернуть геометрию меньшей размерности, если произошёл топологический обрыв).
- Объединение набора
Другие свойства и методы
-
GEOSGeometry.area -
Это свойство возвращает площадь геометрии.
-
GEOSGeometry.extent -
Это свойство возвращает область этой геометрии в виде 4-кортежа, состоящего из
(xmin, ymin, xmax, ymax).
-
GEOSGeometry.clone()[source] -
Этот метод возвращает
GEOSGeometry, являющийся клоном оригинала.
-
GEOSGeometry.distance(geom)[source] -
Возвращает расстояние между ближайшими точками этой геометрии и заданной
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.Примечание
Требуется GDAL.
-
GEOSGeometry.transform(ct, clone=False)[source] -
Преобразует геометрию в соответствии с заданным параметром преобразования координат (
ct), который может быть целочисленным SRID, строкой WKT пространственной ссылки, строкой PROJ.4, объектомSpatialReferenceили объектомCoordTransform. По умолчанию геометрия преобразуется на месте, и ничего не возвращается. Однако, если установлен ключевой параметрclone, то геометрия не изменяется, и вместо этого возвращается преобразованный клон геометрии.Примечание
Требуется GDAL. Вызывает
GEOSException, если GDAL недоступен или SRID геометрииNoneили меньше 0. Не накладывает никаких ограничений на SRID геометрии, если вызывается с объектомCoordTransform.Изменено в Django 1.10:В предыдущих версиях требовалось, чтобы SRID геометрии был положительным целым числом, даже если вызывался с объектом
CoordTransform.
Точка
-
class Point(x=None, y=None, z=None, srid=None)[source] -
Объекты
Pointсоздаются с помощью аргументов, представляющих координаты компонентов точки или с единственной последовательностью координат. Например, следующие эквивалентны:>>> pnt = Point(5, 23) >>> pnt = Point([5, 23])
Пустые объекты
Pointможно создать, не передавая аргументы или передав пустую последовательность. Следующие эквивалентны:>>> pnt = Point() >>> pnt = Point([])
Изменено в Django 1.10:В предыдущих версиях пустой объект
Pointнельзя было создать.
Линия
-
class LineString(*args, **kwargs)[source] -
Объекты
LineStringсоздаются с использованием аргументов, которые являются либо последовательностью координат, либо объектамиPoint. Например, следующие эквивалентны:>>> ls = LineString((0, 0), (1, 1)) >>> ls = LineString(Point(0, 0), Point(1, 1))
Кроме того, объекты
LineStringтакже можно создать, передав одну последовательность координат или объектыPoint:>>> ls = LineString( ((0, 0), (1, 1)) ) >>> ls = LineString( [Point(0, 0), Point(1, 1)] )
Пустые объекты
LineStringможно создать, не передавая аргументы или передав пустую последовательность. Следующие эквивалентны:>>> ls = LineString() >>> ls = LineString([])
Изменено в Django 1.10:В предыдущих версиях пустой объект
LineStringнельзя было создать.-
closed -
Новое в Django 1.10.
Возвращает, замкнута ли эта линия.
-
Линейный полигон
-
class LinearRing(*args, **kwargs)[source] -
Объекты
LinearRingсоздаются точно так же, как объектыLineString, однако координаты должны быть замкнутыми, то есть первая координата должна быть такой же, как последняя. Например:>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
Обратите внимание, что
(0, 0)является первой и последней координатой – если они не были равны, было бы выведено сообщение об ошибке.
Полигон
-
class Polygon(*args, **kwargs)[source] -
Polygonобъекты могут быть созданы путём передачи параметров, представляющих кольца полигона. Параметры должны быть экземплярамиLinearRingили последовательностью, которая может быть использована для построенияLinearRing:>>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0)) >>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4)) >>> poly = Polygon(ext_coords, int_coords) >>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))
Изменено в Django 1.10:В предыдущих версиях пустой
Polygonне мог быть создан.-
classmethod from_bbox(bbox)[source] -
Возвращает объект полигона из заданной прямоугольной области, 4-кортеж, содержащий
(xmin, ymin, xmax, ymax).
-
num_interior_rings -
Возвращает количество внутренних колец в данной геометрии.
-
Сравнение полигонов
Обратите внимание, что можно сравнивать Polygon объекты напрямую с < или >, но так как сравнение выполняется через LineString полигона, это не имеет большого смысла (но согласованно и быстро). Вы всегда можете принудительно выполнить сравнение с помощью свойства area:
>>> if poly_1.area > poly_2.area: >>> pass
Наборы геометрий
MultiPoint
-
class MultiPoint(*args, **kwargs)[source] -
MultiPointобъекты могут быть созданы путём передачи в качестве аргументов объектовPoint, или одной последовательностью объектовPoint:>>> mp = MultiPoint(Point(0, 0), Point(1, 1)) >>> mp = MultiPoint( (Point(0, 0), Point(1, 1)) )
Изменено в Django 1.10:В предыдущих версиях пустой
MultiPointне мог быть создан.
MultiLineString
-
class MultiLineString(*args, **kwargs)[source] -
MultiLineStringобъекты могут быть созданы путём передачи в качестве аргументов объектовLineString, или одной последовательностью объектовLineString:>>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((2, 2), (3, 3)) >>> mls = MultiLineString(ls1, ls2) >>> mls = MultiLineString([ls1, ls2])
Изменено в Django 1.10:В предыдущих версиях пустой
MultiLineStringне мог быть создан.-
merged -
Возвращает
LineString, представляющий объединённую линию всех компонентов в этомMultiLineString.
-
closed -
Добавлено в Django 1.10.
Возвращает
Trueтогда и только тогда, когда все элементы закрыты. Требуется GEOS 3.5.
-
MultiPolygon
-
class MultiPolygon(*args, **kwargs)[source] -
MultiPolygonобъекты могут быть созданы путём передачи объектовPolygonв качестве аргументов, или одной последовательностью объектовPolygon:>>> p1 = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) ) >>> p2 = Polygon( ((1, 1), (1, 2), (2, 2), (1, 1)) ) >>> mp = MultiPolygon(p1, p2) >>> mp = MultiPolygon([p1, p2])
Изменено в Django 1.10:В предыдущих версиях пустой
MultiPolygonне мог быть создан.-
cascaded_union -
Устарело начиная с версии 1.10: Используйте свойство
GEOSGeometry.unary_unionвместо этого.Возвращает
Polygon, который является объединением всех полигонов-компонентов в этом наборе. Используемый алгоритм значительно эффективнее (быстрее), чем объединение геометрий по отдельности. [2]
-
GeometryCollection
-
class GeometryCollection(*args, **kwargs)[source] -
GeometryCollectionобъекты могут быть созданы путём передачи других объектовGEOSGeometryв качестве аргументов, или одной последовательностью объектовGEOSGeometry:>>> poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) ) >>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly) >>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))
Изменено в Django 1.10:В предыдущих версиях пустой
GeometryCollectionне мог быть создан.
Подготовленные геометрии
Для получения подготовленной геометрии просто обратитесь к свойству GEOSGeometry.prepared. После получения экземпляра PreparedGeometry его пространственные предикатные методы, перечисленные ниже, могут быть использованы с другими GEOSGeometry объектами. Операция с подготовленной геометрией может быть на порядки быстрее — чем сложнее подготовленная геометрия, тем больше ускорение при выполнении операции. Для получения дополнительной информации, пожалуйста, обратитесь к странице wiki GEOS о подготовленных геометриях.
Например:
>>> from django.contrib.gis.geos import Point, Polygon >>> poly = Polygon.from_bbox((0, 0, 5, 5)) >>> prep_poly = poly.prepared >>> prep_poly.contains(Point(2.5, 2.5)) True
PreparedGeometry
-
class PreparedGeometry -
Все методы
PreparedGeometryпринимают аргументother, который должен быть экземпляромGEOSGeometry.-
contains(other)
-
contains_properly(other)
-
covers(other)
-
crosses(other)
-
disjoint(other)
-
intersects(other)
-
overlaps(other)
-
touches(other)
-
within(other)
-
Геометрические фабрики
-
fromfile(file_h)[source] -
Параметры: file_h (объект Python fileили строковый путь к файлу) – входной файл, содержащий пространственные данныеТип возвращаемого значения: a GEOSGeometryсоответствующий пространственным данным в файлеПример:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile('/home/bob/geom.wkt')
-
fromstr(string, srid=None)[source] -
Параметры: Тип возвращаемого значения: объект
GEOSGeometry, соответствующий пространственным данным в строкеЭто эквивалентно
GEOSGeometry(string, srid).Пример:
>>> from django.contrib.gis.geos import fromstr >>> pnt = fromstr('POINT(-90.5 29.5)', srid=4326)
Объекты ввода/вывода
Объекты-ридеры
Классы ввода/вывода ридера просто возвращают экземпляр GEOSGeometry из входных данных WKB и/или WKT, переданных в их метод read(geom).
-
class WKBReader[source] -
Пример:
>>> from django.contrib.gis.geos import WKBReader >>> wkb_r = WKBReader() >>> wkb_r.read('0101000000000000000000F03F000000000000F03F') <Point object at 0x103a88910>
-
class WKTReader[source] -
Пример:
>>> from django.contrib.gis.geos import WKTReader >>> wkt_r = WKTReader() >>> wkt_r.read('POINT(1 1)') <Point object at 0x103a88b50>
Объекты-райтеры
Все объекты-райтеры имеют метод write(geom) , который возвращает WKB или WKT заданной геометрии. Кроме того, объекты WKBWriter также имеют свойства, которые можно использовать для изменения порядка байтов и/или включения значения SRID (иными словами, EWKB).
-
class WKBWriter(dim=2)[source] -
WKBWriterпредоставляет наибольший контроль над выводом. По умолчанию он возвращает совместимый с OGC WKB, когда вызывается его методwrite. Однако он имеет свойства, которые позволяют создавать EWKB — расширение стандарта WKB, которое включает дополнительную информацию. См. документацию поWKBWriter.outdimдля получения более подробной информации об аргументеdim.Изменено в Django 1.10:Добавлена возможность передать аргумент
dimв конструктор.-
write(geom)[source]
Возвращает WKB заданной геометрии в виде объекта Python
buffer. Пример:>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write(pnt) <read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
-
write_hex(geom)[source]
Возвращает WKB геометрии в шестнадцатеричном формате. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F'
-
byteorder
Это свойство можно установить, чтобы изменить порядок байтов представления геометрии.
Значение порядка байтов Описание 0 Большой порядок байтов (например, совместимо с RISC-системами) 1 Малый порядок байтов (например, совместимо с x86-системами) Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1) >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F' >>> wkb_w.byteorder = 0 '00000000013FF00000000000003FF0000000000000'
-
outdim
Это свойство можно установить, чтобы изменить размерность вывода представления геометрии. Другими словами, если у вас есть 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)[source] -
Этот класс позволяет выводить представление WKT геометрии. См. атрибуты
WKBWriter.outdim,trimиprecisionдля получения подробностей об аргументах конструктора.Изменено в Django 1.10:Добавлена возможность передать аргументы
dim,trim, иprecisionв конструктор.-
write(geom)[source]
Возвращает WKT заданной геометрии. Пример:
>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1, 1) >>> wkt_w = WKTWriter() >>> wkt_w.write(pnt) 'POINT (1.0000000000000000 1.0000000000000000)'
-
outdim -
См.
WKBWriter.outdim.
-
trim
Добавлен в Django 1.10.Это свойство используется для включения или выключения обрезки ненужных десятичных знаков.
>>> 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
Добавлен в Django 1.10.Это свойство управляет точностью округления координат; если установлено в
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. |
| [2] | Для получения дополнительной информации прочитайте статью в блоге Пола Рэмси о (Значительно) более быстрых объединениях в PostGIS 1.4 и статью в блоге Мартина Дэвиса о Быстром объединении полигонов в JTS с использованием каскадного объединения. |
Настройки
GEOS_LIBRARY_PATH
Строка, определяющая расположение библиотеки GEOS C. Как правило, эта настройка используется только в том случае, если библиотека GEOS C находится в нестандартном расположении (например, /home/bob/lib/libgeos_c.so).
Примечание
Настройка должна быть полным путем к библиотеке общего использования C; другими словами, вы хотите использовать libgeos_c.so, а не libgeos.so.
Исключения
-
exception GEOSException[source] -
Базовое исключение GEOS, указывает на ошибку, связанную с GEOS.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.10/ref/contrib/gis/geos/