API GEOS ¶
Фон ¶
Что такое GEOS? ¶
GEOS расшифровывается как Geometry Engine - Open Source и представляет собой библиотеку C ++, перенесенную из Java Topology Suite . GEOS реализует простые функции OpenGIS для функций пространственных предикатов SQL и пространственных операторов. GEOS, ныне проект OSGeo, изначально был разработан и поддерживается компанией Refractions Research из Виктории, Канада.
Особенности ¶
GeoDjango реализует высокоуровневую оболочку Python для библиотеки GEOS, ее функции включают:
- Лицензированный BSD интерфейс для геометрических процедур GEOS, реализованный исключительно на Python с использованием
ctypes
. - Слабо связано с GeoDjango. Например,
GEOSGeometry
объекты могут использоваться вне проекта / приложения Django. Другими словами, не нужно иметьDJANGO_SETTINGS_MODULE
установить или использовать базу данных и т. д. - Изменчивость:
GEOSGeometry
объекты могут быть изменены. - Кроссплатформенность и тестирование; совместим с платформами Windows, Linux, Solaris и macOS.
Учебник ¶
Этот раздел содержит краткое введение и руководство по использованию
GEOSGeometry
объектов.
Создание геометрии ¶
GEOSGeometry
объекты могут быть созданы несколькими способами. Первый - просто создать экземпляр объекта на некотором пространственном входе - ниже приведены примеры создания той же геометрии из WKT, HEX, WKB и GeoJSON:
>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry('POINT(5 23)') # WKT
>>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX
>>> pnt = GEOSGeometry(buffer('\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x00[email protected]'))
>>> pnt = GEOSGeometry('{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }') # GeoJSON
Другой вариант - использовать конструктор для конкретного типа геометрии, который вы хотите создать. Например, Point
объект может быть создан путем передачи координат X и Y в его конструктор:
>>> from django.contrib.gis.geos import Point
>>> pnt = Point(5, 23)
Все эти конструкторы принимают аргумент ключевого слова srid
. Например:
>>> from django.contrib.gis.geos import GEOSGeometry, LineString, Point
>>> print(GEOSGeometry('POINT (0 0)', srid=4326))
SRID=4326;POINT (0 0)
>>> print(LineString((0, 0), (1, 1), srid=4326))
SRID=4326;LINESTRING (0 0, 1 1)
>>> print(Point(0, 0, srid=32140))
SRID=32140;POINT (0 0)
Наконец, есть fromfile()
фабричный метод, который возвращает
GEOSGeometry
объект из файла:
>>> from django.contrib.gis.geos import fromfile
>>> pnt = fromfile('/path/to/pnt.wkt')
>>> pnt = fromfile(open('/path/to/pnt.wkt'))
Геометрии питонические ¶
GEOSGeometry
объекты являются «Pythonic», другими словами, к компонентам можно обращаться, изменять и выполнять итерацию с использованием стандартных соглашений Python. Например, вы можете перебирать координаты в Point
:
>>> pnt = Point(5, 23)
>>> [coord for coord in pnt]
[5.0, 23.0]
С любым геометрическим объектом это GEOSGeometry.coords
свойство может использоваться для получения геометрических координат в виде кортежа Python:
>>> pnt.coords
(5.0, 23.0)
Вы можете получить / установить геометрические компоненты, используя стандартные методы индексирования Python. Однако то, что возвращается, зависит от типа геометрии объекта. Например, индексирование по a LineString
возвращает кортеж координат:
>>> from django.contrib.gis.geos import LineString
>>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0))
>>> line[0]
(0.0, 0.0)
>>> line[-2]
(50.0, 0.0)
В то время как индексирование по a Polygon
вернет кольцо ( LinearRing
объект), соответствующее индексу:
>>> from django.contrib.gis.geos import Polygon
>>> poly = Polygon( ((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0)) )
>>> poly[0]
<LinearRing object at 0x1044395b0>
>>> poly[0][-2] # second-to-last coordinate of external ring
(50.0, 0.0)
Кроме того, координаты / компоненты геометрии могут быть добавлены или изменены, как и список Python:
>>> line[0] = (1.0, 1.0)
>>> line.pop()
(0.0, 0.0)
>>> line.append((1.0, 1.0))
>>> line.coords
((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))
Геометрии поддерживают операторы, подобные множеству:
>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (2, 2))
>>> ls2 = LineString((1, 1), (3, 3))
>>> print(ls1 | ls2) # equivalent to `ls1.union(ls2)`
MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3))
>>> print(ls1 & ls2) # equivalent to `ls1.intersection(ls2)`
LINESTRING (1 1, 2 2)
>>> print(ls1 - ls2) # equivalent to `ls1.difference(ls2)`
LINESTRING(0 0, 1 1)
>>> print(ls1 ^ ls2) # equivalent to `ls1.sym_difference(ls2)`
MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))
Оператор равенства не проверяет пространственное равенство
Оператор GEOSGeometry
равенства использует
equals_exact()
, not equals()
, т. Е. Требует, чтобы сравниваемые геометрии имели одинаковые координаты в одинаковых позициях с одинаковыми SRID:
>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((1, 1), (0, 0))
>>> ls3 = LineString((1, 1), (0, 0), srid=4326)
>>> ls1.equals(ls2)
True
>>> ls1 == ls2
False
>>> ls3 == ls2 # different SRIDs
False
Объекты геометрии ¶
GEOSGeometry
¶
-
class
GEOSGeometry
( geo_input , srid = None ) ¶ Параметры: - geo_input - входное значение геометрии (строка или буфер)
- srid ( int ) - идентификатор пространственной привязки
Это базовый класс для всех геометрических объектов GEOS. Он инициализируется с заданным geo_input
аргументом, а затем принимает соответствующий подкласс геометрии (например, создает объект).GEOSGeometry('POINT(1 1)')
Point
srid
Параметра, если задано, устанавливается в качестве SRID созданной геометрии , если
geo_input
не имеет SRID. Если с помощью параметров geo_input
и предоставляются разные SRID
srid
, ValueError
возникает:
>>> from django.contrib.gis.geos import GEOSGeometry
>>> GEOSGeometry('POINT EMPTY', srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry('SRID=4326;POINT EMPTY', srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry('SRID=1;POINT EMPTY', srid=4326)
Traceback (most recent call last):
...
ValueError: Input geometry already has SRID: 1.
Принимаются следующие форматы ввода вместе с соответствующими им типами Python:
Формат | Тип ввода |
---|---|
WKT / EWKT | str |
HEX / HEXEWKB | str |
WKB / EWKB | buffer |
GeoJSON | str |
Для формата GeoJSON SRID устанавливается на основе crs
члена. Если crs
не указан, по умолчанию используется SRID 4326.
-
classmethod
GEOSGeometry.
from_gml
( gml_string ) ¶ Создает
GEOSGeometry
из заданной строки GML.
Свойства ¶
-
GEOSGeometry.
coords
¶ Возвращает координаты геометрии в виде кортежа.
-
GEOSGeometry.
dims
¶ Возвращает размер геометрии:
0
дляPoint
s иMultiPoint
s1
дляLineString
s иMultiLineString
s2
дляPolygon
s иMultiPolygon
s-1
для пустыхGeometryCollection
s- максимальная размерность его элементов для непустых
GeometryCollection
s
-
GEOSGeometry.
empty
¶ Возвращает, является ли набор точек в геометрии пустым.
-
GEOSGeometry.
geom_type
¶ Возвращает строку, соответствующую типу геометрии. Например:
>>> pnt = GEOSGeometry('POINT(5 23)') >>> pnt.geom_type 'Point'
-
GEOSGeometry.
geom_typeid
¶ Возвращает идентификационный номер типа геометрии GEOS. В следующей таблице показаны значения для каждого типа геометрии:
Геометрия Я БЫ Point
0 LineString
1 LinearRing
2 Polygon
3 MultiPoint
4 MultiLineString
5 MultiPolygon
6 GeometryCollection
7
-
GEOSGeometry.
num_coords
¶ Возвращает количество координат в геометрии.
-
GEOSGeometry.
num_geom
¶ Возвращает количество геометрий в этой геометрии. Другими словами, вернет 1 для чего угодно, кроме коллекций геометрии.
-
GEOSGeometry.
hasz
¶ Возвращает логическое значение, указывающее, является ли геометрия трехмерной.
-
GEOSGeometry.
ring
¶ Возвращает логическое значение, указывающее, является ли геометрия a
LinearRing
.
-
GEOSGeometry.
simple
¶ Возвращает логическое значение, указывающее, является ли геометрия «простой». Геометрия проста тогда и только тогда, когда она не пересекает себя (кроме граничных точек). Например,
LineString
объект не простой, если он сам себя пересекает. Таким образом,LinearRing
иPolygon
объекты всегда просты, потому что они не могут пересекаться по определению.
-
GEOSGeometry.
valid
¶ Возвращает логическое значение, указывающее, действительна ли геометрия.
-
GEOSGeometry.
valid_reason
¶ Возвращает строку, описывающую причину, по которой геометрия недействительна.
-
GEOSGeometry.
srid
¶ Свойство, которое может использоваться для получения или установки SRID, связанного с геометрией. Например:
>>> pnt = Point(5, 23) >>> print(pnt.srid) None >>> pnt.srid = 4326 >>> pnt.srid 4326
Свойства вывода ¶
Свойства в этом разделе экспортируют GEOSGeometry
объект в другой. Этот вывод может быть в форме строки, буфера или даже другого объекта.
-
GEOSGeometry.
ewkt
¶ Возвращает «расширенный» общеизвестный текст геометрии. Это представление специфично для PostGIS и является надмножеством стандарта OGC WKT. [1] По сути, SRID добавляется, например, к представлению WKT .
SRID=4326;POINT(5 23)
Примечание
Выходные данные этого свойства не включают информацию 3dm, 3dz и 4d, которую PostGIS поддерживает в своих представлениях EWKT.
-
GEOSGeometry.
hex
¶ Возвращает WKB этой геометрии в шестнадцатеричной форме. Обратите внимание, что значение SRID не включено в это представление, потому что оно не является частью спецификации OGC (используйте
GEOSGeometry.hexewkb
вместо этого свойство).
-
GEOSGeometry.
hexewkb
¶ Возвращает EWKB этой геометрии в шестнадцатеричной форме. Это расширение спецификации WKB, которое включает значение SRID, являющееся частью этой геометрии.
-
GEOSGeometry.
json
¶ Возвращает представление геометрии в формате GeoJSON. Обратите внимание, что результатом является не полная структура GeoJSON, а только
geometry
ключевое содержание структуры GeoJSON. См. Также Сериализатор GeoJSON .
-
GEOSGeometry.
geojson
¶ Псевдоним для
GEOSGeometry.json
.
-
GEOSGeometry.
kml
¶ Возвращает представление геометрии в формате KML (язык разметки Keyhole). Это следует использовать только для геометрий с SRID 4326 (WGS84), но это ограничение не применяется.
-
GEOSGeometry.
ogr
¶ Возвращает
OGRGeometry
объект, соответствующий геометрии GEOS.
-
GEOSGeometry.
wkb
¶ Возвращает WKB (известное двоичное) представление этой геометрии в виде буфера Python. Значение SRID не включено, используйте
GEOSGeometry.ewkb
вместо него свойство.
-
GEOSGeometry.
ewkb
¶ Верните EWKB-представление этой геометрии в виде буфера Python. Это расширение спецификации WKB, которое включает любое значение SRID, являющееся частью этой геометрии.
-
GEOSGeometry.
wkt
¶ Возвращает общеизвестный текст геометрии (стандарт OGC).
Методы пространственных предикатов ¶
Все следующие методы пространственного предиката принимают другой
GEOSGeometry
instance ( other
) в качестве параметра и возвращают логическое значение.
-
GEOSGeometry.
contains
( другое ) ¶ Возвращает,
True
еслиother.within(this)
возвращаетсяTrue
.
-
GEOSGeometry.
covers
( другое ) ¶ Возвращает,
True
если эта геометрия покрывает указанную геометрию.covers
Предикат имеет следующие эквивалентные определения:- Каждая точка другой геометрии является точкой этой геометрии.
- DE-9IM Пересечение Матрица для двух геометрий
T*****FF*
,*T****FF*
,***T**FF*
или****T*FF*
.
Если любая геометрия пуста, возвращается
False
.Этот предикат похож на
GEOSGeometry.contains()
, но является более всеобъемлющим (т. Е. ВозвращаетсяTrue
для большего количества наблюдений). В частности, в отличие отcontains()
него не различает точки на границе и внутри геометрии. В большинстве случаевcovers()
следует предпочестьcontains()
. В качестве дополнительного преимуществаcovers()
он более поддается оптимизации и, следовательно, должен превосходить по производительностиcontains()
.
-
GEOSGeometry.
crosses
( другое ) ¶ Возвращает,
True
если матрица пересечения DE-9IM для двух геометрий равнаT*T******
(для точки и кривой, точки и площади или линии и площади)0********
(для двух кривых).
-
GEOSGeometry.
disjoint
( другое ) ¶ Возвращает,
True
если матрица пересечения DE-9IM для двух геометрий равнаFF*FF****
.
-
GEOSGeometry.
equals
( другое ) ¶ Возвращает,
True
если матрица пересечения DE-9IM для двух геометрий равнаT*F**FFF*
.
-
GEOSGeometry.
equals_exact
( другое , толерантность = 0 ) ¶ Возвращает истину, если две геометрии в точности равны с точностью до указанного допуска.
tolerance
Значение должно быть числом с плавающей точкой , представляющее допуск ошибки в сравнении, например, будет сравнивать равенство с точностью до одной тысячной единицы.poly1.equals_exact(poly2, 0.001)
-
GEOSGeometry.
intersects
( другое ) ¶ Возврат,
True
еслиGEOSGeometry.disjoint()
естьFalse
.
-
GEOSGeometry.
overlaps
( другое ) ¶ Возвращает истину, если матрица пересечения DE-9IM для двух геометрий равна
T*T***T**
(для двух точек или двух поверхностей)1*T***T**
(для двух кривых).
-
GEOSGeometry.
relate_pattern
( прочее , узор ) ¶ Возвращаю ,
True
если элементы в матрице пересечений DE-9IM для этой геометрии и другие матчи данныхpattern
- строка из девяти символов из алфавита: {T
,F
,*
,0
}.
-
GEOSGeometry.
touches
( другое ) ¶ Возвращает,
True
если матрица пересечения DE-9IM для двух геометрий равнаFT*******
,F**T*****
илиF***T****
.
-
GEOSGeometry.
within
( другое ) ¶ Возвращает,
True
если матрица пересечения DE-9IM для двух геометрий равнаT*F**F***
.
Топологические методы ¶
-
GEOSGeometry.
buffer
( ширина , quadsegs = 8 ) ¶ Возвращает,
GEOSGeometry
который представляет все точки, расстояние от которых до этой геометрии меньше или равно заданномуwidth
. Необязательноеquadsegs
ключевое слово устанавливает количество сегментов, используемых для аппроксимации четверти круга (по умолчанию 8).
-
GEOSGeometry.
buffer_with_style
( ширина , quadsegs = 8 , end_cap_style = 1 , join_style = 1 , mitre_limit = 5.0 ) ¶ То же, что и
buffer()
, но позволяет настроить стиль буфера.end_cap_style
может быть круглым (1
), плоским (2
) или квадратным (3
).join_style
может быть круглым (1
), угловым (2
) или скошенным (3
).- Предел отношения под
mitre_limit
углом ( ) влияет только на стиль соединения со скосом.
-
GEOSGeometry.
difference
( другое ) ¶ Возвращает,
GEOSGeometry
представляя точки, составляющие эту геометрию, но не составляющие другую.
-
GEOSGeometry.
interpolate
( расстояние ) ¶
-
GEOSGeometry.
interpolate_normalized
( расстояние ) ¶ При заданном расстоянии (с плавающей точкой) возвращает точку (или ближайшую точку) в геометрии (
LineString
илиMultiLineString
) на этом расстоянии. Нормализованная версия принимает расстояние как плавающее между 0 (исходная точка) и 1 (конечная точка).Реверс
GEOSGeometry.project()
.
-
GEOSGeometry.
intersection
( другое ) ¶ Возвращает,
GEOSGeometry
представляющий точки, общие для этой и другой геометрии.
-
GEOSGeometry.
project
( точка ) ¶
-
GEOSGeometry.
project_normalized
( точка ) ¶ Возвращает расстояние (с плавающей запятой) от исходной точки геометрии (
LineString
илиMultiLineString
) до точки, спроецированной на геометрию (то есть до точки линии, ближайшей к данной точке). Нормализованная версия возвращает расстояние в виде числа с плавающей запятой между 0 (исходная точка) и 1 (конечная точка).Реверс
GEOSGeometry.interpolate()
.
-
GEOSGeometry.
relate
( другое ) ¶ Возвращает матрицу пересечения DE-9IM (строку), представляющую топологическую связь между этой геометрией и другой.
-
GEOSGeometry.
simplify
( допуск = 0,0 , preserve_topology = False ) ¶ Возвращает новый
GEOSGeometry
, упрощенный до указанного допуска с использованием алгоритма Дугласа-Пекера. Более высокое значение допуска подразумевает меньшее количество точек на выходе. Если допуск не указан, по умолчанию он равен 0.По умолчанию эта функция не сохраняет топологию. Например,
Polygon
объекты можно разделить, свернуть на линии или исчезнуть.Polygon
дыры могут образовываться или исчезать, а линии могут пересекаться. Если указатьpreserve_topology=True
, результат будет иметь тот же размер и количество компонентов, что и вход; однако это значительно медленнее.
-
GEOSGeometry.
sym_difference
( другое ) ¶ Возвращает
GEOSGeometry
объединение точек в этой геометрии не в другой, а точки в другой не в этой геометрии.
-
GEOSGeometry.
union
( другое ) ¶ Возвращает,
GEOSGeometry
представляющий все точки в этой и другой геометрии.
Топологические свойства ¶
-
GEOSGeometry.
boundary
¶ Возвращает границу как недавно выделенный объект Geometry.
-
GEOSGeometry.
centroid
¶ Возвращает
Point
объект, представляющий геометрический центр геометрии. Не гарантируется, что точка находится внутри геометрии.
-
GEOSGeometry.
envelope
¶ Возвращает,
Polygon
который представляет ограничивающую оболочку этой геометрии. Обратите внимание, что он также может возвращать,Point
если входная геометрия является точкой.
-
GEOSGeometry.
point_on_surface
¶ Вычисляет и возвращает значение, которое
Point
гарантированно находится внутри этой геометрии.
-
GEOSGeometry.
unary_union
¶ Вычисляет объединение всех элементов этой геометрии.
Результат подчиняется следующему контракту:
- Объединение набора
LineString
s приводит к полному кодированию и растворению линий. - Объединение набора
Polygon
s всегда будет возвращать геометриюPolygon
илиMultiPolygon
(в отличие от нееGEOSGeometry.union()
, которая может возвращать геометрию более низкой размерности, если происходит коллапс топологии).
- Объединение набора
Другие свойства и методы ¶
-
GEOSGeometry.
area
¶ Это свойство возвращает площадь геометрии.
-
GEOSGeometry.
extent
¶ Это свойство возвращает экстент этой геометрии в виде 4-кортежа, состоящего из .
(xmin, ymin, xmax, ymax)
-
GEOSGeometry.
clone
() ¶ Этот метод возвращает
GEOSGeometry
клон оригинала.
-
GEOSGeometry.
distance
( geom ) ¶ Возвращает расстояние между ближайшими точками этой геометрии и заданным
geom
(другимGEOSGeometry
объектом).Примечание
Расчеты расстояния GEOS являются линейными - другими словами, GEOS не выполняет сферических расчетов, даже если SRID указывает географическую систему координат.
-
GEOSGeometry.
length
¶ Возвращает длину этой геометрии (например, 0 для a
Point
, длину aLineString
или окружность aPolygon
).
-
GEOSGeometry.
prepared
¶ Возвращает GEOS
PreparedGeometry
для содержимого этой геометрии.PreparedGeometry
объекты оптимизированы для содержания, пересечений, покрытий, пересечений, непересекающихся, перекрытий, касаний и внутри операций. Обратитесь к документации Prepared Geometries для получения дополнительной информации.
-
GEOSGeometry.
srs
¶ Возвращает
SpatialReference
объект, соответствующий SRID геометрии илиNone
.
-
GEOSGeometry.
transform
( ct , clone = False ) ¶ Преобразует геометрию в соответствии с заданным параметром преобразования координат (
ct
), который может быть целым числом SRID, строкой WKT пространственной привязки, строкой PROJ,SpatialReference
объектом илиCoordTransform
объектом. По умолчанию геометрия преобразуется на месте и ничего не возвращается. Однако, еслиclone
задано ключевое слово, геометрия не изменяется, а вместо нее возвращается преобразованный клон геометрии.Примечание
Возникает,
GEOSException
если GDAL недоступен или если SRID геометрии равенNone
или меньше 0. Он не накладывает никаких ограничений на SRID геометрии, если вызывается сCoordTransform
объектом.
-
GEOSGeometry.
normalize
() ¶ Преобразует эту геометрию в каноническую форму:
>>> g = MultiPoint(Point(0, 0), Point(2, 2), Point(1, 1)) >>> print(g) MULTIPOINT (0 0, 2 2, 1 1) >>> g.normalize() >>> print(g) MULTIPOINT (2 2, 1 1, 0 0)
Point
¶
-
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
¶
-
класс
LineString
( * аргументы , ** kwargs ) ¶ LineString
объекты создаются с использованием аргументов, которые являются либо последовательностью координат, либоPoint
объектами. Например, следующие эквиваленты:>>> ls = LineString((0, 0), (1, 1)) >>> ls = LineString(Point(0, 0), Point(1, 1))
Кроме того,
LineString
объекты также могут быть созданы путем передачи одной последовательности координат илиPoint
объектов:>>> ls = LineString( ((0, 0), (1, 1)) ) >>> ls = LineString( [Point(0, 0), Point(1, 1)] )
Пустые
LineString
объекты могут быть созданы без передачи аргументов или пустой последовательности. Следующие варианты эквивалентны:>>> ls = LineString() >>> ls = LineString([])
-
closed
¶ Возвращает,
LineString
закрыто ли это .
-
LinearRing
¶
-
класс
LinearRing
( * аргументы , ** kwargs ) ¶ LinearRing
объекты конструируются точно так же, какLineString
объекты, однако координаты должны быть замкнутыми , другими словами, первые координаты должны совпадать с последними координатами. Например:>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
Обратите внимание, что это первая и последняя координаты - если бы они не были равны, возникла бы ошибка.
(0, 0)
-
is_counterclockwise
¶ - Новое в Django 3.1.
Возвращает значение,
LinearRing
вращающееся против часовой стрелки.
-
Polygon
¶
-
класс
Polygon
( * аргументы , ** kwargs ) ¶ Polygon
объекты могут быть созданы путем передачи параметров, которые представляют кольца многоугольника. Параметры должны бытьLinearRing
экземплярами или последовательностью, которая может использоваться для созданияLinearRing
:>>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0)) >>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4)) >>> poly = Polygon(ext_coords, int_coords) >>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))
-
classmethod
from_bbox
( bbox ) ¶ Возвращает полигональный объект из заданного ограничивающего прямоугольника, состоящий из 4 кортежей .
(xmin, ymin, xmax, ymax)
-
num_interior_rings
¶ Возвращает количество внутренних колец в этой геометрии.
-
classmethod
Сравнение полигонов
Обратите внимание, что можно сравнивать Polygon
объекты напрямую с помощью <
или >
, но поскольку сравнение выполняется с помощью Polygon
LineString
, это не имеет большого значения (но является последовательным и быстрым). Вы всегда можете принудительно выполнить сравнение со area
свойством:
>>> if poly_1.area > poly_2.area:
>>> pass
Коллекции геометрии ¶
MultiPoint
¶
MultiLineString
¶
-
класс
MultiLineString
( * аргументы , ** kwargs ) ¶ MultiLineString
объекты могут быть созданы путем передачиLineString
объектов в качестве аргументов или отдельной последовательностиLineString
объектов:>>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((2, 2), (3, 3)) >>> mls = MultiLineString(ls1, ls2) >>> mls = MultiLineString([ls1, ls2])
-
merged
¶ Возвращает,
LineString
представляя строковое слияние всех компонентов в этомMultiLineString
.
-
closed
¶ Возвращает,
True
если и только если все элементы закрыты. Требуется GEOS 3.5.
-
MultiPolygon
¶
-
класс
MultiPolygon
( * аргументы , ** kwargs ) ¶ MultiPolygon
объекты могут быть созданы путем передачиPolygon
объектов в качестве аргументов или отдельной последовательностиPolygon
объектов:>>> p1 = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) ) >>> p2 = Polygon( ((1, 1), (1, 2), (2, 2), (1, 1)) ) >>> mp = MultiPolygon(p1, p2) >>> mp = MultiPolygon([p1, p2])
GeometryCollection
¶
-
класс
GeometryCollection
( * аргументы , ** kwargs ) ¶ GeometryCollection
объекты могут быть созданы путем передачи других вGEOSGeometry
качестве аргументов или отдельной последовательностиGEOSGeometry
объектов:>>> poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) ) >>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly) >>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))
Подготовленные геометрии ¶
Чтобы получить подготовленную геометрию, откройте
GEOSGeometry.prepared
свойство. Если у вас есть
PreparedGeometry
экземпляр, его методы пространственного предиката, перечисленные ниже, можно использовать с другими GEOSGeometry
объектами. Операция с подготовленной геометрией может быть на несколько порядков быстрее - чем сложнее подготовленная геометрия, тем больше ускорение операции. Для получения дополнительной информации, пожалуйста, обратитесь к вики-странице GEOS о подготовленных геометриях .
Например:
>>> from django.contrib.gis.geos import Point, Polygon
>>> poly = Polygon.from_bbox((0, 0, 5, 5))
>>> prep_poly = poly.prepared
>>> prep_poly.contains(Point(2.5, 2.5))
True
PreparedGeometry
¶
-
класс
PreparedGeometry
¶ Все методы
PreparedGeometry
принимаютother
аргумент, который должен бытьGEOSGeometry
экземпляром.-
contains
( другое ) ¶
-
contains_properly
( другое ) ¶
-
covers
( другое ) ¶
-
crosses
( другое ) ¶
-
disjoint
( другое ) ¶
-
intersects
( другое ) ¶
-
overlaps
( другое ) ¶
-
touches
( другое ) ¶
-
within
( другое ) ¶
-
Фабрики геометрии ¶
-
fromfile
( file_h ) ¶ Параметры: file_h ( file
объект Python или строковый путь к файлу) - входной файл, содержащий пространственные данныеТип возврата: a, GEOSGeometry
соответствующий пространственным данным в файлеПример:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile('/home/bob/geom.wkt')
-
fromstr
( строка , srid = Нет ) ¶ Параметры: Тип возврата: a,
GEOSGeometry
соответствующий пространственным данным в строкеfromstr(string, srid)
эквивалентно .GEOSGeometry(string, srid)
Пример:
>>> from django.contrib.gis.geos import fromstr >>> pnt = fromstr('POINT(-90.5 29.5)', srid=4326)
Объекты ввода-вывода ¶
Объекты чтения ¶
Классы ввода-вывода считывателя возвращают GEOSGeometry
экземпляр из ввода WKB и / или WKT, переданного их read(geom)
методу.
-
класс
WKBReader
¶ Пример:
>>> from django.contrib.gis.geos import WKBReader >>> wkb_r = WKBReader() >>> wkb_r.read('0101000000000000000000F03F000000000000F03F') <Point object at 0x103a88910>
-
класс
WKTReader
¶ Пример:
>>> from django.contrib.gis.geos import WKTReader >>> wkt_r = WKTReader() >>> wkt_r.read('POINT(1 1)') <Point object at 0x103a88b50>
Объекты Writer ¶
Все объекты записи имеют write(geom)
метод, который возвращает либо WKB, либо WKT заданной геометрии. Кроме того, WKBWriter
объекты также имеют свойства, которые могут использоваться для изменения порядка байтов и / или включать значение SRID (другими словами, EWKB).
-
класс
WKBWriter
( dim = 2 ) ¶ WKBWriter
обеспечивает максимальный контроль над своим выходом. По умолчанию он возвращает OGC-совместимый WKB приwrite
вызове его метода. Однако у него есть свойства, которые позволяют создавать EWKB, надмножество стандарта WKB, которое включает дополнительную информацию. См.WKBWriter.outdim
Документацию для получения более подробной информации обdim
аргументе.-
write
( geom ) ¶
Возвращает WKB заданной геометрии как
buffer
объект Python . Пример:>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write(pnt) <read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
-
write_hex
( geom ) ¶
Возвращает WKB геометрии в шестнадцатеричном формате. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F'
-
byteorder
¶
Это свойство может быть установлено для изменения порядка байтов геометрического представления.
Значение Byteorder Описание 0 Big Endian (например, совместим с системами RISC) 1 Little Endian (например, совместим с системами x86) Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1) >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F' >>> wkb_w.byteorder = 0 '00000000013FF00000000000003FF0000000000000'
-
outdim
¶
Это свойство может быть установлено для изменения выходного размера геометрического представления. Другими словами, если у вас есть 3D-геометрия, установите значение 3, чтобы значение Z было включено в WKB.
Outdim Value Описание 2 По умолчанию выводится 2D WKB. 3 Вывод 3D WKB. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> wkb_w.outdim 2 >>> pnt = Point(1, 1, 1) >>> wkb_w.write_hex(pnt) # By default, no Z value included: '0101000000000000000000F03F000000000000F03F' >>> wkb_w.outdim = 3 # Tell writer to include Z values >>> wkb_w.write_hex(pnt) '0101000080000000000000F03F000000000000F03F000000000000F03F'
-
srid
¶
Задайте для этого свойства логическое значение, чтобы указать, следует ли включать SRID геометрии в представление WKB. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1, srid=4326) >>> wkb_w.write_hex(pnt) # By default, no SRID included: '0101000000000000000000F03F000000000000F03F' >>> wkb_w.srid = True # Tell writer to include SRID >>> wkb_w.write_hex(pnt) '0101000020E6100000000000000000F03F000000000000F03F'
-
-
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 и Canonical Forms , документацию PostGIS в гл. 4.1.2. |
Настройки ¶
GEOS_LIBRARY_PATH
¶
Строка, определяющая расположение библиотеки GEOS C. Обычно этот параметр используется только в том случае, если библиотека GEOS C находится в нестандартном месте (например, /home/bob/lib/libgeos_c.so
).
Примечание
Параметр должен быть полным путем к разделяемой библиотеке C ; другими словами, вы хотите использовать libgeos_c.so
, а не libgeos.so
.