Spec-Zone.ru › Django 1.9

GEOS API

Обзор

Что такое GEOS?

GEOS расшифровывается как Geometry Engine — Open Source и представляет собой библиотеку на C++, перенесённую из Java Topology Suite. GEOS реализует пространственные предикаты и операторы OpenGIS Simple Features for SQL. GEOS, ныне проект OSGeo, изначально разрабатывался и поддерживался компанией Refractions Research из Виктории, Канада.

Возможности

GeoDjango реализует высокоуровневый Python-обёртку для библиотеки GEOS, её возможности включают:

  • Интерфейс с лицензией BSD для геометрических функций GEOS, реализованный чисто на Python с использованием ctypes.
  • Слабая зависимость от GeoDjango. Например, объекты GEOSGeometry могут использоваться вне проекта/приложения Django. Другими словами, нет необходимости устанавливать DJANGO_SETTINGS_MODULE или использовать базу данных и т. д.
  • Изменяемость: объекты GEOSGeometry могут быть изменены.
  • Работает на разных платформах и протестирована; совместима с Windows, Linux, Solaris и Mac OS X.

Руководство

Этот раздел содержит краткое введение и руководство по использованию объектов GEOSGeometry.

Создание геометрии

Объекты GEOSGeometry могут быть созданы несколькими способами. Первый способ — просто создать объект на основе пространственного входного значения. Ниже приведены примеры создания одной и той же геометрии из WKT, HEX, WKB и GeoJSON:

>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry('POINT(5 23)') # WKT
>>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX
>>> pnt = GEOSGeometry(buffer('\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@'))
>>> pnt = GEOSGeometry('{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }') # GeoJSON

Другой вариант — использовать конструктор для конкретного типа геометрии, которую вы хотите создать. Например, объект Point можно создать, передав координаты X и Y в его конструктор:

>>> from django.contrib.gis.geos import Point
>>> pnt = Point(5, 23)

Все эти конструкторы принимают ключевой аргумент srid. Например:

>>> from django.contrib.gis.geos import GEOSGeometry, LineString, Point
>>> print(GEOSGeometry('POINT (0 0)', srid=4326))
SRID=4326;POINT (0.0000000000000000 0.0000000000000000)
>>> print(LineString((0, 0), (1, 1), srid=4326))
SRID=4326;LINESTRING (0.0000000000000000 0.0000000000000000, 1.0000000000000000 1.0000000000000000)
>>> print(Point(0, 0, srid=32140))
SRID=32140;POINT (0.0000000000000000 0.0000000000000000)

Наконец, есть фабричный метод fromfile(), который возвращает объект GEOSGeometry из файла:

>>> from django.contrib.gis.geos import fromfile
>>> pnt = fromfile('/path/to/pnt.wkt')
>>> pnt = fromfile(open('/path/to/pnt.wkt'))

В логах много ошибок, связанных с GEOS

Вы обнаруживаете много исключений TypeError или AttributeError в файлах журналов веб-сервера. Это обычно означает, что вы создаёте объекты GEOS на верхнем уровне некоторых ваших Python-модулей. Затем, из-за проблемы гонки в сборщике мусора, ваш модуль собирается мусором до того, как объект GEOS. Чтобы этого избежать, создавайте объекты GEOSGeometry внутри локальной области видимости ваших функций/методов.

Геометрии — это объекты Python

Объекты GEOSGeometry являются «объектами Python», другими словами, к компонентам можно получить доступ, изменить и перебрать их с помощью стандартных соглашений Python. Например, вы можете перебрать координаты в объекте Point:

>>> pnt = Point(5, 23)
>>> [coord for coord in pnt]
[5.0, 23.0]

С любым геометрическим объектом свойство GEOSGeometry.coords можно использовать для получения координат геометрии в виде кортежа Python:

>>> pnt.coords
(5.0, 23.0)

Вы можете получить/установить компоненты геометрии с помощью стандартных методов индексирования Python. Однако то, что возвращается, зависит от типа геометрии объекта. Например, индексирование объекта LineString возвращает кортеж координат:

>>> from django.contrib.gis.geos import LineString
>>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0))
>>> line[0]
(0.0, 0.0)
>>> line[-2]
(50.0, 0.0)

В то время как индексирование объекта Polygon вернёт кольцо (объект LinearRing), соответствующее индексу:

