API GEOS
Обзор
Что такое 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могут быть изменены. - Проверено на кросс-платформенной совместимости.
Руководство
Этот раздел содержит краткое введение и руководство по использованию объектов GEOSGeometry.
Создание геометрии
Объекты GEOSGeometry могут быть созданы несколькими способами. Первый — простое создание объекта на основе пространственного ввода. Ниже приведены примеры создания одной и той же геометрии из WKT, HEX, WKB и GeoJSON:
>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry("POINT(5 23)") # WKT
>>> pnt = GEOSGeometry("010100000000000000000014400000000000003740") # HEX
>>> pnt = GEOSGeometry(
... memoryview(
... b"\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@"
... )
... ) # WKB
>>> pnt = GEOSGeometry(
... '{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }'
... ) # GeoJSON
Другой вариант — использование конструктора для конкретного типа геометрии, который вы хотите создать. Например, объект Point может быть создан путём передачи координат X и Y в его конструктор:
>>> from django.contrib.gis.geos import Point >>> pnt = Point(5, 23)
Все эти конструкторы принимают ключевое слово srid. Например:
>>> from django.contrib.gis.geos import GEOSGeometry, LineString, Point
>>> print(GEOSGeometry("POINT (0 0)", srid=4326))
SRID=4326;POINT (0 0)
>>> print(LineString((0, 0), (1, 1), srid=4326))
SRID=4326;LINESTRING (0 0, 1 1)
>>> print(Point(0, 0, srid=32140))
SRID=32140;POINT (0 0)
Наконец, существует фабричный метод fromfile(), который возвращает объект GEOSGeometry из файла:
>>> from django.contrib.gis.geos import fromfile
>>> pnt = fromfile("/path/to/pnt.wkt")
>>> pnt = fromfile(open("/path/to/pnt.wkt"))
Геометрии — это Pythonic-объекты
Объекты GEOSGeometry — это ‘Pythonic-объекты’, другими словами, к их компонентам можно обращаться, их можно изменять и по ним можно итерироваться, используя стандартные Python-конвенции. Например, можно перебрать координаты в объекте Point:
>>> pnt = Point(5, 23) >>> [coord for coord in pnt] [5.0, 23.0]
Для любого геометрического объекта свойство GEOSGeometry.coords может использоваться для получения координат геометрии в виде кортежа Python:
>>> pnt.coords (5.0, 23.0)
Вы можете получить/установить компоненты геометрии, используя стандартные Python-методы индексирования. Однако, то, что возвращается, зависит от типа геометрии объекта. Например, индексирование объекта LineString возвращает кортеж координат:
>>> from django.contrib.gis.geos import LineString >>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0)) >>> line[0] (0.0, 0.0) >>> line[-2] (50.0, 0.0)
А индексирование объекта Polygon вернёт кольцо (объект LinearRing), соответствующее индексу:
>>> from django.contrib.gis.geos import Polygon >>> poly = Polygon(((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0))) >>> poly[0] <LinearRing object at 0x1044395b0> >>> poly[0][-2] # second-to-last coordinate of external ring (50.0, 0.0)
Кроме того, к координатам/компонентам геометрии можно добавлять или изменять их, как и в Python-списках:
>>> line[0] = (1.0, 1.0) >>> line.pop() (0.0, 0.0) >>> line.append((1.0, 1.0)) >>> line.coords ((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))
Геометрии поддерживают операторы множества:
>>> from django.contrib.gis.geos import LineString >>> ls1 = LineString((0, 0), (2, 2)) >>> ls2 = LineString((1, 1), (3, 3)) >>> print(ls1 | ls2) # equivalent to `ls1.union(ls2)` MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3)) >>> print(ls1 & ls2) # equivalent to `ls1.intersection(ls2)` LINESTRING (1 1, 2 2) >>> print(ls1 - ls2) # equivalent to `ls1.difference(ls2)` LINESTRING(0 0, 1 1) >>> print(ls1 ^ ls2) # equivalent to `ls1.sym_difference(ls2)` MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))
Оператор равенства не проверяет пространственное равенство
Оператор равенства GEOSGeometry использует equals_exact(), а не equals(), то есть он требует, чтобы сравниваемые геометрии имели одинаковые координаты в одинаковых позициях с одинаковыми SRID:
>>> from django.contrib.gis.geos import LineString >>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((1, 1), (0, 0)) >>> ls3 = LineString((1, 1), (0, 0), srid=4326) >>> ls1.equals(ls2) True >>> ls1 == ls2 False >>> ls3 == ls2 # different SRIDs False
Объекты геометрии
GEOSGeometry
-
class GEOSGeometry(geo_input, srid=None)[source] -
- Параметры:
-
-
geo_input – Значение входных данных геометрии (строка или
memoryview) - srid (int) – идентификатор пространственной системы координат
-
geo_input – Значение входных данных геометрии (строка или
Это базовый класс для всех объектов геометрии 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 |
|
HEX / HEXEWKB |
|
WKB / EWKB |
|
|
Для формата GeoJSON SRID устанавливается на основе члена crs. Если crs не указан, SRID по умолчанию равен 4326.
-
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 -
Возвращает значение True, если набор точек в геометрии пуст.
-
GEOSGeometry.geom_type -
Возвращает строку, соответствующую типу геометрии. Например:
>>> pnt = GEOSGeometry("POINT(5 23)") >>> pnt.geom_type 'Point'
-
GEOSGeometry.geom_typeid -
Возвращает идентификационный номер типа геометрии GEOS. В следующей таблице показано значение для каждого типа геометрии:
Геометрия
ID
0
1
2
3
4
5
6
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 -
Возвращает «расширенный» текст 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.equals_identical(other) -
Возвращает
True, если две геометрии точечно эквивалентны, проверяя, что структура, порядок и значения всех вершин идентичны во всех измерениях.NaNзначения считаются равными другимNaNзначениям. Требуется GEOS 3.12.
-
GEOSGeometry.intersects(other) -
Возвращает
True, еслиGEOSGeometry.disjoint()равноFalse.
-
GEOSGeometry.overlaps(other) -
Возвращает true, если матрица пересечения DE-9IM для двух геометрий равна
T*T***T**(для двух точек или двух поверхностей)1*T***T**(для двух кривых).
-
GEOSGeometry.relate_pattern(other, pattern) -
Возвращает
True, если элементы в матрице пересечения DE-9IM для этой геометрии и другой соответствуют заданному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) -
Аналогично
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) -
Принимая расстояние (вещественное число), возвращает точку (или ближайшую точку) внутри геометрии (
LineStringилиMultiLineString) на этом расстоянии. Нормализованная версия принимает расстояние как вещественное число от 0 (начало) до 1 (конец).Обратная функция
GEOSGeometry.project().
-
GEOSGeometry.intersection(other) -
Возвращает
GEOSGeometry, представляющий точки, общие для данной геометрии и другой.
-
GEOSGeometry.project(point)
-
GEOSGeometry.project_normalized(point) -
Возвращает расстояние (вещественное число) от начала геометрии (
LineStringилиMultiLineString) до точки, спроецированной на геометрию (т.е. до точки линии, ближайшей к заданной точке). Нормализованная версия возвращает расстояние как вещественное число от 0 (начало) до 1 (конец).Обратная функция
GEOSGeometry.interpolate().
-
GEOSGeometry.relate(other) -
Возвращает матрицу пересечения DE-9IM (строку), представляющую топологические отношения между этой геометрией и другой.
-
GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False) -
Возвращает новую
GEOSGeometry, упрощённую до заданной точности с помощью алгоритма Дагласа-Пекера. Более высокое значение точности подразумевает меньшее количество точек на выходе. Если точность не задана, по умолчанию она равна 0.По умолчанию эта функция не сохраняет топологию. Например, объекты
Polygonмогут быть разделены, сведены к линиям или исчезнуть. Дыры в объектахPolygonмогут быть созданы или исчезнуть, а линии могут пересекаться. Указавpreserve_topology=True, результат будет иметь ту же размерность и количество компонентов, что и входные данные; однако это значительно медленнее.
-
GEOSGeometry.sym_difference(other) -
Возвращает
GEOSGeometry, объединяющий точки в этой геометрии, отсутствующие в другой, и точки в другой, отсутствующие в этой геометрии.
-
GEOSGeometry.union(other) -
Возвращает
GEOSGeometry, представляющий все точки в этой геометрии и другой.
Топологические свойства
-
GEOSGeometry.boundary -
Возвращает границу как новый объект геометрии.
-
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, объектомSpatialReferenceили объектомCoordTransform. По умолчанию геометрия преобразуется на месте, и ничего не возвращается. Однако, если установлено ключевое словоclone, то геометрия не изменяется, а возвращается преобразованный клон геометрии.Примечание
Вызывает
GEOSException, если GDAL недоступен или SRID геометрииNoneили меньше 0. Не накладывает никаких ограничений на SRID геометрии, если вызывается с объектомCoordTransform.
-
GEOSGeometry.make_valid() -
Возвращает эквивалентную валидную
GEOSGeometry, пытаясь не потерять ни одного входного вертекса. Если геометрия уже валидна, она возвращается без изменений. Аналогично функции базы данныхMakeValid. Требуется GEOS 3.8.
-
GEOSGeometry.normalize(clone=False) -
Преобразует эту геометрию в каноническую форму. Если ключевое слово
cloneустановлено, то геометрия не изменяется, а возвращается нормализованный клон геометрии:>>> g = MultiPoint(Point(0, 0), Point(2, 2), Point(1, 1)) >>> print(g) MULTIPOINT (0 0, 2 2, 1 1) >>> g.normalize() >>> print(g) MULTIPOINT (2 2, 1 1, 0 0)
Point
-
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([])
LineString
-
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([])
-
closed -
Возвращает, является ли эта линия замкнутой.
-
LinearRing
-
class LinearRing(*args, **kwargs)[source] -
Объекты
LinearRingсоздаются точно так же, как объектыLineString, но координаты должны быть замкнутыми, то есть первые координаты должны быть такими же, как и последние. Например:>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
Обратите внимание, что
(0, 0)– это первая и последняя координата. Если они не совпадают, произойдет ошибка.-
is_counterclockwise[source] -
Возвращает, является ли этот
LinearRingпротив часовой стрелки.
-
Polygon
-
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))
-
classmethod from_bbox(bbox)[source] -
Возвращает объект многоугольника из заданной рамки, 4-кортеж, состоящий из
(xmin, ymin, xmax, ymax).
-
num_interior_rings[source] -
Возвращает количество внутренних колец в этой геометрии.
-
Сравнение многоугольников
Обратите внимание, что возможно сравнить Polygon объекты напрямую с < или >, но так как сравнение выполняется через LineString объекта многоугольника, это не имеет большого смысла (но оно согласованно и быстро). Вы всегда можете принудительно выполнить сравнение с помощью свойства area:
>>> if poly_1.area > poly_2.area: ... pass ...
Геометрические коллекции
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])
-
merged -
Возвращает
LineString, представляющий слияние линий всех компонентов в этойMultiLineString.
-
closed -
Возвращает
Trueтолько тогда, когда все элементы замкнуты.
-
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])
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))
Предварительно обработанные геометрии
Для получения предварительно обработанной геометрии обратитесь к свойству 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или путь к файлу) – входной файл, содержащий пространственные данные - Тип возвращаемого значения:
-
объект
GEOSGeometry, соответствующий пространственным данным в файле
Пример:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile("/home/bob/geom.wkt")
-
fromstr(string, srid=None)[source] -
- Параметры:
- Тип возвращаемого значения:
-
объект
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[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, которая включает дополнительную информацию. Подробнее о параметреdimсм. документациюWKBWriter.outdim.-
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
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[source]
Это свойство можно установить для изменения размерности выходных данных геометрии. Другими словами, если у вас есть 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[source]
Установите это свойство со значением булевого типа, чтобы указать, следует ли включать 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.-
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[source] -
См.
WKBWriter.outdim.
-
trim[source]
Это свойство используется для включения или отключения обрезки ненужных десятичных знаков.
>>> 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[source]
Это свойство управляет точностью округления координат; если установлено в
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)'
-
Примечания
Настройки
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/5.2/ref/contrib/gis/geos/