GDAL API

GDAL расшифровывается как « Библиотека абстракции геопространственных данных» и представляет собой настоящий «швейцарский армейский нож» функциональности данных ГИС. Подмножеством GDAL является библиотека простых функций OGR , которая специализируется на чтении и записи векторных географических данных в различных стандартных форматах.

GeoDjango предоставляет высокоуровневый интерфейс Python для некоторых возможностей OGR, включая чтение и преобразование координат векторных пространственных данных и минимальную поддержку функций GDAL в отношении растровых данных (изображений).

Примечание

Хотя модуль назван gdal, GeoDjango в настоящее время поддерживает только некоторые возможности растровых функций OGR и GDAL.

Обзор

Образцы данных

Описанные здесь инструменты GDAL / OGR предназначены для того, чтобы помочь вам читать ваши геопространственные данные, и для того, чтобы большинство из них было полезным, вам необходимо иметь некоторые данные для работы. Если вы только начинаете и еще не имеете собственных данных для использования, тесты GeoDjango содержат ряд наборов данных, которые вы можете использовать для тестирования. Вы можете скачать их здесь:

$ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
$ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/rasters/raster.tif

Объекты источников векторных данных

DataSource

DataSource- это оболочка для объекта источника данных OGR, которая поддерживает чтение данных из различных форматов геопространственных файлов и источников данных, поддерживаемых OGR, с использованием согласованного интерфейса. Каждый источник данных представлен DataSourceобъектом, который содержит один или несколько уровней данных. Каждый слой, представленный Layer объектом, содержит некоторое количество географических объектов ( Feature), информацию о типах объектов, содержащихся в этом слое (например, точки, многоугольники и т. Д.), А также имена и типы любых дополнительных полей ( Field) данных, которые могут быть связаны с каждым объектом в этом слое.

классDataSource ( ds_input , кодировка = '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

Возвращает имя источника данных.

Изменено в Django 3.2:

Поддержка была добавлена.pathlib.Path ds_input

Layer

класс Layer

Layerэто оболочка для слоя данных в DataSourceобъекте. Вы никогда не создаете Layerобъект напрямую. Вместо этого вы получаете их из DataSourceобъекта, который по сути является стандартным контейнером Layerобъектов Python . Например, вы можете получить доступ к определенному слою по его индексу (например, 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]]

Если с ним Layerне связана информация о пространственной привязке, Noneвозвращается.

spatial_filter

Свойство, которое можно использовать для получения или установки пространственного фильтра для этого слоя. Пространственный фильтр можно установить только с помощью OGRGeometry экземпляра, экстента с четырьмя кортежами или 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 = Ложь )

Метод, который возвращает список, содержащий геометрию каждого объекта в слое. Если для необязательного аргумента 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

класс Feature

Featureоборачивает функцию OGR. Вы никогда не создаете Featureобъект напрямую. Вместо этого вы извлекаете их из Layerобъекта. Каждый объект состоит из геометрии и набора полей, содержащих дополнительные свойства. Геометрия поля доступна через его geomсвойство, которое возвращает OGRGeometryобъект. A 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

класс 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()

Возвращает значение поля как двойное (с плавающей запятой):

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

классDriver ( dr_input )

DriverКласс используется внутренне , чтобы обернуть OGR DataSource драйвер.

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))')
classOGRGeometry ( geom_input , srs = None )

Этот объект является оболочкой для класса OGR Geometry . Эти объекты создаются непосредственно из заданного geom_inputпараметра, который может быть строкой, содержащей WKT, HEX, GeoJSON, bufferсодержащей данные WKB, или OGRGeomTypeобъектом. Эти объекты также возвращаются из Feature.geomатрибута при чтении векторных данных из Layer(который, в свою очередь, является частью a DataSource).

classmethodfrom_gml ( gml_string )

Создает OGRGeometryиз заданной строки GML.

classmethodfrom_bbox ( bbox )

Создает Polygonиз заданного ограничивающего прямоугольника (4-кортеж).

__len__()

Возвращает количество точек в a LineString, количество колец в a Polygonили количество геометрий в a GeometryCollection. Не применимо к другим типам геометрии.

__iter__()

Обходит точки в a LineString, кольца в a Polygonили геометрии в a GeometryCollection. Не применимо к другим типам геометрии.

__getitem__()

Возвращает точку с указанным индексом для a LineString, внутреннее кольцо с указанным индексом для a Polygonили геометрию с указанным индексом в a 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 = Ложь )

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