>>> from django.contrib.gis.geos import Polygon
>>> poly = Polygon( ((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0)) )
>>> poly[0]
<LinearRing object at 0x1044395b0>
>>> poly[0][-2] # second-to-last coordinate of external ring
(50.0, 0.0)

Кроме того, координаты/компоненты геометрии можно добавлять или изменять так же, как и в списке Python:

>>> line[0] = (1.0, 1.0)
>>> line.pop()
(0.0, 0.0)
>>> line.append((1.0, 1.0))
>>> line.coords
((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))

Геометрии поддерживают операторы множества:

>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (2, 2))
>>> ls2 = LineString((1, 1), (3, 3))
>>> print(ls1 | ls2)  # equivalent to `ls1.union(ls2)`
MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3))
>>> print(ls1 & ls2)  # equivalent to `ls1.intersection(ls2)`
LINESTRING (1 1, 2 2)
>>> print(ls1 - ls2)  # equivalent to `ls1.difference(ls2)`
LINESTRING(0 0, 1 1)
>>> print(ls1 ^ ls2)  # equivalent to `ls1.sym_difference(ls2)`
MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))

Оператор равенства не проверяет пространственное равенство

Оператор равенства для GEOSGeometry использует equals_exact(), а не equals(), т. е. требуется, чтобы сравниваемые геометрии имели одинаковые координаты в тех же позициях:

>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((1, 1), (0, 0))
>>> ls1.equals(ls2)
True
>>> ls1 == ls2
False

Геометрические объекты

GEOSGeometry

class GEOSGeometry(geo_input, srid=None) [source]
Параметры:
  • geo_input — значение входных данных геометрии (строка или буфер)
  • srid (int) — идентификатор пространственной системы координат

Это базовый класс для всех геометрических объектов GEOS. Он инициализируется заданным аргументом geo_input, а затем предполагает соответствующий подкласс геометрии (например, GEOSGeometry('POINT(1 1)') создаст объект Point).

Принимаются следующие форматы ввода вместе с соответствующими типами Python:

Формат Тип ввода
WKT / EWKT str или unicode
HEX / HEXEWKB str или unicode
WKB / EWKB buffer
GeoJSON (требуется GDAL) str или unicode

Примечание

Новая 3D/4D нотация WKT с промежуточными Z или M (например, POINT Z (3, 4, 5)) поддерживается только с GEOS 3.3.0 и более поздними версиями.

Свойства

GEOSGeometry.coords

Возвращает координаты геометрии в виде кортежа.

GEOSGeometry.dims

Возвращает размерность геометрии:

  • 0 для Point и MultiPoint
  • 1 для LineString и MultiLineString
  • 2 для Polygon и MultiPolygon
  • -1 для пустых GeometryCollection
  • максимальную размерность элементов для непустых GeometryCollection
GEOSGeometry.empty

Возвращает, пусто ли множество точек в геометрии.

GEOSGeometry.geom_type

Возвращает строку, соответствующую типу геометрии. Например:

>>> pnt = GEOSGeometry('POINT(5 23)')
>>> pnt.geom_type
'Point'
GEOSGeometry.geom_typeid

Возвращает идентификатор типа геометрии GEOS. В следующей таблице показано значение для каждого типа геометрии:

Геометрия ID
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

Возвращает «расширенный» текст Well-Known (EWKT) геометрии. Это представление специфично для PostGIS и является надмножеством стандарта OGC WKT. [1] По существу, SRID предшествует представлению WKT, например SRID=4326;POINT(5 23).

Примечание

Вывод этого свойства не включает информацию 3dm, 3dz и 4d, которые PostGIS поддерживает в своих представлениях EWKT.

GEOSGeometry.hex

Возвращает WKB этой геометрии в шестнадцатеричном формате. Обратите внимание, что значение SRID не включено в это представление, поскольку оно не является частью спецификации OGC (используйте свойство GEOSGeometry.hexewkb вместо этого).

GEOSGeometry.hexewkb

Возвращает EWKB этой геометрии в шестнадцатеричном формате. Это расширение спецификации WKB, которое включает значение SRID, относящиеся к этой геометрии.

GEOSGeometry.json

