Spec-Zone.ru › Django 1.8

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 внутри локальной области видимости ваших функций/методов.

Геометрии являются питоновскими

Объекты 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)

В то время как индексация на 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))

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

GEOSGeometry

class GEOSGeometry(geo_input, srid=None)
Параметры:
  • 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 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

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

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.

Примечание

Требуется GDAL.

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)

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

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 для этой геометрии и другой геометрии соответствуют заданному шаблону pattern — строке из девяти символов алфавита: {T, F, *, 0}.

GEOSGeometry.touches(other)

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

GEOSGeometry.within(other)

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

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

GEOSGeometry.buffer(width, quadsegs=8)

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

GEOSGeometry.difference(other)

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

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

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

Обратное значение GEOSGeometry.project().

GEOSGeometry.intersection(other)

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

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

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

Обратное значение GEOSGeometry.interpolate().

GEOSGeometry.relate(other)

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

GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False)

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

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

GEOSGeometry.sym_difference(other)

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

GEOSGeometry.union(other)

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

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

GEOSGeometry.boundary

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

GEOSGeometry.centroid

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

GEOSGeometry.convex_hull

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

GEOSGeometry.envelope

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

GEOSGeometry.point_on_surface

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

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

GEOSGeometry.area

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

GEOSGeometry.extent

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

GEOSGeometry.clone()

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

GEOSGeometry.distance(geom)

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

Примечание

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

GEOSGeometry.length

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

GEOSGeometry.prepared

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

GEOSGeometry.srs

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

Примечание

Требуется GDAL.

GEOSGeometry.transform(ct, clone=False)

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

Примечание

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

Point

class Point(x, y, z=None, srid=None)

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

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

LineString

class LineString(*args, **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)] )

LinearRing

class LinearRing(*args, **kwargs)

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

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

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

Polygon

class Polygon(*args, **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

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

Сравнение многоугольников

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

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

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

MultiPoint

class MultiPoint(*args, **kwargs)

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

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

MultiLineString

class MultiLineString(*args, **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.

MultiPolygon

class MultiPolygon(*args, **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])
cascaded_union

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

GeometryCollection

class GeometryCollection(*args, **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 о подготовленных геометриях http://trac.osgeo.org/geos/wiki/PreparedGeometry.

Например:

>>> 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)
Параметры: file_h (объект Python file или путь к файлу) – входной файл, содержащий пространственные данные
Тип возвращаемого значения: a GEOSGeometry, соответствующий пространственным данным в файле

Пример:

>>> from django.contrib.gis.geos import fromfile
>>> g = fromfile('/home/bob/geom.wkt')
fromstr(string, srid=None)
Параметры:
  • string (string) – строка, содержащая пространственные данные
  • srid (int) – идентификатор пространственной системы координат
Тип возвращаемого значения:

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).

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

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

WKBWriter.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>
WKBWriter.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'
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
WKTWriter.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)'

Примечания

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

Настройки

GEOS_LIBRARY_PATH

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

Примечание

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

Исключения

exception GEOSException

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

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

Spec-Zone.ru

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