По умолчанию ничего не возвращается, и геометрия преобразуется на месте. Однако, если для cloneключевого слова установлено значение, Trueвместо этого возвращается преобразованный клон этой геометрии.

intersects( другое )

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

equals( другое )

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

disjoint( другое )

Возвращает, Trueесли эта геометрия пространственно не пересекается (т. Е. Не пересекается) с другой, в противном случае возвращается False.

touches( другое )

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

crosses( другое )

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

within( другое )

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

contains( другое )

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

overlaps( другое )

Возвращает, 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.

класс 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
класс 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]
класс Polygon
shell

Возвращает оболочку или внешнее кольцо этого многоугольника в виде LinearRing геометрии.

exterior_ring

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

centroid

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

класс GeometryCollection
add( geom )

Добавляет геометрию в эту коллекцию геометрии. Не применимо к другим типам геометрии.

OGRGeomType

класс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 Geometry:

>>> gt1.name
'Polygon'
num

Возвращает число, соответствующее типу геометрии OGR:

>>> gt1.num
3
django

Возвращает тип поля Django (подкласс GeometryField) для использования для хранения этого типа OGR, или Noneесли нет подходящего типа Django:

>>> gt1.django
'PolygonField'

Envelope

классEnvelope ( * аргументы )

Представляет структуру 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( * аргументы )

Объекты системы координат

SpatialReference

классSpatialReference ( srs_input )

Объекты пространственной привязки инициализируются на заданном srs_input, который может быть одним из следующих:

  • OGC Well Known Text (WKT) (строка)
  • Код EPSG (целое или строковое)
  • Строка PROJ
  • Сокращенная строка для хорошо известных стандартов ( 'WGS84', 'WGS72', 'NAD27', 'NAD83')

Пример:

>>> wgs84 = SpatialReference('WGS84') # shorthand string
>>> wgs84 = SpatialReference(4326) # EPSG code
>>> wgs84 = SpatialReference('EPSG:4326') # EPSG string
>>> proj = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '
>>> wgs84 = SpatialReference(proj) # PROJ 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__( цель )

Возвращает значение заданного узла строкового атрибута, Noneесли узел не существует. Также может принимать кортеж в качестве параметра (цель, дочерний элемент), где дочерний элемент - это индекс атрибута в 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( цель , индекс = 0 )

Значение атрибута для данного целевого узла (например 'PROJCS'). Ключевое слово index указывает индекс возвращаемого дочернего узла.

auth_name( цель )

Возвращает имя центра для заданного строкового целевого узла.

auth_code( цель )

Возвращает код доступа для заданного строкового целевого узла.

clone()

Возвращает клон этого объекта пространственной привязки.

identify_epsg()

Этот метод проверяет WKT этого SpatialReferenceи добавляет узлы полномочий EPSG, где применим идентификатор EPSG.

from_esri()

Преобразует этот SpatialReference из формата ESRI в EPSG

to_esri()

Преобразует этот SpatialReference в формат ESRI.

validate()

Проверяет, действительна ли заданная пространственная привязка, если не будет сгенерировано исключение.

import_epsg( epsg )

Импортируйте пространственную привязку из кода EPSG.

import_proj( проект )

Импортировать пространственную привязку из строки PROJ.

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

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

ellipsoid

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

semi_major

Возвращает большую полуось эллипсоида для этой пространственной привязки.

semi_minor

Возвращает малую полуось эллипсоида для этой пространственной привязки.

inverse_flattening

Возвращает обратное сглаживание эллипсоида для этой пространственной привязки.

geographic

Возвращает, Trueесли эта пространственная привязка географическая (корневой узел GEOGCS).

local

Возвращает, Trueесли эта пространственная привязка является локальной (корневой узел LOCAL_CS).

projected

Возвращает, Trueесли эта пространственная привязка является системой координат проекции (корневой узел PROJCS).

wkt

Возвращает WKT-представление этой пространственной привязки.

pretty_wkt

Возвращает "красивое" представление WKT.

proj

Возвращает представление PROJ для этой пространственной привязки.

proj4

Псевдоним для SpatialReference.proj.

xml

Возвращает XML-представление этой пространственной привязки.

CoordTransform

классCoordTransform ( источник , цель )

Представляет преобразование системы координат. Он инициализируется двумя 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 представляется в виде трех полос: одна для красного, одна для зеленого и одна для синей.

Примечание