Возвращает представление геометрии в формате GeoJSON. Обратите внимание, что результат не является полной структурой GeoJSON, а только содержание ключа geometry структуры GeoJSON. См. также Сериализатор GeoJSON.

GEOSGeometry.geojson

Псевдоним для GEOSGeometry.json.

GEOSGeometry.kml

Возвращает представление геометрии в формате KML (Keyhole Markup Language). Используйте только для геометрий с SRID 4326 (WGS84), но это ограничение не проверяется.

GEOSGeometry.ogr

Возвращает объект OGRGeometry, соответствующий геометрии GEOS.

Примечание

Требуется GDAL.

GEOSGeometry.wkb

Возвращает WKB (Well-Known Binary) представление этой геометрии в виде Python буфера. Значение SRID не включается, используйте свойство GEOSGeometry.ewkb вместо этого.

GEOSGeometry.ewkb

Возвращает EWKB представление этой геометрии в виде Python буфера. Это расширение спецификации WKB, которое включает любые значения SRID, относящиеся к этой геометрии.

GEOSGeometry.wkt

Возвращает текст Well-Known (WKT) геометрии (стандарт OGC).

Методы пространственных предикатов

Все следующие методы пространственных предикатов принимают другой экземпляр GEOSGeometry (other) в качестве параметра и возвращают булево значение.

GEOSGeometry.contains(other) [source]

Возвращает True если other.within(this) возвращает True.

GEOSGeometry.crosses(other) [source]

Возвращает True если матрица пересечения DE-9IM для двух геометрий равна T*T****** (для точки и кривой, точки и области или линии и области) 0******** (для двух кривых).

GEOSGeometry.disjoint(other) [source]

Возвращает True если матрица пересечения DE-9IM для двух геометрий равна FF*FF****.

GEOSGeometry.equals(other) [source]

Возвращает True если матрица пересечения DE-9IM для двух геометрий равна T*F**FFF*.

GEOSGeometry.equals_exact(other, tolerance=0) [source]

Возвращает true, если две геометрии точно равны с заданной точностью. Значение tolerance должно быть числом с плавающей точкой, представляющим толерантность ошибки при сравнении, например, poly1.equals_exact(poly2, 0.001) будет сравнивать равенство с точностью до одной тысячной единицы.

GEOSGeometry.intersects(other) [source]

Возвращает True если GEOSGeometry.disjoint() равно False.

GEOSGeometry.overlaps(other) [source]

Возвращает true, если матрица пересечения DE-9IM для двух геометрий равна T*T***T** (для двух точек или двух поверхностей) 1*T***T** (для двух кривых).

GEOSGeometry.relate_pattern(other, pattern) [source]

Возвращает True, если элементы в матрице пересечения DE-9IM для этой геометрии и другой совпадают с заданным pattern – строкой из девяти символов из алфавита: {T, F, *, 0}.

GEOSGeometry.touches(other) [source]

Возвращает True если матрица пересечения DE-9IM для двух геометрий равна FT*******, F**T***** или F***T****.

GEOSGeometry.within(other) [source]

Возвращает True если матрица пересечения DE-9IM для двух геометрий равна T*F**F***.

Топологические методы

GEOSGeometry.buffer(width, quadsegs=8) [source]

Возвращает GEOSGeometry, представляющую все точки, расстояние от которых до этой геометрии меньше или равно заданному width. Необязательный параметр quadsegs устанавливает количество сегментов, используемых для аппроксимации четверти окружности (по умолчанию 8).

GEOSGeometry.difference(other) [source]

Возвращает GEOSGeometry, представляющую точки, составляющие эту геометрию, но не составляющие другую.

GEOSGeometry.interpolate(distance)
GEOSGeometry.interpolate_normalized(distance)

При заданном расстоянии (float), возвращает точку (или ближайшую точку) внутри геометрии (LineString или MultiLineString) на этом расстоянии. Нормализованный вариант принимает расстояние как число с плавающей запятой между 0 (начало) и 1 (конец).

Обратное к GEOSGeometry.project().

GEOSGeometry.intersection(other) [source]

Возвращает GEOSGeometry, представляющую точки, общие для этой геометрии и другой.

GEOSGeometry.project(point)
GEOSGeometry.project_normalized(point)

