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
объект. AFeature
ведет себя как стандартный контейнер 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
Класс используется внутренне , чтобы обернуть 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
(который, в свою очередь, является частью aDataSource
).-
classmethod
from_gml
( gml_string ) ¶
Создает
OGRGeometry
из заданной строки GML.-
classmethod
from_bbox
( bbox ) ¶
Создает
Polygon
из заданного ограничивающего прямоугольника (4-кортеж).-
__len__
() ¶
Возвращает количество точек в a
LineString
, количество колец в aPolygon
или количество геометрий в aGeometryCollection
. Не применимо к другим типам геометрии.-
__iter__
() ¶
Обходит точки в a
LineString
, кольца в aPolygon
или геометрии в aGeometryCollection
. Не применимо к другим типам геометрии.-
__getitem__
() ¶
Возвращает точку с указанным индексом для a
LineString
, внутреннее кольцо с указанным индексом для aPolygon
или геометрию с указанным индексом в aGeometryCollection
. Не применимо к другим типам геометрии.-
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
.-
classmethod
-
класс
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]
-
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
объекты всегда являются источником данных. Временные растры могут быть созданы в памяти с помощью соответствующего драйвера, но они будут того же класса, что и файловые растровые источники.
-
class
GDALRaster
( ds_input , write = False ) ¶ Конструктор
GDALRaster
принимает два параметра. Первый параметр определяет источник растра, а второй параметр определяет, следует ли открывать растр в режиме записи. Для вновь созданных растров второй параметр игнорируется, и новый растр всегда создается в режиме записи.Первый параметр может принимать три формы: строка, представляющая путь к файлу, словарь со значениями, определяющими новый растр, или байтовый объект, представляющий растровый файл.
Если ввод - это путь к файлу, растр открывается оттуда. Если вход необработанные данные в словаре, параметры
width
,height
иsrid
требуется. Если вход является байтовым объектом, он будет открыт с использованием виртуальной файловой системы GDAL.Подробное описание создания растров с использованием словарного ввода см. В разделе Создание растров из данных . Подробное описание создания растров в виртуальной файловой системе см. В разделе Использование виртуальной файловой системы GDAL .
В следующем примере показано, как можно создавать растры из разных источников ввода (с использованием образцов данных из тестов GeoDjango; см. Также раздел « Примеры данных »).
>>> from django.contrib.gis.gdal import GDALRaster >>> rst = GDALRaster('/path/to/your/raster.tif', write=False) >>> rst.name '/path/to/your/raster.tif' >>> rst.width, rst.height # This file has 163 x 174 pixels (163, 174) >>> rst = GDALRaster({ # Creates an in-memory raster ... 'srid': 4326, ... 'width': 4, ... 'height': 4, ... 'datatype': 1, ... 'bands': [{ ... 'data': (2, 3), ... 'offset': (1, 1), ... 'size': (2, 2), ... 'shape': (2, 1), ... 'nodata_value': 5, ... }] ... }) >>> rst.srs.srid 4326 >>> rst.width, rst.height (4, 4) >>> rst.bands[0].data() array([[5, 5, 5, 5], [5, 2, 3, 5], [5, 2, 3, 5], [5, 5, 5, 5]], dtype=uint8) >>> rst_file = open('/path/to/your/raster.tif', 'rb') >>> rst_bytes = rst_file.read() >>> rst = GDALRaster(rst_bytes) >>> rst.is_vsi_based True >>> rst.name # Stored in a random path in the vsimem filesystem. '/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'
-
name
¶ Имя источника, которое эквивалентно пути входного файла или имени, предоставленному при создании экземпляра.
>>> GDALRaster({'width': 10, 'height': 10, 'name': 'myraster', 'srid': 4326}).name 'myraster'
-
driver
¶ Имя драйвера GDAL, используемого для обработки входного файла. Для
GDALRaster
s, созданных из файла, тип драйвера определяется автоматически. Создание растров с нуля по умолчанию выполняется в оперативной памяти ('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_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_srs = SpatialReference(4326) >>> target = rst.transform(target_srs) >>> target.origin [-82.98492744885776, 27.601924753080144]
Изменено в Django 3.2:Поддержка была добавлена
SpatialReference
srs
-
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')