Для растровых данных нет разницы между экземпляром растра и его источником данных. В отличие от объектов Geometry, GDALRasterобъекты всегда являются источником данных. Временные растры могут быть созданы в памяти с помощью соответствующего драйвера, но они будут того же класса, что и файловые растровые источники.

classGDALRaster ( 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, используемого для обработки входного файла. Для GDALRasters, созданных из файла, тип драйвера определяется автоматически. Создание растров с нуля по умолчанию выполняется в оперативной памяти ( '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например. SRS можно изменить, установив для него другое значение 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, происхождение, масштаб, перекос, тип данных, драйвер и имя (имя файла).

По умолчанию функции деформации сохраняют большинство параметров равными значениям исходного исходного растра, поэтому необходимо указать только те параметры, которые следует изменить. Обратите внимание, что это включает драйвер, поэтому для файловых растров функция деформации создаст новый растр на диске.

Единственный параметр, который задается не так, как исходный растр, - это имя. Значение по умолчанию для имени растра - это имя исходного растра, к которому добавлено . Для файловых растров рекомендуется указывать путь к файлу целевого растра.'_copy' + source_driver_name

Алгоритм передискретизации, используемый для деформации, можно указать с помощью resamplingаргумента. По умолчанию NearestNeighbor, и другие разрешенные значения Bilinear, Cubic, CubicSpline, Lanczos, Average, и Mode.

max_errorАргумент может быть использован для указания ошибки максимальной измеренной во входных пикселях , которые разрешено в аппроксимирующей преобразование. По умолчанию 0,0 для точных расчетов.

Для знакомых пользователей GDALэта функция имеет те же функции, что gdalwarpи утилита командной строки.

Например, функцию деформации можно использовать для агрегирования растра до удвоения его исходного масштаба в пикселях:

>>> 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( srs , driver = None , name = None , resampling = 'NearestNeighbour' , max_error = 0.0 )

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

Он вычисляет границы и масштаб текущего растра в новой системе пространственной привязки и деформирует растр с помощью этой warpфункции.

По умолчанию используется драйвер исходного растра, а к имени растра добавляется исходное имя . Другой водитель или имя может быть задано с и аргументами.'_copy' + source_driver_namedrivername

Алгоритм передискретизации по умолчанию есть, 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_srs = SpatialReference(4326)
>>> target = rst.transform(target_srs)
>>> target.origin
[-82.98492744885776, 27.601924753080144]
Изменено в Django 3.2:

Поддержка была добавленаSpatialReference srs

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

класс GDALBand

GDALBandэкземпляры не создаются явно, а скорее получаются из GDALRasterобъекта через его bands атрибут. GDALBands содержат фактические значения пикселей растра.

description

Название или описание группы, если есть.

width

Ширина полосы в пикселях (ось X).

height

Высота полосы в пикселях (ось Y).

pixel_count

Общее количество пикселей в этом бэнде. Равно .width * height

statistics( обновить = Ложь , приблизительно = Ложь )

Вычислить статистику значений пикселей этого диапазона. Возвращаемое значение представляет собой набор со следующей структурой: .(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 = Ложь )

Тип данных , содержащийся в полосе частот, как целая константа в диапазоне от 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 = Ложь )

Интерпретация цвета для группы, как целое число между 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( данные = Нет , смещение = Нет , размер = Нет , форма = Нет )

Метод доступа к значениям пикселей 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параметра.

Новый растр создается при dictпередаче 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 16-битное целое число со знаком
4 GDT_UInt32 Тридцатидвухразрядное целое число без знака
5 GDT_Int32 32-битное целое число со знаком
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,
...    }
... })

band_inputСловарь

bandsКлюч в ds_inputсловаре список band_input словарей. Каждый band_inputсловарь может содержать значения пикселей и значение «нет данных», которое должно быть установлено на полосах нового растра. Массив данных может иметь полный размер нового растра или быть меньше. Для массивов, которые меньше , чем полная растра, то size, shape, и offsetклавиши управления значения пикселей. Соответствующие ключи передаются data() методу. Их функциональность такая же, как и при установке данных бэнда этим методом. В следующей таблице описаны ключи, которые можно использовать.

Ключ По умолчанию Применение
nodata_value None Сопоставляется с nodata_valueатрибутом
data То же, что nodata_valueили0 Пройдено в data()метод
size (with, height) растра Пройдено в 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).

Исключения

исключение GDALException

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

исключение SRSException

Исключение возникает, когда возникает ошибка при построении или использовании объекта системы пространственной привязки.

Copyright ©2021 All rights reserved