Возвращает расстояние (float) от начала геометрии (LineString или MultiLineString) до точки, спроецированной на геометрию (то есть до точки линии, наиболее близкой к заданной точке). Нормализованная версия возвращает расстояние как число с плавающей запятой между 0 (начало) и 1 (конец).

Обратное к GEOSGeometry.interpolate().

GEOSGeometry.relate(other) [source]

Возвращает матрицу пересечения DE-9IM (строку), представляющую топологическое отношение между этой геометрией и другой.

GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False) [source]

Возвращает новую GEOSGeometry, упрощенную до заданной толерантности с использованием алгоритма Дугласа-Пекера. Более высокое значение толерантности подразумевает меньше точек на выходе. Если толерантность не указана, она устанавливается по умолчанию в 0.

По умолчанию эта функция не сохраняет топологию. Например, объекты Polygon могут быть разделены, сведены к линиям или исчезнуть. Polygon отверстия могут быть созданы или исчезнуть, а линии могут пересекаться. При указании preserve_topology=True, результат будет иметь такую же размерность и количество компонентов, как входные данные; однако это значительно медленнее.

GEOSGeometry.sym_difference(other) [source]

Возвращает GEOSGeometry, объединяющую точки этой геометрии, отсутствующие в другой, и точки другой, отсутствующие в этой геометрии.

GEOSGeometry.union(other) [source]

Возвращает GEOSGeometry, представляющую все точки в этой геометрии и в другой.

Топологические свойства

GEOSGeometry.boundary

Возвращает границу как новый объект геометрии.

GEOSGeometry.centroid

Возвращает объект Point, представляющий геометрический центр геометрии. Точка не гарантированно находится внутри геометрии.

GEOSGeometry.convex_hull

Возвращает наименьший Polygon, содержащий все точки в геометрии.

GEOSGeometry.envelope

Возвращает Polygon, представляющий охватывающий прямоугольник этой геометрии. Обратите внимание, что он также может вернуть Point, если входная геометрия является точкой.

GEOSGeometry.point_on_surface

Вычисляет и возвращает Point, гарантированно находящуюся внутри этой геометрии.

Другие свойства и методы

GEOSGeometry.area

Это свойство возвращает площадь геометрии.

GEOSGeometry.extent

Это свойство возвращает размер этой геометрии в виде 4-кортежа, состоящего из (xmin, ymin, xmax, ymax).

GEOSGeometry.clone() [source]

Этот метод возвращает GEOSGeometry, являющийся копией оригинала.

GEOSGeometry.distance(geom) [source]

Возвращает расстояние между ближайшими точками этой геометрии и заданной geom (другим объектом GEOSGeometry).

Примечание

Расчёты расстояний GEOS линейные — другими словами, GEOS не выполняет сферический расчёт, даже если SRID указывает географическую систему координат.

GEOSGeometry.length

Возвращает длину данной геометрии (например, 0 для Point, длину LineString или окружность Polygon).

GEOSGeometry.prepared

Возвращает GEOS PreparedGeometry для содержимого этой геометрии. PreparedGeometry объекты оптимизированы для операций contains, intersects, covers, crosses, disjoint, overlaps, touches и within. Дополнительную информацию см. в документации по Подготовленным геометриям.

GEOSGeometry.srs

Возвращает объект SpatialReference, соответствующий SRID геометрии или None.

Примечание

Требуется GDAL.

GEOSGeometry.transform(ct, clone=False) [source]

Преобразует геометрию в соответствии с заданным параметром преобразования координат (ct), который может быть целочисленным SRID, строкой WKT пространственной ссылки, строкой PROJ.4, объектом SpatialReference или объектом CoordTransform. По умолчанию геометрия преобразуется на месте, и ничего не возвращается. Однако, если параметр clone установлен, геометрия не изменяется, а вместо этого возвращается преобразованная копия геометрии.

Примечание

Требуется GDAL. Вызывает GEOSException, если GDAL недоступен или SRID геометрии None или меньше 0.

Point

class Point(x, y, z=None, srid=None) [source]

Объекты Point создаются с использованием аргументов, представляющих координаты компонентов точки или с помощью одного последовательности координат. Например, следующие варианты эквивалентны:

>>> pnt = Point(5, 23)
>>> pnt = Point([5, 23])

LineString

class LineString(*args, **kwargs) [source]

