GDAL API ¶
GDAL расшифровывается как « Библиотека абстракции геопространственных данных» и представляет собой настоящий швейцарский армейский нож функций для пространственных данных. Библиотека простых функций OGR - это подмножество GDAL, которое специализируется на чтении и записи векторных географических данных в различных стандартных форматах.
GeoDjango имеет высокоуровневый интерфейс Python для некоторых функций OGR, включая чтение и преобразования координат векторных пространственных данных, а также минимальную поддержку функциональности GDAL в отношении растровых данных (изображений).
Заметка
Несмотря на то, что модуль вызывается gdal
, GeoDjango на данный момент поддерживает только часть функций OGR и матрицы GDAL.
Предварительный просмотр ¶
Примеры данных ¶
Представленные здесь инструменты GDAL / OGR разработаны, чтобы помочь вам читать ваши геопространственные данные. Для большинства этих инструментов необходимо иметь данные, которыми можно манипулировать, чтобы они были полезными. Если вы только начинаете и у вас еще нет собственных данных, тесты GeoDjango содержат несколько образцов наборов данных, которые вы можете использовать для тестирования. Вы можете скачать их здесь:
$ wget https://raw.githubusercontent.com/django/django/master/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
$ wget https://raw.githubusercontent.com/django/django/master/tests/gis_tests/data/rasters/raster.tif
Объекты источника векторных данных ¶
DataSource
¶
DataSource
- это адаптер вокруг объекта источника данных OGR, который поддерживает чтение данных из различных форматов файлов и источников геопространственных данных, которые OGR знает, как обрабатывать, используя согласованный интерфейс. , Каждый источник данных представлен объектом, DataSource
содержащим один или несколько уровней данных. Каждый слой, представленный объектом, Layer
содержит ряд географических элементов ( Feature
), информацию о типе элементов, содержащихся в слое (например, точки, многоугольники и т. Д.), А также имена и типы полей. дополнительные ( Field
) данные, которые могут быть связаны с каждым элементом в слое.
-
класс
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
¶
Возвращает имя этого источника данных.
-
Layer
¶
-
класс
Layer
¶ Layer
- это адаптер для уровня данных в объектеDataSource
. ОбъектыLayer
никогда не создаются напрямую. Вместо этого они получаются из объектаDataSource
, который в основном является стандартным контейнером Python для объектовLayer
. Например, вы можете получить доступ к определенному уровню по его индексу (например,ds[0]
чтобы перейти к первому уровню) или зациклив все уровни контейнера в циклеfor
. Сам слой действует как контейнер для географических элементов.В принципе, все элементы одного слоя имеют одинаковую геометрию. Свойство
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
¶
Возвращает список числовой точности каждого поля в этом слое. Для нечисловых полей возвращаемое значение не имеет значения (и установлено на 0):
>>> layer.field_precisions [0, 0, 15, 0]
-
extent
¶
Возвращает пространственный экстент этого слоя как объекта
Envelope
:>>> layer.extent.tuple (-104.609252, 29.763374, -95.23506, 38.971823)
-
srs
¶
Свойство, возвращающее ссылку,
SpatialReference
связанную с этим слоем:>>> print(layer.srs) GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]]
Если слой
Layer
не имеет связанной информации о пространственной привязке,None
возвращается именно это.-
spatial_filter
¶
Свойство, которое можно использовать для получения или установки пространственного фильтра для этого слоя. Пространственный фильтр можно определить только с помощью экземпляра
OGRGeometry
, 4-элементного кортежа, представляющего область действия, или значенияNone
. Если для этого свойства установлено значение, отличное отNone
, при обработке слоя в цикле возвращаются только результаты, которые пересекаются с фильтром:>>> print(layer.spatial_filter) None >>> print(len(layer)) 3 >>> [feat.get('Name') for feat in layer] ['Pueblo', 'Lawrence', 'Houston'] >>> ks_extent = (-102.051, 36.99, -94.59, 40.00) # Extent for state of Kansas >>> layer.spatial_filter = ks_extent >>> len(layer) 1 >>> [feat.get('Name') for feat in layer] ['Lawrence'] >>> layer.spatial_filter = None >>> len(layer) 3
-
get_fields
() ¶
Метод, который возвращает список значений данного поля для каждого элемента слоя:
>>> layer.get_fields('Name') ['Pueblo', 'Lawrence', 'Houston']
-
get_geoms
( geos = Ложь ) ¶
Метод, который возвращает список, содержащий геометрический объект каждого элемента в слое. Если для необязательного параметра
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
( возможность ) ¶
Возвращает логическое значение, указывающее, поддерживает ли этот уровень указанную емкость (строку). Примеры возможных возможностей:
'RandomRead'
,'SequentialWrite'
,'RandomWrite'
,'FastSpatialFilter'
,'FastFeatureCount'
,'FastGetExtent'
,'CreateField'
,'Transactions'
,'DeleteFeature'
и'FastSetNextByIndex'
.-
Feature
¶
-
класс
Feature
¶ Feature
подходит под объект OGR. ОбъектыFeature
никогда не создаются напрямую. Они получены из объектаLayer
. Каждый объектFeature
состоит из геометрической части и набора полей, содержащих дополнительные свойства. Геометрическая часть элемента доступна через свойство,geom
возвращающее объектOGRGeometry
. ОбъектFeature
ведет себя как стандартный контейнер Python для своих полей, которые он возвращает в форме объектовField
: поле доступно напрямую по его индексу или имени, но также можно перебирать поля элемента в цикле, например в петлеfor
.-
geom
¶
Возвращает геометрическую часть элемента как объект
OGRGeometry
:>>> city.geom.tuple (-104.609252, 38.255001)
-
get
¶
Метод, который возвращает значение указанного поля (по имени) для этого элемента, а не объекта
Field
:>>> city.get('Population') 102121
-
geom_type
¶
Возвращает геометрический тип этого элемента как объекта
OGRGeomType
. Тип одинаков для всех элементов одного слоя и эквивалентен свойствуLayer.geom_type
объекта,Layer
из которого он исходит.-
num_fields
¶
Возвращает количество полей данных, связанных с этим элементом. Это число одинаково для всех элементов одного слоя и эквивалентно свойству
Layer.num_fields
объекта,Layer
из которого оно исходит.-
fields
¶
Возвращает список имен полей данных, связанных с этим элементом. Этот список идентичен для всех элементов одного слоя и эквивалентен свойству
Layer.fields
объекта,Layer
из которого он исходит.-
fid
¶
Возвращает идентификатор элемента в слое:
>>> city.fid 0
-
layer_name
¶
Возвращает имя слоя,
Layer
откуда берется элемент. Это имя одинаково для всех элементов одного слоя:>>> city.layer_name 'cities'
-
index
¶
Метод, возвращающий индекс указанного имени поля. Этот индекс идентичен для всех элементов одного слоя:
>>> city.index('Population') 1
-
Field
¶
-
класс
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
¶
Возвращает числовую точность этого поля. Для нечисловых полей это значение не имеет значения (и установлено на 0):
>>> 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
(который сам является частью объектаDataSource
).-
classmethod
from_gml
( gml_string ) ¶
Строит один
OGRGeometry
из заданной строки GML.-
classmethod
from_bbox
( bbox ) ¶
Создает
Polygon
из указанного ограничивающего прямоугольника (кортеж из 4 элементов).-
__len__
() ¶
Возвращает количество точек в строке
LineString
, количество сегментов в одномPolygon
или количество геометрических объектов в коллекцииGeometryCollection
. Не распространяется на другие геометрические типы.-
__iter__
() ¶
Итерирует по точкам на линии
LineString
, по сегментам одногоPolygon
или по геометрическим объектам в коллекцииGeometryCollection
. Не распространяется на другие геометрические типы.-
__getitem__
() ¶
Возвращает точку с заданным индексом строки
LineString
, сегмент внутри заданного индекса элементаPolygon
или геометрического объекта по заданному индексу коллекцииGeometryCollection
. Не распространяется на другие геометрические типы.-
dimension
¶
Возвращает координатные размеры этого геометрического объекта. 0 для точек, 1 для линий и 2 для поверхностей:
>> 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.4 или целочисленный код SRID).По умолчанию ничего не возвращается, а сам геометрический объект трансформируется. Однако, если для параметра
clone
установлено значениеTrue
, возвращается преобразованный клон этого геометрического объекта.-
intersects
( другое ) ¶
Возвращает,
True
если этот геометрический объект пересекается сother
, в противном случае возвращаетFalse
.-
equals
( другое ) ¶
Возвращает,
True
если этот геометрический объект эквивалентенother
, в противном случае возвращаетFalse
.-
disjoint
( другое ) ¶
Возвращает,
True
если этот геометрический объект не пересекается в пространствеother
(то есть не имеет с ним пересечения), в противном случае возвращаетсяFalse
.-
touches
( другое ) ¶
Возвращает,
True
если этот геометрический объект касаетсяother
, в противном случае возвращаетFalse
.-
crosses
( другое ) ¶
Возвращает,
True
если этот геометрический объект пересекается сother
, в противном случае возвращаетFalse
.-
within
( другое ) ¶
Возвращает,
True
если этот геометрический объект содержится вother
, в противном случае возвращаетFalse
.-
contains
( другое ) ¶
Возвращает,
True
если этот геометрический объект содержитother
, в противном случае возвращаетFalse
.-
overlaps
( другое ) ¶
Возвращает,
True
если этот геометрический объект частично перекрываетсяother
, в противном случае возвращаетFalse
.-
boundary
() ¶
Границы этого геометрического объекта в виде нового объекта
OGRGeometry
.-
convex_hull
¶
Наименьший выпуклый многоугольник, содержащий этот геометрический объект как новый объект
OGRGeometry
.-
difference
() ¶
Возвращает область, состоящую из разницы между этим геометрическим объектом и
other
новым объектомOGRGeometry
.-
intersection
() ¶
Возвращает область, образованную пересечением этого геометрического объекта и
other
, как нового объектаOGRGeometry
.-
sym_difference
() ¶
Возвращает область, образованную симметричной разницей между этим геометрическим объектом и
other
новым объектомOGRGeometry
.-
union
() ¶
Возвращает область, образованную объединением этого геометрического объекта и
other
, как нового объекта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:
>>> gt1.name 'Polygon'
-
num
¶
Возвращает число, соответствующее типу геометрии OGR:
>>> gt1.num 3
-
django
¶
Возвращает тип поля Django (подкласс
GeometryField
) для использования для хранения этого типа OGR, илиNone
если нет подходящего типа поля Django:>>> gt1.django 'PolygonField'
-
Envelope
¶
-
класс
Envelope
( * аргументы ) ¶ Представляет структуру конверта OGR, содержащую минимальные и максимальные координаты X и Y ограничивающего прямоугольника. Имена переменных совместимы со структурой C объекта OGR Envelope.
-
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.4 канал
- Ярлык строка , соответствующая хорошо известным стандартам (
'WGS84'
,'WGS72'
,'NAD27'
,'NAD83'
)
Пример:
>>> wgs84 = SpatialReference('WGS84') # shorthand string >>> wgs84 = SpatialReference(4326) # EPSG code >>> wgs84 = SpatialReference('EPSG:4326') # EPSG string >>> proj4 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ' >>> wgs84 = SpatialReference(proj4) # PROJ.4 string >>> wgs84 = SpatialReference("""GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]]""") # OGC WKT
-
__getitem__
( цель ) ¶
Возвращает значение, соответствующее строке узла атрибута,
None
если узел не существует. Также принимает в качестве параметра кортеж (цель, потомок), гдеenfant
- индекс атрибута в структуре 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.4.
-
import_user_input
( user_input ) ¶
-
import_wkt
( wkt ) ¶
Импортирует пространственную привязку из строки WKT.
-
import_xml
( xml ) ¶
Импортирует пространственную привязку из строки XML.
-
name
¶
Возвращает имя этой пространственной привязки.
-
srid
¶
Возвращает SRID центра сертификации первого уровня или,
None
если он не установлен.-
linear_name
¶
Возвращает имя линейной единицы.
-
linear_units
¶
Возвращает значение линейной единицы.
-
angular_name
¶
Возвращает имя угловой единицы.
-
angular_units
¶
Возвращает значение угловой единицы.
-
units
¶
Возвращает двоичный кортеж, состоящий из значения и имени единицы, и автоматически определяет, следует ли возвращать линейную единицу или угловую единицу.
-
ellipsoid
¶
Возвращает кортеж параметров эллиспоида этой пространственной привязки: (большая полуось, малая полуось, инверсия эксцесса).
-
semi_major
¶
Возвращает большую полуось эллипсоида этой пространственной привязки.
-
semi_minor
¶
Возвращает малую полуось эллипсоида этой пространственной привязки.
-
inverse_flattening
¶
Возвращает значение, обратное сглаживанию эллипсоида этой пространственной привязки.
-
geographic
¶
Возвращает, является
True
ли эта пространственная привязка географической (корневой узелGEOGCS
).-
local
¶
Возвращает, является
True
ли эта пространственная привязка локальной (корневой узелLOCAL_CS
).-
projected
¶
Возвращает, является
True
ли эта пространственная привязка системой координат проекции (корневой узелPROJCS
).-
wkt
¶
Возвращает WKT-представление этой пространственной привязки.
-
pretty_wkt
¶
Возвращает "дружественное" представление строки WKT.
-
proj
¶
Возвращает представление PROJ.4 этой пространственной привязки.
-
proj4
¶
Псевдоним
SpatialReference.proj
.-
xml
¶
Возвращает XML-представление этой пространственной привязки.
CoordTransform
¶
-
класс
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
созданных из файла, тип драйвера определяется автоматически. Для создания структур массивов с нуля по умолчанию используется драйвер в памяти ('MEM'
), но его можно изменить по мере необходимости. Например, укажитеGTiff
для файлаGeoTiff
. Список типов файлов см. Также в списке форматов матриц GDAL .В следующем примере показано создание матричного объекта в памяти:
>>> GDALRaster({'width': 10, 'height': 10, 'srid': 4326}).driver.name 'MEM'
В следующем примере показано создание матричного объекта на основе файла GeoTiff:
>>> import tempfile >>> rstfile = tempfile.NamedTemporaryFile(suffix='.tif') >>> rst = GDALRaster({'driver': 'GTiff', 'name': rstfile.name, 'srid': 4326, ... 'width': 255, 'height': 255, 'nr_of_bands': 1}) >>> rst.name '/tmp/tmp7x9H4J.tif' # The exact filename will be different on your computer >>> rst.driver.name 'GTiff'
-
width
¶ Ширина источника в пикселях (ось X).
>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).width 10
-
height
¶ Высота источника в пикселях (ось Y).
>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).height 20
-
srs
¶ Система пространственной привязки матричной структуры в виде экземпляра
SpatialReference
. Эту систему можно изменить, установив ее значение для другого объектаSpatialReference
или предоставив любое значение, принятое конструкторомSpatialReference
.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.srs.srid 4326 >>> rst.srs = 3086 >>> rst.srs.srid 3086
-
srid
¶ Идентификатор системы пространственной привязки (SRID) матричного объекта. Это свойство является ярлыком для установки или получения SRID из атрибута
srs
.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.srid 4326 >>> rst.srid = 3086 >>> rst.srid 3086 >>> rst.srs.srid # This is equivalent 3086
-
geotransform
¶ Матрица линейного преобразования, используемая для пространственной привязки источника, как кортеж из шести коэффициентов, которые соответствуют пиксельным / линейным координатам в пространственно привязанном пространстве, используя следующую связь:
Xgeo = GT(0) + Xpixel*GT(1) + Yline*GT(2) Ygeo = GT(3) + Xpixel*GT(4) + Yline*GT(5)
Те же значения можно получить, открыв свойства
origin
(индексы 0 и 3),scale
(индексы 1 и 5) иskew
(индексы 2 и 4).По умолчанию это .
[0.0, 1.0, 0.0, 0.0, 0.0, -1.0]
>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.geotransform [0.0, 1.0, 0.0, 0.0, 0.0, -1.0]
-
origin
¶ Координаты начала координат в верхнем левом углу растрового изображения в системе пространственной привязки источника, как точечный объект с его компонентами
x
иy
.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.origin [0.0, 0.0] >>> rst.origin.x = 1 >>> rst.origin [1.0, 0.0]
-
scale
¶ Ширина и высота пикселя, используемые для пространственной привязки растрового изображения, как точечный объект с его компонентами
x
иy
. См.geotransform
Дополнительную информацию.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.scale [1.0, -1.0] >>> rst.scale.x = 2 >>> rst.scale [2.0, -1.0]
-
skew
¶ Коэффициенты искажения, используемые для пространственной привязки растрового изображения, в виде точечного объекта с его компонентами
x
иy
. В случае изображений, ориентированных на север, оба этих коэффициента действительны0
.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.skew [0.0, 0.0] >>> rst.skew.x = 3 >>> rst.skew [3.0, 0.0]
-
extent
¶ Экстент (предельные значения) источника матрицы в виде четырехкомпонентного кортежа, выраженного в системе пространственной привязки источника.
(xmin, ymin, xmax, ymax)
>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.extent (0.0, -20.0, 10.0, 0.0) >>> rst.origin.x = 100 >>> rst.extent (100.0, -20.0, 110.0, 0.0)
-
bands
¶ Список всех лент в источнике в виде экземпляров
GDALBand
.>>> rst = GDALRaster({"width": 1, "height": 2, 'srid': 4326, ... "bands": [{"data": [0, 1]}, {"data": [2, 3]}]}) >>> len(rst.bands) 2 >>> rst.bands[1].data() array([[ 2., 3.]], dtype=float32)
-
warp
( ds_input , resampling = 'NearestNeighbour' , max_error = 0.0 ) ¶ Возвращает искаженную версию этого матричного объекта.
Параметры деформации можно указать в параметре
ds_input
. Использованиеds_input
аналогично тому же параметру конструктора класса. Это словарь с характеристиками целевой матрицы. Ключи словаря разрешеныwidth
(ширина)height
(высота),SRID
,origin
,scale
(шкала),skew
(наклонение)datatype
(тип данных),driver
(пилот) иname
(имя файла).По умолчанию функции деформации сохраняют большинство параметров равными начальным значениям объекта матрицы, поэтому нужно указать только те параметры, которые необходимо изменить. Обратите внимание, что сюда входит драйвер, поэтому для файловых матричных объектов функция деформации создаст новую структуру на диске.
Единственный параметр, который определяется иначе, чем объект исходной матрицы, - это имя. По умолчанию для имени массива используется имя источника в сочетании с . Для объектов массивов на основе файлов рекомендуется указывать путь к файлу целевого массива.
'_copy' + nom_pilote_source
Алгоритм передискретизации, используемый для деформации, может быть указан параметром
resampling
. Значение по умолчаниюNearestNeighbor
и другие разрешенные значенияBilinear
,Cubic
,CubicSpline
,Lanczos
,Average
, иMode
.Параметр
max_error
может использоваться для указания максимально допустимой ошибки, измеренной во входных пикселях, для аппроксимации преобразования. Значение по умолчанию - 0,0, что подразумевает точные вычисления.Для тех, кто знаком с
GDAL
этим, эта функция имеет те же возможности, что и утилита командной строкиgdalwarp
.Например, функцию
warp
можно использовать для преобразования растрового изображения, чтобы удвоить его исходный масштаб в пикселях:>>> rst = GDALRaster({ ... "width": 6, "height": 6, "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}] ... }) >>> target = rst.warp({"scale": [200, -200], "width": 3, "height": 3}) >>> target.bands[0].data() array([[ 7., 9., 11.], [ 19., 21., 23.], [ 31., 33., 35.]], dtype=float32)
-
transform
( srid , driver = None , name = None , resampling = 'NearestNeighbour' , max_error = 0.0 ) ¶ Возвращает преобразованную версию этого матричного объекта на основе указанного кода SRID.
Эта функция преобразует текущий матричный объект в новую систему пространственной привязки, которую можно указать с помощью
srid
. Он вычисляет пределы и масштаб матрицы в новой системе пространственной привязки и деформирует ее с помощью функцииwarp
.По умолчанию используется драйвер исходной матрицы, и его имя состоит из исходного имени и строки . Можно указать другой драйвер или другое имя с параметрами и .
'_copy' + nom_pilote_source
driver
name
По умолчанию используется алгоритм передискретизации,
NearestNeighbour
но его можно изменить с помощью параметраresampling
. Максимально допустимая ошибка передискретизации по умолчанию составляет 0,0, но ее можно изменить с помощью параметраmax_error
. См. Документациюwarp
для получения более подробной информации об этих настройках.>>> rst = GDALRaster({ ... "width": 6, "height": 6, "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}] ... }) >>> target = rst.transform(4326) >>> target.origin [-82.98492744885776, 27.601924753080144]
-
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
¶ Двоичное представление этой матрицы. Возвращает
None
для массивов, которые не хранятся в виртуальной файловой системе GDAL.
-
is_vsi_based
¶ Логическое значение, указывающее, хранится ли эта матрица в виртуальной файловой системе GDAL.
-
GDALBand
¶
-
класс
GDALBand
¶ Экземпляры
GDALBand
не создаются явно, а скорее получаются из объектаGDALRaster
с помощью его атрибутаbands
. Эти экземпляры содержат фактические значения пикселей растрового изображения.-
description
¶ Название или описание группы, если применимо.
-
width
¶ Ширина полосы в пикселях (ось X).
-
height
¶ Высота полосы в пикселях (ось Y).
-
pixel_count
¶ Общее количество пикселей в этой полосе. Это равно .
width * height
-
statistics
( обновить = Ложь , приблизительная = Ложь ) ¶ Вычисляет статистику значений пикселей этой полосы. Возвращаемое значение представляет собой кортеж , имеющий следующую структуру: .
(minimum, maximum, moyenne, déviation standard)
Если для параметра
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. Количество элементов в данных обычно должно соответствовать общему количеству пикселей в полосе или количеству пикселей в конкретном блоке значений пикселей, если указаны параметры и .packed string
buffer
list
array
array
offset
size
Если количество элементов данных отличается от целевого блока пикселей, параметр
shape
должен быть предоставлен. Фигура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 , но последний в настоящее время ограничен векторными форматами.
Примеры использования различных словарей ключей при создании векторных геометрий можно найти в документации соответствующих атрибутов и методов работы 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 8-битное целое число без знака 2 GDT_UInt16 16-битное целое число без знака 3 GDT_Int16 16-битное целое число со знаком 4 GDT_UInt32 32-битное целое число без знака 5 GDT_Int32 32-битное целое число со знаком 6 GDT_Float32 32-битное число с плавающей запятой 7 GDT_Float64 64-битное число с плавающей запятой
-
nr_of_bands
Целое число, представляющее количество полос в геометрии матрицы. Передавать данные на магнитной ленте во время создания не обязательно. Если количество полос не указано, оно автоматически вычитается из длины входного значения
bands
. Этот номер нельзя изменить после создания.
-
bands
Список словарей,
band_input
содержащих исходные данные ленты. Созданные индексы бэндов будут такими же, как в этом списке. Определение словаря ленты входных значений описано ниже. Если данные диапазона не предоставлены, значения диапазона инициализируются как массив нулей, и значение устанавливается равным .no data
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
. Каждый из этих словарей может содержать значения пикселей и значения, которые должны быть установлены для полос новой геометрии матрицы. Таблица данных может быть во весь размер нового объекта или быть меньше. Для массивов меньших , чем размер новой матрицы, ключей , и контроля значений пикселей. Соответствующие ключи передаются методу . Они играют ту же роль, что и при определении данных на магнитной ленте этим методом. В следующей таблице описаны ключи, которые можно использовать.no data
size
shape
offset
data()
ключ | Значение по умолчанию | использование |
---|---|---|
nodata_value |
None |
Соответствует атрибуту nodata_value |
data |
То же, что nodata_value или0 |
Передано в метод data() |
size |
(largeur, hauteur) матрицы |
Передано в метод data() |
shape |
Что касается size |
Передано в метод 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
возвращает двоичное представление матрицы.
Вот как создать матричную геометрию и вернуть ее в виде файла в ответе 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')