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 Vector Formats. Свойство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", содержащий три точки. Для простоты, в примерах ниже предполагается, что вы сохранили этот слой в переменной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
Растровые данные
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'Изменено в Django 2.0:Добавлена возможность чтения и записи растров в виртуальной файловой системе памяти GDAL. Объекты
GDALRasterтеперь могут преобразовываться в двоичные данные и обратно в памяти.-
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аналогично соответствующему аргументу конструктора класса. Это словарь с характеристиками целевого растра. Допустимые значения ключей словаря: width, height, SRID, origin, scale, skew, datatype, driver и name (имя файла).По умолчанию функции 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 -
Добавлена в Django 2.0.
Возвращает строку со сводкой растра. Это эквивалентно командной утилите gdalinfo.
-
metadata -
Добавлена в Django 2.0.
Метаданные этого растра, представленные в виде вложенного словаря. Ключ первого уровня — домен метаданных. Второй уровень содержит имена и значения метаданных из каждого домена.
Чтобы установить или обновить элемент метаданных, передайте соответствующий элемент метаданных в метод, используя вложенную структуру, описанную выше. Обновляются только ключи, присутствующие в указанном словаре; остальные метаданные остаются неизменными.
Чтобы удалить элемент метаданных, используйте
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 -
Добавлена в Django 2.0:
Представление этого растра как
bytes. ВозвращаетNoneдля растров, которые не хранятся в виртуальной файловой системе GDAL.
-
-
is_vsi_based -
Новое в Django 2.0:
Логическое значение, указывающее, хранится ли этот растр в виртуальной файловой системе 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) -
Новое в Django 2.0.
Интерпретация цвета для полосы как целое число от 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 -
Новое в Django 2.0.
Метаданные этой полосы. Функциональность идентична
GDALRaster.metadata.
-
Создание растров из данных
В этом разделе описано, как создать растры с нуля, используя параметр ds_input.
Новый растр создаётся, когда в конструктор GDALRaster передаётся словарь dict. Словарь содержит параметры нового растра, такие как начало, размер или система пространственных координат. Словарь также может содержать данные пикселей и информацию о формате нового растра. В результате растр может быть файловым или основанным на памяти, в зависимости от указанного драйвера.
Нет стандартного способа описания данных растра в виде словаря или в формате 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 -
Новое в Django 2.0.
Словарь с опциями создания растра. Пара ключ-значение входного словаря передаются драйверу при создании растра.
Доступные параметры зависят от драйвера и описаны в документации каждого драйвера.
Значения в словаре не чувствительны к регистру и автоматически преобразуются в правильный строковый формат при создании.
В следующем примере используются некоторые параметры, доступные для драйвера 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, ... } ... })
Словарь band_input
Ключ 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/2.1/ref/contrib/gis/gdal/