Объекты LineString создаются с использованием аргументов, которые представляют собой последовательность координат или объекты Point. Например, следующие варианты эквивалентны:

>>> ls = LineString((0, 0), (1, 1))
>>> ls = LineString(Point(0, 0), Point(1, 1))

Кроме того, объекты LineString также можно создать, передав одну последовательность координат или объекты Point:

>>> ls = LineString( ((0, 0), (1, 1)) )
>>> ls = LineString( [Point(0, 0), Point(1, 1)] )

LinearRing

class LinearRing(*args, **kwargs) [source]

Объекты LinearRing создаются таким же образом, как объекты LineString, но координаты должны быть закрытыми, то есть первые координаты должны быть такими же, как и последние координаты. Например:

>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))

Обратите внимание, что (0, 0) — это первая и последняя координата. Если они не равны, будет выведено сообщение об ошибке.

Polygon

class Polygon(*args, **kwargs) [source]

Объекты Polygon могут быть созданы путём передачи одного или нескольких параметров, которые представляют собой кольца полигона. Параметры должны быть экземплярами LinearRing или последовательностью, которую можно использовать для построения LinearRing:

>>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0))
>>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4))
>>> poly = Polygon(ext_coords, int_coords)
>>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))
classmethod from_bbox(bbox) [source]

Возвращает объект полигона из заданной рамки, 4-tuple содержащей (xmin, ymin, xmax, ymax).

num_interior_rings

Возвращает количество внутренних колец в этой геометрии.

Сравнение полигонов

Обратите внимание, что можно напрямую сравнивать объекты Polygon с объектами < или >, но поскольку сравнение выполняется через LineString объекта Polygon, это не имеет особого смысла (но согласуется и быстро). Вы всегда можете принудительно сравнить значения с помощью свойства area:

>>> if poly_1.area > poly_2.area:
>>>     pass

Коллекции геометрий

MultiPoint

class MultiPoint(*args, **kwargs) [source]

Объекты MultiPoint могут быть созданы, передав один или несколько объектов Point в качестве аргументов или одну последовательность объектов Point:

>>> mp = MultiPoint(Point(0, 0), Point(1, 1))
>>> mp = MultiPoint( (Point(0, 0), Point(1, 1)) )

MultiLineString

class MultiLineString(*args, **kwargs) [source]

Объекты MultiLineString могут быть созданы, передав один или несколько объектов LineString в качестве аргументов или одну последовательность объектов LineString:

>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((2, 2), (3, 3))
>>> mls = MultiLineString(ls1, ls2)
>>> mls = MultiLineString([ls1, ls2])
merged

Возвращает LineString, представляющий собой объединение линий всех компонентов в этом объекте MultiLineString.

MultiPolygon

class MultiPolygon(*args, **kwargs) [source]

Объекты MultiPolygon могут быть созданы, передав один или несколько объектов Polygon в качестве аргументов или одну последовательность объектов Polygon:

>>> p1 = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) )
>>> p2 = Polygon( ((1, 1), (1, 2), (2, 2), (1, 1)) )
>>> mp = MultiPolygon(p1, p2)
>>> mp = MultiPolygon([p1, p2])
cascaded_union

Возвращает Polygon, который является объединением всех полигонов-компонентов в этой коллекции. Использованный алгоритм значительно эффективнее (быстрее), чем попытка объединения геометрий по отдельности. [2]

GeometryCollection

class GeometryCollection(*args, **kwargs) [source]

Объекты GeometryCollection могут быть созданы, передав один или несколько других GEOSGeometry в качестве аргументов или один последовательность объектов GEOSGeometry:

>>> poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) )
>>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly)
>>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))

Подготовленные геометрии

Для получения подготовленной геометрии просто обратитесь к свойству 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

class PreparedGeometry

Все методы PreparedGeometry принимают аргумент other, который должен быть экземпляром GEOSGeometry.

contains(other)
contains_properly(other)
covers(other)
crosses(other)

Примечание

Для использования этого предиката требуется GEOS 3.3.

disjoint(other)

Примечание

Для использования этого предиката требуется GEOS 3.3.

intersects(other)
overlaps(other)

Примечание

Для использования этого предиката требуется GEOS 3.3.

touches(other)

Примечание

Для использования этого предиката требуется GEOS 3.3.

within(other)

Примечание

