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 используется внутри для адаптации исходного драйвера OGR DataSource .

driver_count

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

Геометрические объекты OGR

OGRGeometry

Объекты OGRGeometry имеют общие функции с объектами GEOSGeometry и представляют собой прекрасную адаптацию геометрического представления, внутреннего для OGR. В результате они обеспечивают более эффективный доступ к данным при использовании источника DataSource . В отличие от своего аналога GEOS, объект OGRGeometry поддерживает системы пространственной привязки и преобразования координат:

>>> from django.contrib.gis.gdal import OGRGeometry
>>> polygon = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5))')
classOGRGeometry ( geom_input , srs = None )

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

classmethodfrom_gml ( gml_string )

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

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

класс Point
x

Возвращает координату X этой точки:

>>> OGRGeometry('POINT (1 2)').x
1.0
y

Возвращает координату Y этой точки:

>>> OGRGeometry('POINT (1 2)').y
2.0
z

Возвращает координату Z этой точки или, None если у этой точки нет координаты Z:

>>> OGRGeometry('POINT (1 2 3)').z
3.0
класс LineString
x

Возвращает список X-координат этой строки:

>>> OGRGeometry('LINESTRING (1 2,3 4)').x
[1.0, 3.0]
y

Возвращает список координат Y этой строки:

>>> OGRGeometry('LINESTRING (1 2,3 4)').y
[2.0, 4.0]
z

Возвращает список Z-координат этой линии или, None если у этой точки нет Z-координаты:

>>> OGRGeometry('LINESTRING (1 2 3,4 5 6)').z
[3.0, 6.0]
класс Polygon
shell

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

exterior_ring

Псевдоним shell .

centroid

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

класс GeometryCollection
add( geom )

Добавьте геометрический объект в эту геометрическую коллекцию. Не применимо к другим геометрическим типам.

OGRGeomType

классOGRGeomType ( type_input )

Этот класс используется для представления типа геометрии OGR, начиная с нескольких типов значений:

>>> from django.contrib.gis.gdal import OGRGeomType
>>> gt1 = OGRGeomType(3)             # Using an integer for the type
>>> gt2 = OGRGeomType('Polygon')     # Using a string
>>> gt3 = OGRGeomType('POLYGON')     # It's case-insensitive
>>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects
True True
name

Возвращает укороченную форму строки типа геометрии OGR:

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

classGDALRaster ( ds_input , write = False )

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

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

Если входным параметром является путь к файлу, массив открывается из этого файла. Если запись состоит из исходного словаря данных, параметров width , height и srid требуется. Если запись является байтовым объектом, она будет открыта с использованием виртуальной файловой системы GDAL.

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

В следующем примере показано, как растровые изображения могут быть созданы из разных источников ввода (с использованием образцов данных из тестов GeoDjango; см. Также раздел Примеры данных ).

>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster('/path/to/your/raster.tif', write=False)
>>> rst.name
'/path/to/your/raster.tif'
>>> rst.width, rst.height  # This file has 163 x 174 pixels
(163, 174)
>>> rst = GDALRaster({  # Creates an in-memory raster
...     'srid': 4326,
...     'width': 4,
...     'height': 4,
...     'datatype': 1,
...     'bands': [{
...         'data': (2, 3),
...         'offset': (1, 1),
...         'size': (2, 2),
...         'shape': (2, 1),
...         'nodata_value': 5,
...     }]
... })
>>> rst.srs.srid
4326
>>> rst.width, rst.height
(4, 4)
>>> rst.bands[0].data()
array([[5, 5, 5, 5],
       [5, 2, 3, 5],
       [5, 2, 3, 5],
       [5, 5, 5, 5]], dtype=uint8)
>>> rst_file = open('/path/to/your/raster.tif', 'rb')
>>> rst_bytes = rst_file.read()
>>> rst = GDALRaster(rst_bytes)
>>> rst.is_vsi_based
True
>>> rst.name  # Stored in a random path in the vsimem filesystem.
'/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'
name

Имя источника, которое эквивалентно пути к прочитанному файлу или имени, предоставленному во время создания экземпляра.

>>> GDALRaster({'width': 10, 'height': 10, 'name': 'myraster', 'srid': 4326}).name
'myraster'
driver

Имя драйвера GDAL, используемого для обработки входного файла. Для объектов, 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]
info

Вернуть строку со сводкой по массиву. Это эквивалент утилиты командной строки gdalinfo .

metadata

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

Чтобы определить или обновить элемент метаданных, передайте соответствующий элемент метаданных в метод, используя вложенную структуру, описанную выше. Обновляются только ключи, присутствующие в данном словаре; остальные метаданные не меняются.

Чтобы удалить элемент метаданных, используйте None в качестве значения метаданных.

>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326})
>>> rst.metadata
{}
>>> rst.metadata = {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}}
>>> rst.metadata
{'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}}
>>> rst.metadata = {'DEFAULT': {'OWNER': None, 'VERSION': '2.0'}}
>>> rst.metadata
{'DEFAULT': {'VERSION': '2.0'}}
vsi_buffer

Двоичное представление этой матрицы. Возвращает 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_CrBandGCI_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')

Настройки

GDAL_LIBRARY_PATH

Строка, указывающая расположение библиотеки GDAL. Обычно этот параметр используется только в том случае, если библиотека GDAL находится не в стандартном месте (например, /home/john/lib/libgdal.so ).

Исключения

исключение GDALException

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

исключение SRSException

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

Copyright ©2020 All rights reserved