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]]Если у слоя нет связанной информации о пространственной ссылке, возвращается
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()
Возвращает значение поля как 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,buffer, содержащим данные WKB, или объектомOGRGeomType. Эти объекты также возвращаются атрибутомFeature.geomпри чтении векторных данных изLayer(который, в свою очередь, является частьюDataSource).-
classmethod from_gml(gml_string)
Создаёт объект
OGRGeometryиз заданной строки GML.-
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) -
Этот класс позволяет представлять тип 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) -
Представляет структуру 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)
-
Системы координат
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
Raster Data Objects
GDALRaster
GDALRaster — это оболочка для объекта источника растрового изображения GDAL, который поддерживает чтение данных из различных поддерживаемых GDAL геопространственных форматов и источников данных с помощью согласованного интерфейса. Каждый источник данных представлен объектом GDALRaster, который содержит один или несколько слоев данных, называемых полосами. Каждая полоса, представленная объектом GDALBand, содержит геореференцированные данные изображения. Например, изображение RGB представлено тремя полосами: одной для красного, одной для зеленого и одной для синего.
Примечание
Для растровых данных нет разницы между экземпляром растра и его источником данных. В отличие от объектов геометрии, объекты GDALRaster всегда являются источником данных. Временные растры могут быть созданы в памяти с помощью соответствующего драйвера, но они будут того же класса, что и основанные на файлах растровые источники.
-
class GDALRaster(ds_input, write=False)
-
Конструктор
GDALRasterпринимает два параметра. Первый параметр определяет источник растрового изображения, а второй — режим открытия растра (чтение или запись). Для вновь созданных растров второй параметр игнорируется, и новый растр всегда создаётся в режиме записи.Первый параметр может принимать три формы: строку, представляющую путь к файлу; словарь с значениями, определяющими новый растр; или байтовый объект, представляющий файл растрового изображения.
Если входной параметр — путь к файлу, растр открывается из этого файла. Если вход — сырые данные в словаре, необходимы параметры
width,height, иsrid. Если вход — байтовый объект, он будет открыт с использованием виртуальной файловой системы GDAL.Подробное описание создания растров с использованием входных данных в виде словаря см. в разделе Создание растров из данных. Подробное описание создания растров в виртуальной файловой системе см. в разделе Использование виртуальной файловой системы GDAL.
Следующий пример демонстрирует создание растров из различных источников (используя примерные данные из тестов 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({ # Creates an in-memory raster ... 'srid': 4326, ... 'width': 4, ... 'height': 4, ... 'datatype': 1, ... 'bands': [{ ... 'data': (2, 3), ... 'offset': (1, 1), ... 'size': (2, 2), ... 'shape': (2, 1), ... 'nodata_value': 5, ... }] ... }) >>> rst.srs.srid 4326 >>> rst.width, rst.height (4, 4) >>> rst.bands[0].data() array([[5, 5, 5, 5], [5, 2, 3, 5], [5, 2, 3, 5], [5, 5, 5, 5]], dtype=uint8) >>> rst_file = open('/path/to/your/raster.tif', 'rb') >>> rst_bytes = rst_file.read() >>> rst = GDALRaster(rst_bytes) >>> rst.is_vsi_based True >>> rst.name # Stored in a random path in the vsimem filesystem. '/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'-
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
-
srid -
Идентификатор системы пространственной привязки (SRID) растра. Это свойство является сокращением для получения или установки SRID через атрибут
srs.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.srid 4326 >>> rst.srid = 3086 >>> rst.srid 3086 >>> rst.srs.srid # This is equivalent 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аналогично соответствующему аргументу конструктора класса. Это словарь с характеристиками целевого растра. Разрешенные ключи словаря: ширина, высота, SRID, начало, масштаб, наклон, тип данных, драйвер и имя (имя файла).По умолчанию функция warp сохраняет большинство параметров равными значениям параметров исходного растра, поэтому нужно указать только те параметры, которые нужно изменить. Обратите внимание, что это включает в себя драйвер, поэтому для растров на основе файлов функция 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.
Эта функция преобразует текущий растр в новую систему пространственной привязки, которую можно указать с помощью
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]
-
info -
Возвращает строку со сводкой растра. Это эквивалентно утилите командной строки gdalinfo.
-
metadata -
Метаданные этого растра, представленные в виде вложенного словаря. Ключ первого уровня — область метаданных. Второй уровень содержит имена и значения элементов метаданных из каждой области.
Для установки или обновления элемента метаданных передайте соответствующий элемент метаданных в метод, используя вложенную структуру, описанную выше. Обновляются только ключи, присутствующие в указанном словаре; остальные метаданные остаются неизменными.
Для удаления элемента метаданных используйте
Noneв качестве значения метаданных.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.metadata {} >>> rst.metadata = {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}} >>> rst.metadata {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}} >>> rst.metadata = {'DEFAULT': {'OWNER': None, 'VERSION': '2.0'}} >>> rst.metadata {'DEFAULT': {'VERSION': '2.0'}}
-
vsi_buffer -
Представление
bytesэтого растра. ВозвращаетNoneдля растров, которые не хранятся в виртуальной файловой системе GDAL.
-
-
is_vsi_based -
Булево значение, указывающее, хранится ли этот растр в виртуальной файловой системе GDAL.
-
GDALBand
-
class GDALBand -
Экземпляры класса
GDALBandне создаются явно, а вместо этого получаются из объектаGDALRasterчерез его атрибутbands. Объекты GDALBand содержат фактические значения пикселей растра.-
description -
Название или описание полосы, если таковое имеется.
-
width -
Ширина полосы в пикселях (ось X).
-
height -
Высота полосы в пикселях (ось Y).
-
pixel_count -
Общее количество пикселей в этой полосе. Равно
width * height.
-
statistics(refresh=False, approximate=False) -
Вычисление статистики по значениям пикселей этой полосы. Возвращаемое значение — кортеж со следующей структурой:
(minimum, maximum, mean, standard deviation).Если аргумент
approximateустановлен в значениеTrue, статистика может быть вычислена на основе представлений или подмножества тайлов изображения.Если аргумент
refreshустановлен в значениеTrue, статистика будет вычислена непосредственно из данных, и кэш будет обновлён результатом.Если значение в кэше найдено, возвращается это значение. Для форматов растров, использующих сервисы постоянных вспомогательных метаданных (PAM), статистика может быть кэширована в вспомогательном файле. В некоторых случаях эти метаданные могут быть не синхронизированы со значениями пикселей, или может быть возвращено значение из предыдущего вызова, которое не отражает значение аргумента
approximate. В таких случаях используйте аргументrefreshдля получения обновлённых значений и их сохранения в кэше.Для пустых полос (где все значения пикселей — «нет данных»), все значения статистики возвращаются как
None.Статистику также можно получить напрямую, обратившись к свойствам
min,max,meanиstd.
-
min -
Минимальное значение пикселя в полосе (исключая значение «нет данных»).
-
max -
Максимальное значение пикселя в полосе (исключая значение «нет данных»).
-
mean -
Среднее значение всех значений пикселей в полосе (исключая значение «нет данных»).
-
std -
Стандартное отклонение всех значений пикселей в полосе (исключая значение «нет данных»).
-
nodata_value -
Значение «нет данных» для полосы обычно представляет собой специальное маркерное значение, используемое для обозначения пикселей, которые не являются действительными данными. Такие пиксели обычно не должны отображаться и не должны участвовать в операциях анализа.
Для удаления существующего значения «нет данных» установите это свойство в
None(требуется GDAL ≥ 2.1).
-
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.
-
color_interp(as_string=False) -
Интерпретация цвета для полосы, как целое число от 0 до 16. Если
as_stringравноTrue, тип данных возвращается как строка со следующими возможными значениями:GCI_Undefined,GCI_GrayIndex,GCI_PaletteIndex,GCI_RedBand,GCI_GreenBand,GCI_BlueBand,GCI_AlphaBand,GCI_HueBand,GCI_SaturationBand,GCI_LightnessBand,GCI_CyanBand,GCI_MagentaBand,GCI_YellowBand,GCI_BlackBand,GCI_YCbCr_YBand,GCI_YCbCr_CbBand, иGCI_YCbCr_CrBand.GCI_YCbCr_CrBandтакже представляетGCI_Max, поскольку оба соответствуют целому числу 16, но толькоGCI_YCbCr_CrBandвозвращается в виде строки.
-
data(data=None, offset=None, size=None, shape=None) -
Доступ к значениям пикселей
GDALBand. Возвращает полную массив данных, если параметры не предоставлены. Подмножество массива пикселей можно запросить, указав смещение и размер блока в виде кортежей.Если NumPy доступен, данные возвращаются как массив NumPy. Из соображений производительности рекомендуется использовать NumPy.
Данные записываются в
GDALBand, если предоставлен параметрdata. Входные данные могут быть одного из следующих типов: упакованная строка, буфер, список, массив и массив NumPy. Количество элементов ввода обычно должно соответствовать общему количеству пикселей в полосе или количеству пикселей для конкретного блока значений пикселей, если предоставлены параметрыoffsetиsize.Если количество элементов ввода отличается от целевого блока пикселей, необходимо указать параметр
shape. Форма представляет собой кортеж, определяющий ширину и высоту входных данных в пикселях. Затем данные дублируются для обновления значений пикселей выбранного блока. Это полезно для заполнения всей полосы одним значением, например.Например:
>>> 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) >>> bnd.data([1], shape=(1, 1)) >>> bnd.data() array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], dtype=uint8) >>> bnd.data(range(4), shape=(1, 4)) array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], dtype=uint8)
-
metadata -
Метаданные этой полосы. Функциональность идентична
GDALRaster.metadata.
-
Создание растров из данных
В этом разделе описывается, как создавать растры с нуля, используя параметр ds_input.
Новый растр создаётся, когда в конструктор GDALRaster передаётся словарь. Словарь содержит определяющие параметры нового растра, такие как начало, размер или пространственная система координат. Словарь также может содержать данные пикселей и информацию о формате нового растра. В результате растр может быть файловым или основанным на памяти, в зависимости от указанного драйвера.
Нет стандарта описания данных растра в словаре или формате JSON. Поэтому определение входного словаря для класса GDALRaster специфично для Django. Оно вдохновлено форматом geojson, но стандарт geojson в настоящее время ограничен векторными форматами.
Примеры использования различных ключей при создании растров можно найти в документации соответствующих атрибутов и методов классов GDALRaster и GDALBand.
Словарь ds_input
Для создания растра в словаре ds_input требуются только несколько ключей: width, height, и srid. Все остальные параметры имеют значения по умолчанию (см. таблицу ниже). Список ключей, которые можно передать в словаре ds_input , тесно связан, но не идентичен свойствам класса GDALRaster. Многие параметры непосредственно отображаются на этих свойствах; остальные описаны ниже.
В следующей таблице описаны все ключи, которые можно установить в словаре ds_input.
| Ключ | Значение по умолчанию | Использование |
|---|---|---|
srid | обязательно | Сопоставлено с атрибутом srid |
width | обязательно | Сопоставлено с атрибутом width |
height | обязательно | Сопоставлено с атрибутом height |
driver | MEM | Сопоставлено с атрибутом driver |
name | '' | См. ниже |
origin | 0 | Сопоставлено с атрибутом origin |
scale | 0 | Сопоставлено с атрибутом scale |
skew | 0 | Сопоставлено с атрибутом width |
bands | [] | См. ниже |
nr_of_bands | 0 | См. ниже |
datatype | 6 | См. ниже |
papsz_options | {} | См. ниже |
-
name -
Строка, представляющая имя растра. При создании растра на основе файла этот параметр должен содержать путь к файлу нового растра. Если имя начинается с
/vsimem/, растр создается в виртуальной файловой системе GDAL.
-
datatype -
Целое число, представляющее тип данных для всех полос. По умолчанию
6(Float32). Все полосы нового растра должны иметь один и тот же тип данных. Сопоставление значений:Значение Тип пикселей GDAL Описание 1 GDT_Byte Восьмибитное беззнаковое целое число 2 GDT_UInt16 Шестнадцатибитное беззнаковое целое число 3 GDT_Int16 Шестнадцатибитное знаковое целое число 4 GDT_UInt32 Тридцатидвухбитное беззнаковое целое число 5 GDT_Int32 Тридцатидвухбитное знаковое целое число 6 GDT_Float32 Тридцатидвухбитное число с плавающей точкой 7 GDT_Float64 Шестидесятичетырехбитное число с плавающей точкой
-
nr_of_bands -
Целое число, представляющее количество полос растра. Растр можно создать без передачи данных полос при создании. Если количество полос не указано, оно автоматически вычисляется по длине входных данных
bands. Количество полос изменить после создания нельзя.
-
bands -
Список словарей
band_inputс входными данными полос. Полученные индексы полос совпадают с указанными в списке. Определение словаря входных данных полос приведено ниже. Если данные полос не предоставлены, значения полос растра инициализируются массивом нулей, а значение «нет данных» устанавливается вNone.
-
papsz_options -
Словарь с параметрами создания растра. Пара-значение входного словаря передаются драйверу при создании растра.
Доступные параметры зависят от драйвера и описаны в документации каждого драйвера.
Значения в словаре не чувствительны к регистру и автоматически преобразуются в правильный строковый формат при создании.
В приведенном примере используются некоторые параметры, доступные для драйвера GTiff. Результатом является сжатый знаковый растр байт с внутренней схемой разбиения на блоки. Внутренние блоки имеют размер 23 на 23:
>>> GDALRaster({ ... 'driver': 'GTiff', ... 'name': '/path/to/new/file.tif', ... 'srid': 4326, ... 'width': 255, ... 'height': 255, ... 'nr_of_bands': 1, ... 'papsz_options': { ... 'compress': 'packbits', ... 'pixeltype': 'signedbyte', ... 'tiled': 'yes', ... 'blockxsize': 23, ... 'blockysize': 23, ... } ... })
Словарь входных данных полосы
Ключ bands в словаре ds_input представляет собой список словарей band_input. Каждый band_input словарь может содержать значения пикселей и значение «нет данных», которые необходимо установить для полос нового растра. Массив данных может иметь полный размер нового растра или быть меньше. Для массивов, меньших, чем полный растр, ключи size, shape, и offset управляют значениями пикселей. Соответствующие ключи передаются методу data(). Их функциональность такая же, как при установке данных полосы с помощью этого метода. В следующей таблице описаны используемые ключи.
| Ключ | Значение по умолчанию | Использование |
|---|---|---|
nodata_value | None | Сопоставлено с атрибутом nodata_value |
data | То же, что и nodata_value или 0
| Передаётся методу data() |
size | Размер растра | Передаётся методу data() |
shape | То же, что и размер | Передаётся методу data() |
offset | (0, 0) | Передаётся методу data() |
Использование виртуальной файловой системы GDAL
GDAL имеет внутреннюю файловую систему на основе памяти, позволяющую рассматривать блоки памяти как файлы. Она может использоваться для чтения и записи объектов GDALRaster в двоичные буферы файлов.
Это полезно в веб-контекстах, где растры могут быть получены в виде буфера из удаленного хранилища или возвращены из представления без записи на диск.
Объекты GDALRaster создаются в виртуальной файловой системе, когда в качестве входных данных предоставляется объект bytes, или когда путь к файлу начинается с /vsimem/.
Входные данные в виде bytes должны представлять полное двоичное представление файла. Например:
# Read a raster as a file object from a remote source.
>>> from urllib.request import urlopen
>>> dat = urlopen('http://example.com/raster.tif').read()
# Instantiate a raster from the bytes object.
>>> rst = GDALRaster(dat)
# The name starts with /vsimem/, indicating that the raster lives in the
# virtual filesystem.
>>> rst.name
'/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'
Чтобы создать новый виртуальный файл-растр с нуля, используйте представление словаря ds_input и укажите аргумент name, начинающийся с /vsimem/ (подробности о представлении словаря см. в разделе Создание растров из данных). Для растров на основе виртуальных файлов атрибут vsi_buffer возвращает представление bytes растра.
Вот как создать растр и вернуть его в виде файла в HttpResponse:
>>> from django.http import HttpResponse
>>> rst = GDALRaster({
... 'name': '/vsimem/temporarymemfile',
... 'driver': 'tif',
... 'width': 6, 'height': 6, 'srid': 3086,
... 'origin': [500000, 400000],
... 'scale': [100, -100],
... 'bands': [{'data': range(36), 'nodata_value': 99}]
... })
>>> HttpResponse(rast.vsi_buffer, 'image/tiff')
Настройки
GDAL_LIBRARY_PATH
Строка, определяющая расположение библиотеки GDAL. Обычно эта настройка используется только в том случае, если библиотека GDAL находится в нестандартном расположении (например, /home/john/lib/libgdal.so).
Исключения
-
exception GDALException -
Базовое исключение GDAL, указывающее на ошибку, связанную с GDAL.
-
exception SRSException -
Исключение, возникающее при возникновении ошибки при построении или использовании объекта пространственной системы координат.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.0/ref/contrib/gis/gdal/