ГЕОС API¶
Фон¶
Что такое ГЕОС?¶
`GEOS`__ означает Geometry Engine - Open Source и представляет собой библиотеку C++, перенесенную из `Java Topology Suite`__. GEOS реализует функции пространственного предиката OpenGIS `Simple Features for SQL`__ и пространственные операторы. GEOS, ныне являющийся проектом OSGeo, изначально был разработан и поддерживается компанией Refractions Research __ из Виктории, Канада.
Функции¶
GeoDjango реализует высокоуровневую оболочку Python для библиотеки GEOS, ее функции включают в себя:
Интерфейс с лицензией BSD для геометрических процедур GEOS, реализованный исключительно на Python с использованием ctypes.
Слабая связь с GeoDjango. Например, объекты
GEOSGeometryмогут использоваться вне проекта/приложения Django. Другими словами, нет необходимости устанавливать или использовать базу данныхDJANGO_SETTINGS_MODULEи т. д.Изменяемость: объекты
GEOSGeometryмогут быть изменены.Cross-platform and tested; compatible with Windows, Linux, Solaris, and macOS platforms.
Учебное пособие¶
Этот раздел содержит краткое введение и руководство по использованию объектов GEOSGeometry.
Создание геометрии¶
GEOSGeometry objects may be created in a few ways. The first is
to simply instantiate the object on some spatial input – the following
are examples of creating the same geometry from WKT, HEX, WKB, and GeoJSON:
>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry('POINT(5 23)') # WKT
>>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX
>>> pnt = GEOSGeometry(buffer('\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@'))
>>> pnt = GEOSGeometry('{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }') # GeoJSON
Another option is to use the constructor for the specific geometry type
that you wish to create. For example, a Point object may be
created by passing in the X and Y coordinates into its constructor:
>>> from django.contrib.gis.geos import Point
>>> pnt = Point(5, 23)
All these constructors take the keyword argument srid. For example:
>>> 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)
Finally, there is the fromfile() factory method which returns a
GEOSGeometry object from a file:
>>> from django.contrib.gis.geos import fromfile
>>> pnt = fromfile('/path/to/pnt.wkt')
>>> pnt = fromfile(open('/path/to/pnt.wkt'))
Геометрии являются питоническими¶
GEOSGeometry objects are „Pythonic“, in other words components may
be accessed, modified, and iterated over using standard Python conventions.
For example, you can iterate over the coordinates in a Point:
>>> pnt = Point(5, 23)
>>> [coord for coord in pnt]
[5.0, 23.0]
With any geometry object, the GEOSGeometry.coords property
may be used to get the geometry coordinates as a Python tuple:
>>> pnt.coords
(5.0, 23.0)
You can get/set geometry components using standard Python indexing
techniques. However, what is returned depends on the geometry type
of the object. For example, indexing on a LineString
returns a coordinate tuple:
>>> 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)
Whereas indexing on a Polygon will return the ring
(a LinearRing object) corresponding to the index:
>>> 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)
In addition, coordinates/components of the geometry may added or modified, just like a Python list:
>>> 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))
Geometries support set-like operators:
>>> 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))
Оператор равенства не проверяет пространственное равенство
The GEOSGeometry equality operator uses
equals_exact(), not equals(), i.e.
it requires the compared geometries to have the same coordinates in the
same positions with the same SRIDs:
>>> 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
Геометрические объекты¶
ГЕОСГеометрия¶
- class GEOSGeometry(geo_input, srid=None)¶
- Параметры:
geo_input – Geometry input value (string or buffer)
srid (int) – идентификатор пространственной привязки
Это базовый класс для всех объектов геометрии GEOS. Он инициализируется с использованием данного аргумента geo_input, а затем предполагает правильный подкласс геометрии (например, GEOSGeometry('POINT(1 1)') создаст объект Point).
The srid parameter, if given, is set as the SRID of the created geometry if
geo_input doesn’t have an SRID. If different SRIDs are provided through the
geo_input and srid parameters, ValueError is raised:
>>> 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:
Формат |
Тип входа |
|---|---|
ВКТ / ЭВКТ |
|
HEX/HEXEWKB |
|
ВКБ / ЭВКБ |
|
|
Для формата GeoJSON SRID устанавливается на основе члена crs. Если crs не указан, SRID по умолчанию равен 4326.
- classmethod GEOSGeometry.from_gml(gml_string)¶
Создает
GEOSGeometryиз заданной строки GML.
Характеристики¶
- GEOSGeometry.coords¶
Возвращает координаты геометрии в виде кортежа.
- GEOSGeometry.dims¶
Возвращает размер геометрии:
0дляPoints иMultiPoints1дляLineStrings иMultiLineStrings2дляPolygons иMultiPolygons-1для пустогоGeometryCollectionsмаксимальный размер его элементов для непустого
GeometryCollections
- GEOSGeometry.empty¶
Возвращает значение, является ли набор точек в геометрии пустым.
- GEOSGeometry.geom_type¶
Returns a string corresponding to the type of geometry. For example:
>>> pnt = GEOSGeometry('POINT(5 23)') >>> pnt.geom_type 'Point'
- GEOSGeometry.geom_typeid¶
Возвращает идентификационный номер типа геометрии GEOS. В следующей таблице показаны значения для каждого типа геометрии:
Геометрия
ИДЕНТИФИКАТОР
Точка0
1
ЛинейноеКольцо2
Многоугольник3
4
5
Мультиполигон6
7
- GEOSGeometry.num_coords¶
Возвращает количество координат в геометрии.
- GEOSGeometry.num_geom¶
Возвращает количество геометрий в этой геометрии. Другими словами, вернет 1 для чего угодно, кроме коллекций геометрии.
- GEOSGeometry.hasz¶
Возвращает логическое значение, указывающее, является ли геометрия трехмерной.
- GEOSGeometry.ring¶
Возвращает логическое значение, указывающее, является ли геометрия LinearRing.
- GEOSGeometry.simple¶
Returns a boolean indicating whether the geometry is „simple“. A geometry is simple if and only if it does not intersect itself (except at boundary points). For example, a
LineStringobject is not simple if it intersects itself. Thus,LinearRingandPolygonobjects are always simple because they do cannot intersect themselves, by definition.
- GEOSGeometry.valid¶
Возвращает логическое значение, указывающее, допустима ли геометрия.
- GEOSGeometry.valid_reason¶
Возвращает строку, описывающую причину, по которой геометрия недействительна.
- GEOSGeometry.srid¶
Property that may be used to retrieve or set the SRID associated with the geometry. For example:
>>> 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 (Well-Known Binary) этой геометрии в виде буфера Python. Значение SRID не включено, вместо него используйте свойство
GEOSGeometry.ewkb.
- GEOSGeometry.ewkb¶
Верните представление EWKB этой геометрии в виде буфера Python. Это расширение спецификации WKB, включающее любые значения SRID, являющиеся частью этой геометрии.
- GEOSGeometry.wkt¶
Возвращает общеизвестный текст геометрии (стандарт OGC).
Пространственные методы предикатов¶
Все следующие методы пространственного предиката принимают в качестве параметра другой экземпляр GEOSGeometry («other») и возвращают логическое значение.
- GEOSGeometry.contains(other)¶
Возвращает
True, еслиother.within(this)возвращаетTrue.
- GEOSGeometry.covers(other)¶
Возвращает
True, если эта геометрия покрывает указанную геометрию.Предикат Covers имеет следующие эквивалентные определения:
Каждая точка другой геометрии является точкой этой геометрии.
The DE-9IM Intersection Matrix for the two geometries is
T*****FF*,*T****FF*,***T**FF*, or****T*FF*.
Если какая-либо геометрия пуста, возвращается
False.Этот предикат похож на
GEOSGeometry.contains(), но является более инклюзивным (т.е. возвращаетTrueдля большего количества случаев). В частности, в отличие отcontains()он не различает точки на границе и внутри геометрии. В большинстве ситуацийcovers()предпочтительнееcontains(). В качестве дополнительного преимущества, Covers() лучше поддается оптимизации и, следовательно, должен превосходитьcontains().
- GEOSGeometry.crosses(other)¶
Возвращает
True, если матрица пересечения DE-9IM для двух геометрий равнаT*T******(для точки и кривой, точки и площади или линии и площади)0********(для двух кривых).
- GEOSGeometry.disjoint(other)¶
Возвращает
True, если матрица пересечения DE-9IM для двух геометрий равнаFF*FF****.
- GEOSGeometry.equals(other)¶
Возвращает
True, если матрица пересечения DE-9IM для двух геометрий равнаT*F**FFF*.
- GEOSGeometry.equals_exact(other, tolerance=0)¶
Возвращает true, если две геометрии точно равны, с точностью до указанного допуска. Значение
toleranceдолжно быть числом с плавающей запятой, представляющим допуск на ошибку при сравнении, например,poly1.equals_exact(poly2, 0.001)будет сравнивать равенство с точностью до одной тысячной единицы.
- GEOSGeometry.intersects(other)¶
Возвращает
True, еслиGEOSGeometry.disjoint()имеет значениеFalse.
- GEOSGeometry.overlaps(other)¶
Возвращает true, если матрица пересечения DE-9IM для двух геометрий равна
T*T***T**(для двух точек или двух поверхностей)1*T***T**(для двух кривых).
- GEOSGeometry.relate_pattern(other, pattern)¶
Возвращает
True, если элементы в матрице пересечения DE-9IM для этой геометрии и другой соответствуют заданномушаблону— строке из девяти символов алфавита: {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, который представляет все точки, расстояние от которых до этой геометрии меньше или равно заданнойширине. Необязательное ключевое слово 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)¶
Учитывая расстояние (float), возвращает точку (или ближайшую точку) в геометрии (
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¶
Возвращает границу как вновь выделенный объект Geometry.
- GEOSGeometry.centroid¶
Возвращает объект
Point, представляющий геометрический центр геометрии. Точка не обязательно находится внутри геометрии.
- GEOSGeometry.envelope¶
Возвращает
Polygon, который представляет собой ограничивающую оболочку этой геометрии. Обратите внимание, что он также может возвращатьPoint, если входная геометрия является точкой.
- GEOSGeometry.point_on_surface¶
Вычисляет и возвращает
Point, который гарантированно находится внутри этой геометрии.
- GEOSGeometry.unary_union¶
Вычисляет объединение всех элементов этой геометрии.
Результат подчиняется следующему контракту:
Объединение набора
LineStrings приводит к полному узлу и растворению линий.Объединение набора
Polygons всегда будет возвращать геометрию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оптимизированы для операций содержания, пересечения, покрытия, пересечения, разделения, перекрытия, касания и внутри. Дополнительную информацию можно найти в документации prepared-geometry.
- GEOSGeometry.srs¶
Возвращает объект
SpatialReference, соответствующий SRID геометрии илиNone.
- GEOSGeometry.transform(ct, clone=False)¶
Transforms the geometry according to the given coordinate transformation parameter (
ct), which may be an integer SRID, spatial reference WKT string, a PROJ.4 string, aSpatialReferenceobject, or aCoordTransformobject. By default, the geometry is transformed in-place and nothing is returned. However if theclonekeyword is set, then the geometry is not modified and a transformed clone of the geometry is returned instead.Примечание
Вызывает
GEOSException, если GDAL недоступен или если SRID геометрии равенNoneили меньше 0. Он не накладывает никаких ограничений на SRID геометрии, если вызывается с объектомCoordTransform.
- GEOSGeometry.normalize()¶
Converts this geometry to canonical form:
>>> 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)
Точка¶
- class Point(x=None, y=None, z=None, srid=None)¶
Pointobjects are instantiated using arguments that represent the component coordinates of the point or with a single sequence coordinates. For example, the following are equivalent:>>> pnt = Point(5, 23) >>> pnt = Point([5, 23])
Empty
Pointobjects may be instantiated by passing no arguments or an empty sequence. The following are equivalent:>>> pnt = Point() >>> pnt = Point([])
ЛинейнаяСтрока¶
- class LineString(*args, **kwargs)¶
LineStringobjects are instantiated using arguments that are either a sequence of coordinates orPointobjects. For example, the following are equivalent:>>> ls = LineString((0, 0), (1, 1)) >>> ls = LineString(Point(0, 0), Point(1, 1))
In addition,
LineStringobjects may also be created by passing in a single sequence of coordinate orPointobjects:>>> ls = LineString( ((0, 0), (1, 1)) ) >>> ls = LineString( [Point(0, 0), Point(1, 1)] )
Empty
LineStringobjects may be instantiated by passing no arguments or an empty sequence. The following are equivalent:>>> ls = LineString() >>> ls = LineString([])
- closed¶
Возвращает, закрыта ли эта
LineString.
ЛинейноеКольцо¶
- class LinearRing(*args, **kwargs)¶
LinearRingobjects are constructed in the exact same way asLineStringobjects, however the coordinates must be closed, in other words, the first coordinates must be the same as the last coordinates. For example:>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
Обратите внимание, что
(0, 0)— это первая и последняя координаты. Если бы они не были равны, возникла бы ошибка.- is_counterclockwise¶
- New in Django 3.1.
Возвращает, движется ли это
LinearRingпротив часовой стрелки.
Многоугольник¶
- class Polygon(*args, **kwargs)¶
Polygonobjects may be instantiated by passing in parameters that represent the rings of the polygon. The parameters must either beLinearRinginstances, or a sequence that may be used to construct aLinearRing:>>> 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)¶
Возвращает многоугольный объект из заданной ограничивающей рамки, четырехкортеж, содержащий
(xmin, ymin, xmax, ymax).
- num_interior_rings¶
Возвращает количество внутренних колец в этой геометрии.
Сравнение полигонов
Note that it is possible to compare Polygon objects directly with <
or >, but as the comparison is made through Polygon’s
LineString, it does not mean much (but is consistent and quick).
You can always force the comparison with the area
property:
>>> if poly_1.area > poly_2.area:
>>> pass
Коллекции геометрии¶
Мультиточка¶
Мультистрочная строка¶
- class MultiLineString(*args, **kwargs)¶
MultiLineStringobjects may be instantiated by passing inLineStringobjects as arguments, or a single sequence ofLineStringobjects:>>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((2, 2), (3, 3)) >>> mls = MultiLineString(ls1, ls2) >>> mls = MultiLineString([ls1, ls2])
- merged¶
Возвращает
LineString, представляющий собой слияние строк всех компонентов в этойMultiLineString.
- closed¶
Returns
Trueif and only if all elements are closed. Requires GEOS 3.5.
Мультиполигон¶
- class MultiPolygon(*args, **kwargs)¶
MultiPolygonobjects may be instantiated by passingPolygonobjects as arguments, or a single sequence ofPolygonobjects:>>> 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)¶
GeometryCollectionobjects may be instantiated by passing in otherGEOSGeometryas arguments, or a single sequence ofGEOSGeometryobjects:>>> 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
Подготовленная геометрия¶
Геометрические Фабрики¶
- fromfile(file_h)¶
- Параметры:
file_h (a Python
fileobject or a string path to the file) – входной файл, содержащий пространственные данные- Тип результата:
GEOSGeometry, соответствующий пространственным данным в файле
Например:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile('/home/bob/geom.wkt')
- fromstr(string, srid=None)¶
- Параметры:
string (str) – строка, содержащая пространственные данные
srid (int) – идентификатор пространственной привязки
- Тип результата:
GEOSGeometry, соответствующий пространственным данным в строке
fromstr(string, srid)эквивалентенGEOSGeometry(string, srid).Например:
>>> from django.contrib.gis.geos import fromstr >>> pnt = fromstr('POINT(-90.5 29.5)', srid=4326)
Объекты ввода-вывода¶
Объекты чтения¶
Классы ввода-вывода считывателя возвращают экземпляр GEOSGeometry из входных данных WKB и/или WKT, переданных их методу read(geom).
- class WKBReader¶
Например:
>>> from django.contrib.gis.geos import WKBReader >>> wkb_r = WKBReader() >>> wkb_r.read('0101000000000000000000F03F000000000000F03F') <Point object at 0x103a88910>
- class WKTReader¶
Например:
>>> from django.contrib.gis.geos import WKTReader >>> wkt_r = WKTReader() >>> wkt_r.read('POINT(1 1)') <Point object at 0x103a88b50>
Объекты записи¶
Все объекты записи имеют метод write(geom), который возвращает либо WKB, либо WKT заданной геометрии. Кроме того, объекты WKBWriter также имеют свойства, которые можно использовать для изменения порядка байтов и/или включения значения SRID (другими словами, EWKB).
- class WKBWriter(dim=2)¶
WKBWriterобеспечивает максимальный контроль над выводом. По умолчанию он возвращает OGC-совместимый WKB при вызове метода write. Однако у него есть свойства, позволяющие создавать EWKB — расширенный набор стандарта WKB, включающий дополнительную информацию. Дополнительную информацию об аргументеdimсмотрите в документацииWKBWriter.outdim.- write(geom)¶
Returns the WKB of the given geometry as a Python
bufferobject. Example:>>> 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)¶
Returns WKB of the geometry in hexadecimal. Example:
>>> 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¶
Это свойство может быть установлено для изменения выходного размера представления геометрии. Другими словами, если у вас есть 3D-геометрия, установите значение 3, чтобы значение Z включалось в WKB.
Уменьшить значение
Описание
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¶
Set this property with a boolean to indicate whether the SRID of the geometry should be included with the WKB representation. Example:
>>> 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)¶
Returns the WKT of the given geometry. Example:
>>> 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¶
Это свойство управляет точностью округления координат; если установлено значение «Нет», округление отключено.
>>> 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¶
Базовое исключение GEOS указывает на ошибку, связанную с GEOS.