GEOS API ¶
Контекст ¶
Что такое GEOS? ¶
GEOS расшифровывается как Geometry Engine - Open Source . Это библиотека C ++, производная от Java Topology Suite . GEOS реализует предикаты и пространственные операторы спецификации OpenGIS Simple Features for SQL . GEOS, ныне проект OSGeo, первоначально был разработан и поддерживается компанией Refractions Research (Виктория, Канада).
Особенности ¶
GeoDjango реализует адаптацию библиотеки GEOS для Python на высоком уровне. Его особенности включают:
- Лицензированный 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
являются «питоническими», что означает, что можно получить доступ, изменить или зациклить их компоненты, используя стандартные соглашения 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)
При применении индекса к 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))
Геометрические объекты поддерживают операторы множества ( set
):
>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (2, 2))
>>> ls2 = LineString((1, 1), (3, 3))
>>> print(ls1 | ls2) # equivalent to `ls1.union(ls2)`
MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3))
>>> print(ls1 & ls2) # equivalent to `ls1.intersection(ls2)`
LINESTRING (1 1, 2 2)
>>> print(ls1 - ls2) # equivalent to `ls1.difference(ls2)`
LINESTRING(0 0, 1 1)
>>> print(ls1 ^ ls2) # equivalent to `ls1.sym_difference(ls2)`
MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))
Оператор равенства не проверяет пространственное равенство
Оператор равенства GEOSGeometry
использует equals_exact()
, а не использует equals()
, то есть равенство зависит от идентичных координат, в одной позиции и с одинаковыми SRID:
>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((1, 1), (0, 0))
>>> ls3 = LineString((1, 1), (0, 0), srid=4326)
>>> ls1.equals(ls2)
True
>>> ls1 == ls2
False
>>> ls3 == ls2 # different SRIDs
False
Геометрические объекты ¶
GEOSGeometry
¶
-
class
GEOSGeometry
( geo_input , srid = None ) ¶ Настройки: - geo_input - геометрическое входное значение (строка или буфер)
- srid ( int ) - идентификатор пространственной привязки
Это базовый класс для всех геометрических объектов GEOS. Он инициализируется в соответствии с geo_input
заданным параметром , а затем создает соответствующий геометрический подкласс (например, создает объект ).GEOSGeometry('POINT(1 1)')
Point
Параметр srid
, если он присутствует, определяется как SRID созданного геометрического объекта, если он geo_input
не имеет SRID. Если SRID значения между параметрами geo_input
и srid
различаются, ошибка ValueError
производится
>>> 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
¶ Возвращает логическое значение, указывающее, является ли геометрический объект объектом
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
¶ Возвращает расширенный формат хорошо известного текста (WKT) геометрического объекта. Это представление специфично для PostGIS и является надмножеством стандарта WKT OGC [1] . Короче говоря, к представлению WKT добавляется, например, префикс SRID .
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
¶ Возвращает представление этого геометрического объекта на языке разметки Keyhole ( KML ). Это следует использовать только для геометрических объектов с SRID 4326 (WGS84), но это ограничение не применяется.
-
GEOSGeometry.
ogr
¶ Возвращает объект,
OGRGeometry
эквивалентный геометрическому объекту GEOS.
-
GEOSGeometry.
wkb
¶ Возвращает WKB (известное двоичное) представление этого геометрического объекта в виде буфера Python. Значение SRID не включено. Если хотите, используйте вместо этого свойство
GEOSGeometry.ewkb
.
-
GEOSGeometry.
ewkb
¶ Возвращает EWKB-представление этого геометрического объекта в виде буфера Python. Это расширение спецификации WKB, которое включает любые значения SRID, являющиеся частью этого объекта.
-
GEOSGeometry.
wkt
¶ Возвращает WKT (общеизвестный текст) представление этого геометрического объекта (стандарт OGC).
Методы пространственных предикатов ¶
Все перечисленные ниже методы пространственного предиката принимают другой instance GEOSGeometry
( 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-9IMT*T******
(для точки и кривой, точки и площади или линии и площади) или0********
(для двух кривых).
-
GEOSGeometry.
disjoint
( другое ) ¶ Возвращает, соответствует
True
ли матрица пересечения двух геометрических объектов DE-9IMFF*FF****
.
-
GEOSGeometry.
equals
( другое ) ¶ Возвращает, соответствует
True
ли матрица пересечения двух геометрических объектов DE-9IMT*F**FFF*
.
-
GEOSGeometry.
equals_exact
( другое , толерантность = 0 ) ¶ Возвращает,
True
равны ли два геометрических объекта с точностью до определенного допуска. Значениеtolerance
должно быть числом с плавающей запятой, представляющим допуск ошибок при сравнении. Например, сравните равенство с одной тысячной единицы.poly1.equals_exact(poly2, 0.001)
-
GEOSGeometry.
intersects
( другое ) ¶ Возврат,
True
еслиGEOSGeometry.disjoint()
естьFalse
.
-
GEOSGeometry.
overlaps
( другое ) ¶ Возвращает
True
, является ли матрица пересечения двух геометрических объектов DE-9IMT*T***T**
(для двух точек или двух поверхностей) или1*T***T**
(для двух кривых).
-
GEOSGeometry.
relate_pattern
( прочее , узор ) ¶ Возвращает ,
True
если матрица пересечений DE-9IM двух геометрических объектов соответствует шаблонуpattern
заданного, строку из девяти символов в алфавите {T
,F
,*
,0
}.
-
GEOSGeometry.
touches
( другое ) ¶ Возвращает
True
, является ли матрица пересечения двух геометрических объектов DE-9IMFT*******
,F**T*****
илиF***T****
.
-
GEOSGeometry.
within
( другое ) ¶ Возвращает, соответствует
True
ли матрица пересечения двух геометрических объектов DE-9IMT*F**F***
.
Топологические методы ¶
-
GEOSGeometry.
buffer
( ширина , quadsegs = 8 ) ¶ Возвращает объект,
GEOSGeometry
представляющий все точки, расстояние до которых до этого геометрического объекта меньше или равноwidth
заданной длине . Необязательный параметрquadsegs
определяет количество сегментов, используемых для аппроксимации четверти круга (по умолчанию 8).
-
GEOSGeometry.
buffer_with_style
( ширина , quadsegs = 8 , end_cap_style = 1 , join_style = 1 , miter_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
представляющий точки, общие для этого геометрического объекта и объектаother
.
-
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
¶ Возвращает границы как новый экземпляр геометрического объекта.
-
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
оптимизированы для содержания, пересечения, перекрытия, пересечения, непересечения, перекрытий, ключей и внутри операций. Дополнительную информацию см. В документации по подготовленным геометрическим объектам .
-
GEOSGeometry.
srs
¶ Возвращает объект,
SpatialReference
соответствующий SRID геометрического объекта или.
-
GEOSGeometry.
transform
( ct , clone = False ) ¶ Преобразует геометрический объект в соответствии с заданным параметром преобразования координат (
ct
), который может быть номером SRID, строкой пространственной привязки WKT, строкой PROJ.4, объектомSpatialReference
или объектомCoordTransform
. По умолчанию геометрический объект трансформируется сам и ничего не возвращается. Однако, когда параметрclone
установлен, геометрический объект не изменяется, а возвращается преобразованный клон геометрического объекта.Заметка
Выдает исключение,
GEOSException
если GDAL недоступен или если значение SRID геометрического объекта равноNone
или меньше 0. На код SRID геометрического объекта не накладывается никаких ограничений, когда он вызывается с объектомCoordTransform
.
-
GEOSGeometry.
normalize
() ¶ Преобразует этот геометрический объект в его каноническую форму:
>>> g = MultiPoint(Point(0, 0), Point(2, 2), Point(1, 1)) >>> print(g) MULTIPOINT (0 0, 2 2, 1 1) >>> g.normalize() >>> print(g) MULTIPOINT (2 2, 1 1, 0 0)
Point
¶
-
class
Point
( x = None , y = None , z = None , srid = None ) ¶ Объекты
Point
создаются с использованием параметров, представляющих компоненты координат точки или единую последовательность координат. Например, следующие строки эквивалентны:>>> pnt = Point(5, 23) >>> pnt = Point([5, 23])
Point
Пустые объекты могут быть созданы без передачи параметров или пустого списка. Эти строки эквивалентны:>>> pnt = Point() >>> pnt = Point([])
LineString
¶
-
класс
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
напрямую с <
золотом >
, но поскольку сравнение выполняется по сегментам 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
представляющую слияние всех компонентов этого объекта
-
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 Wiki, посвященную подготовленным геометрическим объектам .
Например :
>>> 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 или строковый путь к файлу) - входной файл, содержащий пространственные данныеВозвращаемый тип: объект, GEOSGeometry
соответствующий пространственным данным файлаПример:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile('/home/bob/geom.wkt')
-
fromstr
( строка , srid = Нет ) ¶ Настройки: Возвращаемый тип: объект,
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>
Пишите объекты ¶
Все объекты записи имеют метод, write(geom)
который возвращает представление WKB или WKT соответствующего геометрического объекта. Кроме того, объекты WKBWriter
также имеют свойства, которые можно использовать для изменения порядка байтов и включения значения SRID (то есть содержимого EWKB).
-
класс
WKBWriter
( dim = 2 ) ¶ WKBWriter
предлагает максимальный контроль над производимым контентом. По умолчанию он возвращает OGC-совместимое содержимое WKB при вызове его методаwrite
. Однако у него есть свойства, позволяющие создавать формат EWKB, надмножество стандарта WKB, которое включает дополнительную информацию. См. ДокументациюWKBWriter.outdim
для получения более подробной информации о параметреdim
.-
write
( geom ) ¶
Возвращает WKB-представление геометрического объекта как объекта Python
buffer
. Пример:>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write(pnt) <read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
-
write_hex
( geom ) ¶
Возвращает WKB-представление геометрического объекта в шестнадцатеричной форме. Пример:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F'
-
byteorder
¶
Это свойство может быть установлено для изменения порядка байтов геометрического представления.
Стоимость 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
Описание 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
.