GDAL API
GDAL означает Географическую библиотеку абстракции данных, и представляет собой настоящий «швейцарский армейский нож» для функций работы с данными ГИС. Подмножество GDAL — это библиотека OGR простых объектов, которая специализируется на чтении и записи векторных географических данных в различных стандартных форматах.
GeoDjango предоставляет высокоуровневый Python-интерфейс для некоторых возможностей OGR, включая чтение и преобразование координат векторных пространственных данных и минимальную поддержку функций GDAL для растровых (изображений) данных.
Примечание
Хотя модуль называется gdal, GeoDjango в настоящее время поддерживает только некоторые возможности OGR и растровых функций GDAL.
Обзор
Образцы данных
Инструменты GDAL/OGR, описанные здесь, предназначены для помощи в чтении ваших географических данных. Для того, чтобы большинство из них были полезны, вам необходимо иметь данные для работы. Если вы только начинаете и у вас ещё нет собственных данных, тесты GeoDjango содержат ряд простых наборов данных, которые вы можете использовать для тестирования. Вы можете загрузить их здесь:
$ wget https://raw.githubusercontent.com/django/django/master/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
$ wget https://raw.githubusercontent.com/django/django/master/tests/gis_tests/data/rasters/raster.tif
Объекты источников векторных данных
DataSource
DataSource — это оболочка для объекта источника данных OGR, которая поддерживает чтение данных из различных поддерживаемых OGR географических форматов файлов и источников данных с использованием простого и согласованного интерфейса. Каждый источник данных представлен объектом DataSource, который содержит один или несколько слоёв данных. Каждый слой, представленный объектом Layer, содержит определённое количество географических объектов (Feature), информацию о типе объектов, содержащихся в этом слое (например, точки, полигоны и т. д.), а также имена и типы любых дополнительных полей (Field) данных, которые могут быть связаны с каждым объектом в этом слое.
-
class DataSource(ds_input, encoding='utf-8') -
Конструктор для
DataSourceтребует только одного параметра: путь к файлу, который вы хотите прочитать. Однако OGR также поддерживает различные более сложные источники данных, включая базы данных, к которым можно получить доступ, передав строку специального имени вместо пути. Дополнительную информацию можно найти в документации по форматам OGR векторных данных. СвойствоnameэкземпляраDataSourceвозвращает имя OGR базового источника данных, который используется.Необязательный параметр
encodingпозволяет указать нестандартную кодировку строк в источнике. Это обычно полезно, когда вы получаетеDjangoUnicodeDecodeErrorисключения при чтении значений полей.После создания вашего
DataSource, вы можете узнать, сколько слоёв данных он содержит, обратившись к свойствуlayer_count, или (эквивалентно) используя функциюlen(). Сведения о доступе к самим слоям данных см. в следующем разделе:>>> from django.contrib.gis.gdal import DataSource >>> ds = DataSource('/path/to/your/cities.shp') >>> ds.name '/path/to/your/cities.shp' >>> ds.layer_count # This file only contains one layer 1-
layer_count
Возвращает количество слоёв в источнике данных.
-
name
Возвращает имя источника данных.
-
Layer
-
class Layer -
Layer— это оболочка для слоя данных в объектеDataSource. Вы никогда не создаёте объектLayerнапрямую. Вместо этого вы получаете их из объектаDataSource, который по сути является стандартным контейнером Python для объектовLayer. Например, вы можете получить доступ к определённому слою по его индексу (например,ds[0]для доступа к первому слою), или вы можете перебирать все слои в контейнере в циклеfor. СамLayerвыступает в роли контейнера для геометрических объектов.Как правило, все объекты в заданном слое имеют одинаковый тип геометрии. Свойство
geom_typeслоя — этоOGRGeomType, который идентифицирует тип объектов. Мы можем использовать его для вывода некоторой основной информации о каждом слое вDataSource:>>> for layer in ds: ... print('Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name)) ... Layer "cities": 3 PointsПример вывода получен из источника данных cities, загруженного выше, который, очевидно, содержит один слой, названный
"cities", который содержит три точечных объекта. Для простоты примеры ниже предполагают, что вы сохранили этот слой в переменнойlayer:>>> layer = ds[0]
-
name
Возвращает имя этого слоя в источнике данных.
>>> layer.name 'cities'
-
num_feat
Возвращает количество объектов в слое. Также как
len(layer):>>> layer.num_feat 3
-
geom_type
Возвращает тип геометрии слоя как объект
OGRGeomType:>>> layer.geom_type.name 'Point'
-
num_fields
Возвращает количество полей в слое, т.е. количество полей данных, связанных с каждым объектом в слое:
>>> layer.num_fields 4
-
fields
Возвращает список имён каждого поля в этом слое:
>>> layer.fields ['Name', 'Population', 'Density', 'Created']
Возвращает список типов данных каждого поля в этом слое. Эти типы являются подклассами
Field, обсуждаемыми ниже:>>> [ft.__name__ for ft in layer.field_types] ['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
-
field_widths
Возвращает список максимальных длин полей для каждого поля в этом слое:
>>> layer.field_widths [80, 11, 24, 10]
-
field_precisions
Возвращает список числовых точностей для каждого поля в этом слое. Для полей, не являющихся числовыми, это значение бессмысленно (и установлено в ноль):
>>> layer.field_precisions [0, 0, 15, 0]
-
extent
Возвращает пространственный охват этого слоя как объект
Envelope:>>> layer.extent.tuple (-104.609252, 29.763374, -95.23506, 38.971823)
-
srs
Свойство, которое возвращает связанную с этим слоем
SpatialReference:>>> print(layer.srs) GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]]Если у слоя
Layerнет связанной с ним информации о пространственной системе координат, возвращаетсяNone.-
spatial_filter
Свойство, которое можно использовать для извлечения или задания пространственного фильтра для этого слоя. Пространственный фильтр может быть установлен только с экземпляром
OGRGeometry, 4-кортежом охвата илиNone. При установке значения, отличного отNone, будут возвращены только объекты, пересекающие фильтр, при итерации по слою:>>> print(layer.spatial_filter) None >>> print(len(layer)) 3 >>> [feat.get('Name') for feat in layer] ['Pueblo', 'Lawrence', 'Houston'] >>> ks_extent = (-102.051, 36.99, -94.59, 40.00) # Extent for state of Kansas >>> layer.spatial_filter = ks_extent >>> len(layer) 1 >>> [feat.get('Name') for feat in layer] ['Lawrence'] >>> layer.spatial_filter = None >>> len(layer) 3-
get_fields()
Метод, который возвращает список значений заданного поля для каждого объекта в слое:
>>> layer.get_fields('Name') ['Pueblo', 'Lawrence', 'Houston']-
get_geoms(geos=False)
Метод, который возвращает список, содержащий геометрию каждого объекта в слое. Если необязательный аргумент
geosимеет значениеTrue, то геометрии преобразуются в объектыGEOSGeometry. В противном случае они возвращаются как объектыOGRGeometry:>>> [pt.tuple for pt in layer.get_geoms()] [(-104.609252, 38.255001), (-95.23506, 38.971823), (-95.363151, 29.763374)]
-
test_capability(capability)
Возвращает булево значение, указывающее, поддерживает ли этот слой заданную возможность (строку). Примеры допустимых строк возможностей включают:
'RandomRead','SequentialWrite','RandomWrite','FastSpatialFilter','FastFeatureCount','FastGetExtent','CreateField','Transactions','DeleteFeature', и'FastSetNextByIndex'. -
Feature
-
class Feature -
Featureоборачивает объект OGR-признака. Вы никогда не создаёте объектFeatureнапрямую. Вместо этого, вы получаете их из объектаLayer. Каждый признак состоит из геометрии и набора полей, содержащих дополнительные свойства. Геометрию поля можно получить через свойствоgeom, которое возвращает объектOGRGeometry. ОбъектFeatureведет себя как стандартный контейнер Python для своих полей, которые он возвращает как объектыField: вы можете получить доступ к полю напрямую по его индексу или имени, или вы можете перебирать поля признака, например, в циклеfor.-
geom
Возвращает геометрию для данного признака, как объект
OGRGeometry:>>> city.geom.tuple (-104.609252, 38.255001)
-
get
Метод, возвращающий значение заданного поля (указанного по имени) для данного признака, не объект-обёртку
Field:>>> city.get('Population') 102121-
geom_type
Возвращает тип геометрии для данного признака, как объект
OGRGeomType. Он будет одинаковым для всех признаков в данном слое и эквивалентен свойствуLayer.geom_typeобъектаLayer, из которого был получен признак.-
num_fields
Возвращает количество полей данных, связанных с признаком. Оно будет одинаковым для всех признаков в данном слое и эквивалентно свойству
Layer.num_fieldsобъектаLayer, из которого был получен признак.-
fields
Возвращает список имён полей данных, связанных с признаком. Оно будет одинаковым для всех признаков в данном слое и эквивалентно свойству
Layer.fieldsобъектаLayer, из которого был получен признак.-
fid
Возвращает идентификатор признака внутри слоя:
>>> city.fid 0
-
layer_name
Возвращает имя
Layer, из которого был получен признак. Оно будет одинаковым для всех признаков в данном слое:>>> city.layer_name 'cities'
-
index
Метод, возвращающий индекс заданного имени поля. Оно будет одинаковым для всех признаков в данном слое:
>>> city.index('Population') 1 -
Field
-
class Field -
-
name
Возвращает имя данного поля:
>>> city['Name'].name 'Name'
-
type
Возвращает тип OGR данного поля, как целое число. Словарь
FIELD_CLASSESсопоставляет эти значения подклассамField:>>> city['Density'].type 2
-
type_name
Возвращает строку с именем типа данных этого поля:
>>> city['Name'].type_name 'String'
-
value
Возвращает значение данного поля. Сам класс
Fieldвозвращает значение в виде строки, но каждый подкласс возвращает значение в наиболее подходящей форме:>>> city['Population'].value 102121
-
width
Возвращает ширину этого поля:
>>> city['Name'].width 80
-
precision
Возвращает числовую точность этого поля. Она не имеет смысла (и равна нулю) для полей, не являющихся числовыми:
>>> city['Density'].precision 15
-
as_double()
Возвращает значение поля как двойное (float):
>>> city['Density'].as_double() 874.7
-
as_int()
Возвращает значение поля как целое число:
>>> city['Population'].as_int() 102121
-
as_string()
Возвращает значение поля как строку:
>>> city['Name'].as_string() 'Pueblo'
-
as_datetime()
Возвращает значение поля как кортеж из компонентов даты и времени:
>>> city['Created'].as_datetime() (c_long(1999), c_long(5), c_long(23), c_long(0), c_long(0), c_long(0), c_long(0))
-
Driver
-
class Driver(dr_input) -
Класс
Driverиспользуется для внутреннего обертывания драйвера OGRDataSource.-
driver_count
Возвращает количество зарегистрированных в настоящее время драйверов OGR векторных данных.
-
OGR Геометрии
OGRGeometry
OGRGeometry объекты обладают схожей функциональностью с GEOSGeometry объектами и являются тонкими обёртками вокруг внутренней геометрической структуры OGR. Таким образом, они обеспечивают более эффективный доступ к данным при использовании DataSource. В отличие от своего аналога GEOS, OGRGeometry поддерживает системы пространственных координат и преобразование координат:
>>> from django.contrib.gis.gdal import OGRGeometry
>>> polygon = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5))')
-
class OGRGeometry(geom_input, srs=None)
-
Этот объект является оболочкой для класса OGR Geometry. Эти объекты создаются непосредственно из заданного параметра
geom_input, который может быть строкой, содержащей WKT, HEX, GeoJSON, abuffer, содержащим данные WKB, или объектомOGRGeomType. Эти объекты также возвращаются атрибутомFeature.geomпри чтении векторных данных изLayer(который, в свою очередь, является частьюDataSource).-
classmethod from_bbox(bbox)
Создаёт
Polygonиз заданного прямоугольника обрамления (4-кортежа).-
__len__()
Возвращает количество точек в
LineString, количество колец вPolygonили количество геометрий вGeometryCollection. Не применимо к другим типам геометрий.-
__iter__()
Итерируется по точкам в
LineString, кольцам вPolygonили геометриям вGeometryCollection. Не применимо к другим типам геометрий.-
__getitem__()
Возвращает точку по указанному индексу для
LineString, внутреннее кольцо по указанному индексу дляPolygonили геометрию по указанному индексу вGeometryCollection. Не применимо к другим типам геометрий.-
dimension
Возвращает количество координатных измерений геометрии, т.е. 0 для точек, 1 для линий и так далее:
>> polygon.dimension 2
-
coord_dim
Возвращает или задаёт размерность координат этой геометрии. Например, значение будет 2 для двумерных геометрий.
-
geom_count
Возвращает количество элементов в этой геометрии:
>>> polygon.geom_count 1
-
point_count
Возвращает количество точек, используемых для описания этой геометрии:
>>> polygon.point_count 4
-
num_points
Псевдоним для
point_count.-
num_coords
Псевдоним для
point_count.-
geom_type
Возвращает тип этой геометрии в виде объекта
OGRGeomType.-
geom_name
Возвращает имя типа этой геометрии:
>>> polygon.geom_name 'POLYGON'
-
area
Возвращает площадь этой геометрии или 0 для геометрий, которые не содержат площади:
>>> polygon.area 25.0
-
envelope
Возвращает прямоугольник обрамления этой геометрии как объект
Envelope.-
extent
Возвращает прямоугольник обрамления этой геометрии как 4-кортеж, а не как объект
Envelope:>>> point.extent (0.0, 0.0, 5.0, 5.0)
-
srs
Этот параметр управляет пространственной системой координат для этой геометрии или
None, если ей не была назначена пространственная система координат. Если задано, доступ к этому свойству возвращает объектSpatialReference. Его можно установить с помощью другого объектаSpatialReferenceили любого ввода, которыйSpatialReferenceпринимает. Пример:>>> city.geom.srs.name 'GCS_WGS_1984'
-
srid
Возвращает или задаёт идентификатор пространственной системы координат, соответствующий
SpatialReferenceэтой геометрии. ВозвращаетNone, если нет пространственной ссылки, связанной с этой геометрией, или если SRID нельзя определить.-
geos
Возвращает объект
GEOSGeometry, соответствующий этой геометрии.-
gml
Возвращает строковое представление этой геометрии в формате GML:
>>> OGRGeometry('POINT(1 2)').gml '<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'-
hex
Возвращает строковое представление этой геометрии в формате HEX WKB:
>>> OGRGeometry('POINT(1 2)').hex '0101000000000000000000F03F0000000000000040'-
json
Возвращает строковое представление этой геометрии в формате JSON:
>>> OGRGeometry('POINT(1 2)').json '{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'-
kml
Возвращает строковое представление этой геометрии в формате KML.
-
wkb_size
Возвращает размер буфера WKB, необходимого для хранения представления WKB этой геометрии:
>>> OGRGeometry('POINT(1 2)').wkb_size 21-
wkb
Возвращает
buffer, содержащий представление WKB этой геометрии.-
wkt
Возвращает строковое представление этой геометрии в формате WKT.
-
ewkt
Возвращает представление EWKT этой геометрии.
-
clone()
Возвращает новый клон
OGRGeometryэтого объекта геометрии.-
close_rings()
Если в этой геометрии есть какие-либо кольца, которые не были закрыты, эта процедура закроет их, добавив начальную точку в конец:
>>> triangle = OGRGeometry('LINEARRING (0 0,0 1,1 0)') >>> triangle.close_rings() >>> triangle.wkt 'LINEARRING (0 0,0 1,1 0,0 0)'-
transform(coord_trans, clone=False)
Преобразует эту геометрию в другую систему пространственных координат. Может принять объект
CoordTransform, объектSpatialReferenceили любой другой ввод, принимаемыйSpatialReference(включая WKT и PROJ.4 строки пространственной системы координат или целое число SRID). По умолчанию ничего не возвращается, и геометрия преобразуется на месте. Однако, если ключевое словоcloneустановлено в значениеTrue, возвращается преобразованный клон этой геометрии вместо этого.-
intersects(other)
Возвращает
True, если эта геометрия пересекается с другой, в противном случае возвращаетFalse.-
equals(other)
Возвращает
True, если эта геометрия эквивалентна другой, в противном случае возвращаетFalse. -
-
disjoint(other)
Возвращает
True, если эта геометрия пространственно не пересекается с другой (т. е. не пересекается), в противном случае возвращаетFalse.-
touches(other)
Возвращает
True, если эта геометрия касается другой, в противном случае возвращаетFalse.-
crosses(other)
Возвращает
True, если эта геометрия пересекает другую, в противном случае возвращаетFalse.-
within(other)
Возвращает
True, если эта геометрия содержится внутри другой, в противном случае возвращаетFalse.-
contains(other)
Возвращает
True, если эта геометрия содержит другую, в противном случае возвращаетFalse.-
overlaps(other)
Возвращает
True, если эта геометрия перекрывается с другой, в противном случае возвращаетFalse.-
boundary()
Граница этой геометрии, как новый объект
OGRGeometry.-
convex_hull
Наименьший выпуклый многоугольник, содержащий эту геометрию, как новый объект
OGRGeometry.-
difference()
Возвращает область, состоящую из разницы между этой геометрией и другой, как новый объект
OGRGeometry.-
intersection()
Возвращает область, состоящую из пересечения этой геометрии и другой, как новый объект
OGRGeometry.-
sym_difference()
Возвращает область, состоящую из симметрической разницы между этой геометрией и другой, как новый объект
OGRGeometry.-
union()
Возвращает область, состоящую из объединения этой геометрии и другой, как новый объект
OGRGeometry.-
tuple
Возвращает координаты геометрии точки как кортеж, координаты геометрии линии как кортеж кортежей и так далее:
>>> OGRGeometry('POINT (1 2)').tuple (1.0, 2.0) >>> OGRGeometry('LINESTRING (1 2,3 4)').tuple ((1.0, 2.0), (3.0, 4.0))-
coords
Псевдоним для
tuple.-
-
class Point -
-
x
Возвращает координату X этой точки:
>>> OGRGeometry('POINT (1 2)').x 1.0-
y
Возвращает координату Y этой точки:
>>> OGRGeometry('POINT (1 2)').y 2.0-
z
Возвращает координату Z этой точки или
None, если у точки нет координаты Z:>>> OGRGeometry('POINT (1 2 3)').z 3.0 -
-
class LineString -
-
x
Возвращает список координат X в этой линии:
>>> OGRGeometry('LINESTRING (1 2,3 4)').x [1.0, 3.0]-
y
Возвращает список координат Y в этой линии:
>>> OGRGeometry('LINESTRING (1 2,3 4)').y [2.0, 4.0]-
z
Возвращает список координат Z в этой линии или
None, если у линии нет координат Z:>>> OGRGeometry('LINESTRING (1 2 3,4 5 6)').z [3.0, 6.0] -
-
class Polygon -
-
shell
Возвращает контур или внешнюю петлю этого многоугольника в виде геометрии
LinearRing.-
exterior_ring
Псевдоним для
shell.-
centroid
Возвращает
Point, представляющую центр масс этого многоугольника. -
-
class GeometryCollection -
-
add(geom)
Добавляет геометрию в эту коллекцию геометрий. Не применимо к другим типам геометрий.
-
OGRGeomType
-
class OGRGeomType(type_input)[source] -
Этот класс позволяет представлять тип геометрии OGR несколькими способами:
>>> from django.contrib.gis.gdal import OGRGeomType >>> gt1 = OGRGeomType(3) # Using an integer for the type >>> gt2 = OGRGeomType('Polygon') # Using a string >>> gt3 = OGRGeomType('POLYGON') # It's case-insensitive >>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects True True-
name
Возвращает краткую строковую форму типа геометрии OGR:
>>> gt1.name 'Polygon'
-
num
Возвращает число, соответствующее типу геометрии OGR:
>>> gt1.num 3
-
django
Возвращает тип поля Django (подкласс GeometryField), используемый для хранения этого типа OGR, или
None, если нет соответствующего типа Django:>>> gt1.django 'PolygonField'
-
Envelope
-
class Envelope(*args)[source] -
Представляет структуру OGR Envelope, содержащую минимальные и максимальные координаты X, Y для прямоугольника области. Имена переменных совместимы со структурой OGR Envelope C.
-
min_x
Значение минимальной координаты X.
-
min_y
Значение максимальной координаты X.
-
max_x
Значение минимальной координаты Y.
-
max_y
Значение максимальной координаты Y.
-
ur
Координата верхнего правого угла в виде кортежа.
-
ll
Координата нижнего левого угла в виде кортежа.
-
tuple
Кортеж, представляющий область.
-
wkt
Строка, представляющая эту область в формате WKT.
-
expand_to_include(*args)[source]
-
Объекты систем координат
SpatialReference
-
class SpatialReference(srs_input) -
Объекты пространственной привязки инициализируются по заданному
srs_input, который может быть одним из следующих:- OGC Well Known Text (WKT) (строка)
- Код EPSG (целое число или строка)
- Строка PROJ.4
- Сокращенная строка для общеизвестных стандартов (
'WGS84','WGS72','NAD27','NAD83')
Пример:
>>> wgs84 = SpatialReference('WGS84') # shorthand string >>> wgs84 = SpatialReference(4326) # EPSG code >>> wgs84 = SpatialReference('EPSG:4326') # EPSG string >>> proj4 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ' >>> wgs84 = SpatialReference(proj4) # PROJ.4 string >>> wgs84 = SpatialReference("""GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]]""") # OGC WKT-
__getitem__(target)
Возвращает значение узла заданного строкового атрибута,
Noneесли узел не существует. Также может принимать кортеж в качестве параметра, (target, child), где child — индекс атрибута в WKT. Например:>>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]') >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326 >>> print(srs['GEOGCS']) WGS 84 >>> print(srs['DATUM']) WGS_1984 >>> print(srs['AUTHORITY']) EPSG >>> print(srs['AUTHORITY', 1]) # The authority value 4326 >>> print(srs['TOWGS84', 4]) # the fourth value in this wkt 0 >>> print(srs['UNIT|AUTHORITY']) # For the units authority, have to use the pipe symbol. EPSG >>> print(srs['UNIT|AUTHORITY', 1]) # The authority value for the units 9122
-
attr_value(target, index=0)
Значение атрибута для заданного целевого узла (например,
'PROJCS'). Ключевое слово index указывает индекс дочернего узла для возврата.-
auth_name(target)
Возвращает имя авторитета для заданного целевого узла типа строка.
-
auth_code(target)
Возвращает код авторитета для заданного целевого узла типа строка.
-
clone()
Возвращает копию (клон) этого объекта пространственной привязки.
-
identify_epsg()
Этот метод проверяет WKT этой SpatialReference и добавит узлы авторитета EPSG, где применимо идентификатор EPSG.
-
from_esri()
Преобразует эту SpatialReference из формата ESRI в EPSG
-
to_esri()
Преобразует эту SpatialReference в формат ESRI.
-
validate()
Проверяет, является ли заданная пространственная привязка действительной. Если нет, будет вызвано исключение.
-
import_epsg(epsg)
Импортировать пространственную привязку из кода EPSG.
-
import_proj(proj)
Импортировать пространственную привязку из строки PROJ.4.
-
import_user_input(user_input)
-
import_wkt(wkt)
Импортировать пространственную привязку из WKT.
-
import_xml(xml)
Импортировать пространственную привязку из XML.
-
name
Возвращает имя этой пространственной привязки.
-
srid
Возвращает SRID верхнего уровня авторитета или
Noneесли не определено.-
linear_name
Возвращает имя линейных единиц.
-
linear_units
Возвращает значение линейных единиц.
-
angular_name
Возвращает имя угловых единиц.
-
angular_units
Возвращает значение угловых единиц.
-
units
Возвращает кортеж из 2 элементов: значения и имени единиц, автоматически определяет, возвращать линейные или угловые единицы.
-
ellipsoid
Возвращает кортеж параметров эллипсоида для этой пространственной привязки: (большая полуось, малая полуось и обратная сплюснутость).
-
semi_major
Возвращает большую полуось эллипсоида для этой пространственной привязки.
-
semi_minor
Возвращает малую полуось эллипсоида для этой пространственной привязки.
-
inverse_flattening
Возвращает обратную сплюснутость эллипсоида для этой пространственной привязки.
-
geographic
Возвращает
Trueесли эта пространственная привязка географическая (корневой узелGEOGCS).-
local
Возвращает
Trueесли эта пространственная привязка локальная (корневой узелLOCAL_CS).-
projected
Возвращает
Trueесли эта пространственная привязка является проекционной системой координат (корневой узелPROJCS).-
wkt
Возвращает представление WKT этой пространственной привязки.
-
pretty_wkt
Возвращает «красивое» представление WKT.
-
proj
Возвращает представление PROJ.4 для этой пространственной привязки.
-
proj4
Псевдоним для
SpatialReference.proj.-
xml
Возвращает XML-представление этой пространственной привязки.
CoordTransform
-
class CoordTransform(source, target)
Представляет преобразование системы координат. Инициализируется двумя SpatialReference, представляющими соответственно исходную и целевую системы координат. Эти объекты следует использовать при многократном выполнении одного и того же преобразования координат на различных геометриях:
>>> ct = CoordTransform(SpatialReference('WGS84'), SpatialReference('NAD83'))
>>> for feat in layer:
... geom = feat.geom # getting clone of feature geometry
... geom.transform(ct) # transforming
Растровые объекты данных
GDALRaster
GDALRaster — оболочка для объекта растрового источника GDAL, которая поддерживает чтение данных из различных поддерживаемых GDAL геопространственных форматов и источников данных с помощью простого и согласованного интерфейса. Каждый источник данных представлен объектом GDALRaster, который содержит один или несколько слоёв данных, называемых полосами (bands). Каждая полоса, представленная объектом GDALBand, содержит геореференцированные данные изображения. Например, RGB-изображение представлено тремя полосами: одной для красного, одной для зелёного и одной для синего.
Примечание
Для растровых данных нет разницы между экземпляром растра и его источником данных. В отличие от объектов геометрии, объекты GDALRaster всегда являются источниками данных. Временные растры могут быть созданы в памяти с помощью соответствующего драйвера, но они будут того же класса, что и растры, основанные на файлах.
-
class GDALRaster(ds_input, write=False) -
Конструктор для
GDALRasterпринимает два параметра. Первый параметр определяет источник растра, это либо путь к файлу, либо пространственные данные со значениями, определяющими свойства нового растра (такие как размер и имя). Если вход — путь к файлу, второй параметр указывает, должен ли растр открываться с правами записи. Если вход — исходные данные, требуются параметрыwidth,height, иsrid. Следующий пример демонстрирует, как растры могут быть созданы из различных источников входных данных (используя примерные данные из тестов GeoDjango, см. также раздел Примерные данные):>>> from django.contrib.gis.gdal import GDALRaster >>> rst = GDALRaster('/path/to/your/raster.tif', write=False) >>> rst.name '/path/to/your/raster.tif' >>> rst.width, rst.height # This file has 163 x 174 pixels (163, 174) >>> rst = GDALRaster({'srid': 4326, 'width': 1, 'height': 2, 'datatype': 1 ... 'bands': [{'data': [0, 1]}]}) # Creates in-memory raster >>> rst.srs.srid 4326 >>> rst.width, rst.height (1, 2) >>> rst.bands[0].data() array([[0, 1]], dtype=int8)Теперь объекты
GDALRasterмогут быть созданы напрямую из исходных данных. Добавлены сеттеры для следующих свойств:srs,geotransform,origin,scale, иskew.-
name -
Имя источника, эквивалентное пути к входному файлу или имени, предоставленному при создании.
>>> GDALRaster({'width': 10, 'height': 10, 'name': 'myraster', 'srid': 4326}).name 'myraster'
-
driver -
Имя используемого драйвера GDAL для обработки входного файла. Для
GDALRaster, созданных из файла, тип драйвера определяется автоматически. Создание растров с нуля по умолчанию — это растр в памяти ('MEM'), но может быть изменено по мере необходимости. Например, используйтеGTiffдля файла типаGeoTiff. Список типов файлов см. также в списке Форматы растров GDAL.Растр в памяти создается следующим образом:
>>> GDALRaster({'width': 10, 'height': 10, 'srid': 4326}).driver.name 'MEM'Файловый растр GeoTiff создается следующим образом:
>>> import tempfile >>> rstfile = tempfile.NamedTemporaryFile(suffix='.tif') >>> rst = GDALRaster({'driver': 'GTiff', 'name': rstfile.name, 'srid': 4326, ... 'width': 255, 'height': 255, 'nr_of_bands': 1}) >>> rst.name '/tmp/tmp7x9H4J.tif' # The exact filename will be different on your computer >>> rst.driver.name 'GTiff'
-
width -
Ширина источника в пикселях (ось X).
>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).width 10
-
height -
Высота источника в пикселях (ось Y).
>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).height 20
-
srs -
Система пространственной привязки растра, как экземпляр
SpatialReference. Система пространственной привязки может быть изменена путем её задания на другойSpatialReferenceили предоставления любого ввода, принятого конструкторомSpatialReference.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.srs.srid 4326 >>> rst.srs = 3086 >>> rst.srs.srid 3086
-
geotransform -
Матрица аффинного преобразования, используемая для геопривязки источника, как кортеж из шести коэффициентов, отображающих координаты пикселя/строки в геопривязанное пространство с использованием следующего соотношения:
Xgeo = GT(0) + Xpixel*GT(1) + Yline*GT(2) Ygeo = GT(3) + Xpixel*GT(4) + Yline*GT(5)
Те же значения можно получить, обратившись к свойствам
origin(индексы 0 и 3),scale(индексы 1 и 5) иskew(индексы 2 и 4).По умолчанию
[0.0, 1.0, 0.0, 0.0, 0.0, -1.0].>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.geotransform [0.0, 1.0, 0.0, 0.0, 0.0, -1.0]
-
origin -
Координаты левого верхнего начала растра в системе пространственной привязки источника, как объект точки с
xиyчленами.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.origin [0.0, 0.0] >>> rst.origin.x = 1 >>> rst.origin [1.0, 0.0]
-
scale -
Ширина и высота пикселя, используемые для геопривязки растра, как объект точки с
xиyчленами. См.geotransformдля получения дополнительной информации.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.scale [1.0, -1.0] >>> rst.scale.x = 2 >>> rst.scale [2.0, -1.0]
-
skew -
Коэффициенты наклона, используемые для геопривязки растра, как объект точки с
xиyчленами. В случае изображений с направлением на север эти коэффициенты равны0.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.skew [0.0, 0.0] >>> rst.skew.x = 3 >>> rst.skew [3.0, 0.0]
-
extent -
Область (значения границ) источника растра, как кортеж из 4-х значений
(xmin, ymin, xmax, ymax)в системе пространственной привязки источника.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.extent (0.0, -20.0, 10.0, 0.0) >>> rst.origin.x = 100 >>> rst.extent (100.0, -20.0, 110.0, 0.0)
-
bands -
Список всех полос источника, как экземпляры
GDALBand.>>> rst = GDALRaster({"width": 1, "height": 2, 'srid': 4326, ... "bands": [{"data": [0, 1]}, {"data": [2, 3]}]}) >>> len(rst.bands) 2 >>> rst.bands[1].data() array([[ 2., 3.]], dtype=float32)
-
warp(ds_input, resampling='NearestNeighbour', max_error=0.0) -
Возвращает искаженную версию этого растра.
Параметры искажения могут быть указаны через аргумент
ds_input. Использованиеds_inputаналогично соответствующему аргументу конструктора класса. Это словарь с характеристиками целевого растра. Разрешенные значения ключей словаря — width, height, SRID, origin, scale, skew, datatype, driver и name (имя файла).По умолчанию функции искажения сохраняют большинство параметров равными значениям исходного растра, поэтому нужно указывать только те параметры, которые необходимо изменить. Обратите внимание, что это включает драйвер, поэтому для растров, основанных на файлах, функция warp создаст новый растр на диске.
Единственный параметр, который устанавливается иначе, чем в исходном растре, — это имя. Значение по умолчанию для имени растра — имя исходного растра, добавленное
'_copy' + source_driver_name. Для растров, основанных на файлах, рекомендуется указать путь к целевому растру.Алгоритм ресемплинга, используемый для искажения, можно указать с помощью аргумента
resampling. По умолчаниюNearestNeighbor, а другие разрешенные значения —Bilinear,Cubic,CubicSpline,Lanczos,Average, иMode.Аргумент
max_errorможно использовать для указания максимальной ошибки в пикселях входа, допустимой при приближенном вычислении преобразования. По умолчанию 0,0 для точных вычислений.Для пользователей, знакомых с
GDAL, эта функция имеет функциональность, аналогичную утилите командной строкиgdalwarp.Например, функция warp может использоваться для агрегации растра до удвоенного масштаба пикселя исходного растра:
>>> rst = GDALRaster({ ... "width": 6, "height": 6, "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}] ... }) >>> target = rst.warp({"scale": [200, -200], "width": 3, "height": 3}) >>> target.bands[0].data() array([[ 7., 9., 11.], [ 19., 21., 23.], [ 31., 33., 35.]], dtype=float32)
-
transform(srid, driver=None, name=None, resampling='NearestNeighbour', max_error=0.0) -
Возвращает преобразованную версию этого растра со заданной системой пространственной привязки.
Эта функция преобразует текущий растр в новую систему пространственной привязки, которая может быть задана с помощью
srid. Она вычисляет границы и масштаб текущего растра в новой системе пространственной привязки и искажает растр с использованием функцииwarp.По умолчанию используется драйвер исходного растра, а имя растра — оригинальное имя, дополненное
'_copy' + source_driver_name. Другой драйвер или имя можно указать с помощью аргументовdriverиname.Алгоритм ресемплинга по умолчанию —
NearestNeighbour, но может быть изменён с помощью аргументаresampling. Максимальная допустимая ошибка ресемплинга по умолчанию — 0,0 и может быть изменена с помощью аргументаmax_error. Обратитесь к документацииwarpза подробностями об этих аргументах.>>> rst = GDALRaster({ ... "width": 6, "height": 6, "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}] ... }) >>> target = rst.transform(4326) >>> target.origin [-82.98492744885776, 27.601924753080144]
-
GDALBand
-
class GDALBand -
Экземпляры класса
class GDALBandне создаются явно, а извлекаются из объектаGDALRasterчерез его атрибутbands. Объекты GDALBand содержат фактические значения пикселей растра.-
description -
Имя или описание полосы, если таковое имеется.
-
width -
Ширина полосы в пикселях (ось X).
-
height -
Высота полосы в пикселях (ось Y).
-
pixel_count -
Общее количество пикселей в этой полосе. Равно
width * height.
-
min -
Минимальное значение пикселя в полосе (исключая значение «нет данных»).
-
max -
Максимальное значение пикселя в полосе (исключая значение «нет данных»).
-
nodata_value -
Значение «нет данных» для полосы, обычно специальное маркерное значение, используемое для обозначения пикселей, которые не являются действительными данными. Такие пиксели, как правило, не должны отображаться и не должны участвовать в операциях анализа.
Теперь этот атрибут также можно задавать.
-
datatype(as_string=False) -
Тип данных в полосе, как целое число в диапазоне от 0 (Неизвестно) до 11. Если
as_stringимеет значениеTrue, тип данных возвращается как строка с возможными значениями:GDT_Unknown,GDT_Byte,GDT_UInt16,GDT_Int16,GDT_UInt32,GDT_Int32,GDT_Float32,GDT_Float64,GDT_CInt16,GDT_CInt32,GDT_CFloat32, иGDT_CFloat64.
-
data(data=None, offset=None, size=None) -
Доступ к значениям пикселей
GDALBand. Возвращает массив всех данных, если параметры не указаны. Подмножество массива пикселей можно получить, указав смещение и размер блока в виде кортежей.Если доступен NumPy, данные возвращаются в виде массива NumPy. Для повышения производительности рекомендуется использовать NumPy.
Данные записываются в
GDALBandесли предоставлен параметрdata. Входные данные могут быть одного из следующих типов: упакованная строка, буфер, список, массив и массив NumPy. Количество элементов ввода должно соответствовать общему количеству пикселей в полосе или количеству пикселей для конкретного блока значений пикселей, если заданы параметрыoffsetиsize.Например:
>>> rst = GDALRaster({'width': 4, 'height': 4, 'srid': 4326, 'datatype': 1, 'nr_of_bands': 1}) >>> bnd = rst.bands[0] >>> bnd.data(range(16)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(offset=(1, 1), size=(2, 2)) array([[ 5, 6], [ 9, 10]], dtype=int8) >>> bnd.data(data=[-1, -2, -3, -4], offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -1, -2, 7], [ 8, -3, -4, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(data='\x9d\xa8\xb3\xbe', offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -99, -88, 7], [ 8, -77, -66, 11], [ 12, 13, 14, 15]], dtype=int8)
-
Настройки
GDAL_LIBRARY_PATH
Строка, определяющая расположение библиотеки GDAL. Обычно эта настройка используется только в случае, если библиотека GDAL находится в нестандартном расположении (например, /home/john/lib/libgdal.so).
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.9/ref/contrib/gis/gdal/