Для использования этого предиката требуется GEOS 3.3.

Фабрики геометрий

fromfile(file_h) [source]
Параметры: file_h (объект Python file или путь к файлу в виде строки) – входной файл, содержащий пространственные данные
Возвращаемое значение: экземпляр GEOSGeometry, соответствующий пространственным данным в файле

Пример:

>>> from django.contrib.gis.geos import fromfile
>>> g = fromfile('/home/bob/geom.wkt')
fromstr(string, srid=None) [source]
Параметры:
  • string (string) – строка, содержащая пространственные данные
  • 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 [source]

Пример:

>>> from django.contrib.gis.geos import WKBReader
>>> wkb_r = WKBReader()
>>> wkb_r.read('0101000000000000000000F03F000000000000F03F')
<Point object at 0x103a88910>
class WKTReader [source]

Пример:

>>> from django.contrib.gis.geos import WKTReader
>>> wkt_r = WKTReader()
>>> wkt_r.read('POINT(1 1)')
<Point object at 0x103a88b50>

Объекты записи

Все объекты записи имеют метод write(geom), который возвращает либо WKB, либо WKT заданной геометрии. Кроме того, объекты WKBWriter также имеют свойства, которые могут использоваться для изменения порядка байтов и/или включения значения SRID (другими словами, EWKB).

class WKBWriter [source]

WKBWriter предоставляет наибольший контроль над выводом. По умолчанию он возвращает соответствующий OGC WKB, когда вызывается метод write. Однако, он имеет свойства, которые позволяют создавать EWKB, надстройку над стандартом WKB, включающую дополнительную информацию.

WKBWriter.write(geom) [source]

Возвращает WKB заданной геометрии как объект Python buffer. Пример:

>>> from django.contrib.gis.geos import Point, WKBWriter
>>> pnt = Point(1, 1)
>>> wkb_w = WKBWriter()
>>> wkb_w.write(pnt)
<read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
WKBWriter.write_hex(geom) [source]

Возвращает WKB геометрии в шестнадцатеричном формате. Пример:

>>> from django.contrib.gis.geos import Point, WKBWriter
>>> pnt = Point(1, 1)
>>> wkb_w = WKBWriter()
>>> wkb_w.write_hex(pnt)
'0101000000000000000000F03F000000000000F03F'
WKBWriter.byteorder

Это свойство может быть установлено для изменения порядка байтов представления геометрии.

Значение порядка байтов Описание
0 Большой порядок байтов (например, совместимо с системами RISC)
1 Маленький порядок байтов (например, совместимо с системами x86)

Пример:

>>> from django.contrib.gis.geos import Point, WKBWriter
>>> wkb_w = WKBWriter()
>>> pnt = Point(1, 1)
>>> wkb_w.write_hex(pnt)
'0101000000000000000000F03F000000000000F03F'
>>> wkb_w.byteorder = 0
'00000000013FF00000000000003FF0000000000000'
WKBWriter.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'
WKBWriter.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 [source]
WKTWriter.write(geom) [source]

Возвращает WKT заданной геометрии. Пример:

>>> from django.contrib.gis.geos import Point, WKTWriter
>>> pnt = Point(1, 1)
>>> wkt_w = WKTWriter()
>>> wkt_w.write(pnt)
'POINT (1.0000000000000000 1.0000000000000000)'

Примечания

[1] См. PostGIS EWKB, EWKT и канонические формы, документация PostGIS по гл. 4.1.2.
[2] Для получения дополнительной информации прочтите пост в блоге Пола Рэмси о (Значительно) более быстрых объединениях в PostGIS 1.4 и пост Мартина Дэвиса о Быстрое слияние полигонов в JTS с использованием каскадного объединения.

Настройки

GEOS_LIBRARY_PATH

Строка, указывающая расположение библиотеки C GEOS. Обычно эта настройка используется только в том случае, если библиотека GEOS C находится в нестандартном расположении (например, /home/bob/lib/libgeos_c.so).

Примечание

Настройка должна содержать полный путь к общей библиотеке C; другими словами, вам нужно использовать libgeos_c.so, а не libgeos.so.

Исключения

exception GEOSException [source]

Базовое исключение GEOS, указывает на ошибку, связанную с GEOS.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.9/ref/contrib/gis/geos/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API