GDAL API
GDAL означает Библиотеку абстракции геопространственных данных, и является настоящим «швейцарским армейским ножом» функциональности ГИС-данных. Подмножество GDAL — это библиотека OGR простых объектов, специализирующаяся на чтении и записи векторных географических данных в различных стандартных форматах.
GeoDjango предоставляет высокоуровневый интерфейс Python для некоторых возможностей OGR, включая чтение и преобразование координат векторных пространственных данных и минимальную поддержку функций GDAL по отношению к растровым (изображениям) данным.
Примечание
Хотя модуль называется gdal, GeoDjango в настоящее время поддерживает только некоторые возможности OGR и растровых функций GDAL.
Обзор
Примеры данных
Инструменты GDAL/OGR, описанные здесь, предназначены для помощи в чтении ваших геопространственных данных, для большей части их полезности вам необходимо иметь некоторые данные для работы. Если вы начинаете и у вас пока нет собственных данных для использования, тесты GeoDjango содержат ряд наборов данных, которые вы можете использовать для тестирования. Вы можете загрузить их здесь:
$ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
$ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/rasters/raster.tif
Объекты источника векторных данных
DataSource
DataSource является оболочкой для объекта источника данных OGR, который поддерживает чтение данных из различных поддерживаемых OGR геопространственных форматов файлов и источников данных с использованием согласованного интерфейса. Каждый источник данных представлен объектом DataSource, который содержит один или несколько слоев данных. Каждый слой, представленный объектом Layer, содержит определенное количество географических объектов (Feature), информацию о типе объектов, содержащихся в этом слое (например, точки, полигоны и т. д.), а также имена и типы любых дополнительных полей (Field) данных, которые могут быть связаны с каждым объектом в этом слое.
-
class DataSource(ds_input, encoding='utf-8') -
Конструктор для
DataSourceтребует только одного параметра: путь к файлу, который вы хотите прочитать. Однако OGR также поддерживает различные более сложные источники данных, включая базы данных, к которым можно получить доступ, передав строку специального имени вместо пути. Для получения дополнительной информации см. документацию OGR Vector Formats. СвойствоnameэкземпляраDataSourceвозвращает имя OGR базового источника данных, который он использует.Необязательный параметр
encodingпозволяет указать нестандартную кодировку строк в источнике. Это обычно полезно, когда вы получаетеDjangoUnicodeDecodeErrorисключения при чтении значений полей.После создания
DataSource, вы можете узнать, сколько слоев данных он содержит, обратившись к свойствуlayer_count, или (эквивалентно) используя функциюlen(). Для получения информации об обращении к самим слоям данных см. следующий раздел:>>> from django.contrib.gis.gdal import DataSource >>> ds = DataSource('/path/to/your/cities.shp') >>> ds.name '/path/to/your/cities.shp' >>> ds.layer_count # This file only contains one layer 1-
layer_count
Возвращает количество слоев в источнике данных.
-
name
Возвращает имя источника данных.
Изменено в Django 3.2:Добавлена поддержка
pathlib.Pathds_input. -
Layer
-
class Layer -
Layer— это оболочка для слоя данных в объектеDataSource. Вы никогда не создаете объектLayerнапрямую. Вместо этого вы получаете их из объектаDataSource, который по сути является стандартным контейнером Python для объектовLayer. Например, вы можете получить доступ к определенному слою по его индексу (например,ds[0]для доступа к первому слою), или вы можете перебирать все слои в контейнере в циклеfor. Сам объектLayerвыступает в качестве контейнера для геометрических объектов.Как правило, все объекты в данном слое имеют одинаковый тип геометрии. Свойство
geom_typeслоя — этоOGRGeomType, который определяет тип объекта. Мы можем использовать его для вывода некоторых основных сведений о каждом слое вDataSource:>>> for layer in ds: ... print('Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name)) ... Layer "cities": 3 PointsПример вывода взят из источника данных cities, загруженного выше, который, очевидно, содержит один слой, называемый
"cities", который содержит три точечных объекта. Для простоты в примерах ниже предполагается, что вы сохранили этот слой в переменнойlayer:>>> layer = ds[0]
-
name
Возвращает имя этого слоя в источнике данных.
>>> layer.name 'cities'
-
num_feat
Возвращает количество объектов в слое. То же самое, что и
len(layer):>>> layer.num_feat 3
-
geom_type
Возвращает тип геометрии слоя как объект
OGRGeomType:>>> layer.geom_type.name 'Point'
-
num_fields
Возвращает количество полей в слое, т. е. количество полей данных, связанных с каждым объектом в слое:
>>> layer.num_fields 4
-
fields
Возвращает список имен каждого из полей в этом слое:
>>> layer.fields ['Name', 'Population', 'Density', 'Created']
Возвращает список типов данных каждого из полей в этом слое. Это подклассы
Field, обсуждаемые ниже:>>> [ft.__name__ for ft in layer.field_types] ['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
-
field_widths
Возвращает список максимальных длин полей для каждого из полей в этом слое:
>>> layer.field_widths [80, 11, 24, 10]
-
field_precisions
Возвращает список числовых точностей для каждого из полей в этом слое. Это бессмысленно (и установлено в ноль) для нечисловых полей:
>>> layer.field_precisions [0, 0, 15, 0]
-
extent
Возвращает пространственное расширение этого слоя как объект
Envelope:>>> layer.extent.tuple (-104.609252, 29.763374, -95.23506, 38.971823)
-
srs
Свойство, возвращающее связанную с этим слоем
SpatialReference:>>> print(layer.srs) GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]]Если с
Layerнет связанной информации о пространственной системе координат, возвращаетсяNone.-
spatial_filter
Свойство, которое может быть использовано для получения или задания пространственного фильтра для этого слоя. Пространственный фильтр может быть задан только с экземпляром
OGRGeometry, 4-кортежем расширения илиNone. При задании значения отличного отNone, будут возвращаться только объекты, пересекающие фильтр, при переборе слоя:>>> print(layer.spatial_filter) None >>> print(len(layer)) 3 >>> [feat.get('Name') for feat in layer] ['Pueblo', 'Lawrence', 'Houston'] >>> ks_extent = (-102.051, 36.99, -94.59, 40.00) # Extent for state of Kansas >>> layer.spatial_filter = ks_extent >>> len(layer) 1 >>> [feat.get('Name') for feat in layer] ['Lawrence'] >>> layer.spatial_filter = None >>> len(layer) 3-
get_fields()
Метод, возвращающий список значений заданного поля для каждого объекта в слое:
>>> layer.get_fields('Name') ['Pueblo', 'Lawrence', 'Houston']-
get_geoms(geos=False)
Метод, возвращающий список, содержащий геометрию каждого объекта в слое. Если необязательный аргумент
geosустановлен вTrue, то геометрии преобразуются в объектыGEOSGeometry. В противном случае они возвращаются как объектыOGRGeometry:>>> [pt.tuple for pt in layer.get_geoms()] [(-104.609252, 38.255001), (-95.23506, 38.971823), (-95.363151, 29.763374)]
-
test_capability(capability)
Возвращает булево значение, указывающее, поддерживает ли этот слой заданную возможность (строка). Примеры допустимых строк возможностей включают:
'RandomRead','SequentialWrite','RandomWrite','FastSpatialFilter','FastFeatureCount','FastGetExtent','CreateField','Transactions','DeleteFeature', и'FastSetNextByIndex'. -
Feature
-
class Feature -
Featureоборачивает объект OGR feature. Вы никогда не создаёте объектFeatureнапрямую. Вместо этого, вы получаете их из объектаLayer. Каждый объект feature состоит из геометрии и набора полей, содержащих дополнительные свойства. Геометрия поля доступна через свойствоgeom, которое возвращает объектOGRGeometry. ОбъектFeatureведет себя как стандартный контейнер Python для своих полей, которые он возвращает как объектыField: вы можете получить доступ к полю напрямую по его индексу или имени, или вы можете пройтись по полям объекта feature, например, в циклеfor.-
geom
Возвращает геометрию для этого объекта feature в качестве объекта
OGRGeometry:>>> city.geom.tuple (-104.609252, 38.255001)
-
get
Метод, возвращающий значение заданного поля (указанного по имени) для этого объекта feature, не объект-обёртку
Field:>>> city.get('Population') 102121-
geom_type
Возвращает тип геометрии для этого объекта feature в виде объекта
OGRGeomType. Это будет одинаковым для всех объектов feature в данном слое и эквивалентно свойствуLayer.geom_typeобъектаLayer, из которого был получен объект feature.-
num_fields
Возвращает количество полей данных, связанных с объектом feature. Это будет одинаковым для всех объектов feature в данном слое и эквивалентно свойству
Layer.num_fieldsобъектаLayer, из которого был получен объект feature.-
fields
Возвращает список имён полей данных, связанных с объектом feature. Это будет одинаковым для всех объектов feature в данном слое и эквивалентно свойству
Layer.fieldsобъектаLayer, из которого был получен объект feature.-
fid
Возвращает идентификатор объекта feature в слое:
>>> city.fid 0
-
layer_name
Возвращает имя
Layer, из которого был получен объект feature. Это будет одинаковым для всех объектов feature в данном слое:>>> city.layer_name 'cities'
-
index
Метод, возвращающий индекс заданного имени поля. Это будет одинаковым для всех объектов feature в данном слое:
>>> city.index('Population') 1 -
Field
-
class Field -
-
name
Возвращает имя этого поля:
>>> city['Name'].name 'Name'
-
type
Возвращает тип OGR этого поля в виде целого числа. Словарь
FIELD_CLASSESсопоставляет эти значения с подклассамиField:>>> city['Density'].type 2
-
type_name
Возвращает строку с именем типа данных этого поля:
>>> city['Name'].type_name 'String'
-
value
Возвращает значение этого поля. Сам класс
Fieldвозвращает значение в виде строки, но каждый подкласс возвращает значение в наиболее подходящем формате:>>> city['Population'].value 102121
-
width
Возвращает ширину этого поля:
>>> city['Name'].width 80
-
precision
Возвращает числовую точность этого поля. Это не имеет смысла (и установлено в ноль) для полей, не являющихся числовыми:
>>> city['Density'].precision 15
-
as_double()
Возвращает значение поля в виде double (float):
>>> city['Density'].as_double() 874.7
-
as_int()
Возвращает значение поля в виде целого числа:
>>> city['Population'].as_int() 102121
-
as_string()
Возвращает значение поля в виде строки:
>>> city['Name'].as_string() 'Pueblo'
-
as_datetime()
Возвращает значение поля в виде кортежа с компонентами даты и времени:
>>> city['Created'].as_datetime() (c_long(1999), c_long(5), c_long(23), c_long(0), c_long(0), c_long(0), c_long(0))
-
Driver
-
class Driver(dr_input) -
Класс
Driverиспользуется внутренне для обертывания драйвера OGRDataSource.-
driver_count
Возвращает количество зарегистрированных в настоящее время драйверов OGR векторных данных.
-
OGR Геометрии
OGRGeometry
OGRGeometry объекты разделяют схожую функциональность с GEOSGeometry объектами и являются тонкими обёртками вокруг внутренней геометрической репрезентации OGR. Таким образом, они позволяют более эффективно обращаться к данным при использовании DataSource. В отличие от своего аналога GEOS, OGRGeometry поддерживает системы пространственных ссылок и преобразование координат:
>>> from django.contrib.gis.gdal import OGRGeometry
>>> polygon = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5))')
-
class OGRGeometry(geom_input, srs=None)
-
Этот объект является оболочкой для класса OGR Geometry. Эти объекты создаются непосредственно из заданного параметра
geom_input, который может быть строкой, содержащей WKT, HEX, GeoJSON,buffer, содержащую данные WKB, или объектомOGRGeomType. Эти объекты также возвращаются из атрибутаFeature.geomпри чтении векторных данных изLayer(который, в свою очередь, является частьюDataSource).-
classmethod from_gml(gml_string)
Создаёт
OGRGeometryиз заданной строки GML.-
classmethod from_bbox(bbox)
Создаёт
Polygonиз заданного прямоугольника охватывания (4-кортеж).-
__len__()
Возвращает количество точек в
LineString, количество колец вPolygonили количество геометрий вGeometryCollection. Не применимо к другим типам геометрий.-
__iter__()
Перебирает точки в
LineString, кольца вPolygonили геометрии вGeometryCollection. Не применимо к другим типам геометрий.-
__getitem__()
Возвращает точку по указанному индексу для
LineString, внутреннее кольцо по указанному индексу дляPolygonили геометрию по указанному индексу вGeometryCollection. Не применимо к другим типам геометрий.-
dimension
Возвращает число координатных измерений геометрии, т.е. 0 для точек, 1 для линий и т.д.:
>> polygon.dimension 2
-
coord_dim
Возвращает или задаёт размерность координат этой геометрии. Например, значение будет 2 для двумерных геометрий.
-
geom_count
Возвращает количество элементов в этой геометрии:
>>> polygon.geom_count 1
-
point_count
Возвращает количество точек, используемых для описания этой геометрии:
>>> polygon.point_count 4
-
num_points
Псевдоним для
point_count.-
num_coords
Псевдоним для
point_count.-
geom_type
Возвращает тип этой геометрии в виде объекта
OGRGeomType.-
geom_name
Возвращает имя типа этой геометрии:
>>> polygon.geom_name 'POLYGON'
-
area
Возвращает площадь этой геометрии или 0 для геометрий, не содержащих площади:
>>> polygon.area 25.0
-
envelope
Возвращает охватывающий прямоугольник этой геометрии в виде объекта
Envelope.-
extent
Возвращает прямоугольник охватывания этой геометрии в виде 4-кортежа, вместо объекта
Envelope:>>> point.extent (0.0, 0.0, 5.0, 5.0)
-
srs
Этот свойство контролирует систему пространственной привязки для этой геометрии или
None, если ей не была назначена система пространственной привязки. При наличии привязки, обращение к этому свойству возвращает объектSpatialReference. Его можно установить другим объектомSpatialReferenceили любым вводом, которыйSpatialReferenceпринимает. Пример:>>> city.geom.srs.name 'GCS_WGS_1984'
-
srid
Возвращает или устанавливает идентификатор пространственной привязки, соответствующий
SpatialReferenceэтой геометрии. ВозвращаетNone, если информация о пространственной привязке отсутствует или SRID не может быть определен.-
geos
Возвращает объект
GEOSGeometry, соответствующий этой геометрии.-
gml
Возвращает строковое представление этой геометрии в формате GML:
>>> OGRGeometry('POINT(1 2)').gml '<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'-
hex
Возвращает строковое представление этой геометрии в формате HEX WKB:
>>> OGRGeometry('POINT(1 2)').hex '0101000000000000000000F03F0000000000000040'-
json
Возвращает строковое представление этой геометрии в формате JSON:
>>> OGRGeometry('POINT(1 2)').json '{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'-
kml
Возвращает строковое представление этой геометрии в формате KML.
-
wkb_size
Возвращает размер буфера WKB, необходимого для хранения представления этой геометрии в WKB формате:
>>> OGRGeometry('POINT(1 2)').wkb_size 21-
wkb
Возвращает
buffer, содержащую представление этой геометрии в WKB формате.-
wkt
Возвращает строковое представление этой геометрии в формате WKT.
-
ewkt
Возвращает представление EWKT этой геометрии.
-
clone()
Возвращает новый клонированный объект
OGRGeometryэтой геометрии.-
close_rings()
Если в этой геометрии есть кольца, которые не были закрыты, эта функция закроет их, добавив начальную точку в конец:
>>> triangle = OGRGeometry('LINEARRING (0 0,0 1,1 0)') >>> triangle.close_rings() >>> triangle.wkt 'LINEARRING (0 0,0 1,1 0,0 0)'-
transform(coord_trans, clone=False)
Преобразует эту геометрию в другую систему пространственной привязки. Может принимать объект
CoordTransform, объектSpatialReferenceили любой другой ввод, принятый объектомSpatialReference(включая пространственную привязку WKT и PROJ-строки или целочисленный SRID).По умолчанию ничего не возвращается, и геометрия преобразуется на месте. Однако, если ключевое слово
cloneустановлено вTrue, возвращается преобразованная копия этой геометрии.-
intersects(other)
-
Возвращает
True, если эта геометрия пересекает другую, в противном случае возвращаетFalse.-
equals(other)
Возвращает
True, если эта геометрия эквивалентна другой, в противном случае возвращаетFalse.-
disjoint(other)
Возвращает
True, если эта геометрия пространственно не пересекается с другой (т.е. не пересекает), в противном случае возвращаетFalse.-
touches(other)
Возвращает
True, если эта геометрия касается другой, в противном случае возвращаетFalse.-
crosses(other)
Возвращает
True, если эта геометрия пересекает другую, в противном случае возвращаетFalse.-
within(other)
Возвращает
True, если эта геометрия содержится внутри другой, в противном случае возвращаетFalse.-
contains(other)
Возвращает
True, если эта геометрия содержит другую, в противном случае возвращаетFalse.-
overlaps(other)
Возвращает
True, если эта геометрия перекрывает другую, в противном случае возвращаетFalse.-
boundary()
Граница этой геометрии, как новый объект
OGRGeometry.-
convex_hull
Наименьший выпуклый многоугольник, содержащий эту геометрию, как новый объект
OGRGeometryобъект.-
difference()
Возвращает область, состоящую из разности этой геометрии и другой, как новый объект
OGRGeometry.-
intersection()
Возвращает область, состоящую из пересечения этой геометрии и другой, как новый объект
OGRGeometryобъект.-
sym_difference()
Возвращает область, состоящую из симметрической разности этой геометрии и другой, как новый объект
OGRGeometryобъект.-
union()
Возвращает область, состоящую из объединения этой геометрии и другой, как новый объект
OGRGeometryобъект.-
tuple
Возвращает координаты геометрии точки как кортеж, координаты геометрии линии как кортеж кортежей и т.д.:
>>> OGRGeometry('POINT (1 2)').tuple (1.0, 2.0) >>> OGRGeometry('LINESTRING (1 2,3 4)').tuple ((1.0, 2.0), (3.0, 4.0))-
coords
Псевдоним для
tuple.-
-
class Point -
-
x
Возвращает координату X этой точки:
>>> OGRGeometry('POINT (1 2)').x 1.0-
y
Возвращает координату Y этой точки:
>>> OGRGeometry('POINT (1 2)').y 2.0-
z
Возвращает координату Z этой точки или
None, если у точки нет координаты Z:>>> OGRGeometry('POINT (1 2 3)').z 3.0 -
-
class LineString -
-
x
Возвращает список координат X в этой линии:
>>> OGRGeometry('LINESTRING (1 2,3 4)').x [1.0, 3.0]-
y
Возвращает список координат Y в этой линии:
>>> OGRGeometry('LINESTRING (1 2,3 4)').y [2.0, 4.0]-
z
Возвращает список координат Z в этой линии или
None, если у линии нет координат Z:>>> OGRGeometry('LINESTRING (1 2 3,4 5 6)').z [3.0, 6.0] -
-
class Polygon -
-
shell
Возвращает внешнюю оболочку или внешнее кольцо этого многоугольника в виде геометрии
LinearRing.-
exterior_ring
Псевдоним для
shell.-
centroid
Возвращает
Point, представляющий центр масс этого многоугольника. -
-
class GeometryCollection -
-
add(geom)
Добавляет геометрию в эту коллекцию геометрий. Не применимо к другим типам геометрии.
-
OGRGeomType
-
class OGRGeomType(type_input) -
Этот класс позволяет представлять тип OGR-геометрии различными способами:
>>> from django.contrib.gis.gdal import OGRGeomType >>> gt1 = OGRGeomType(3) # Using an integer for the type >>> gt2 = OGRGeomType('Polygon') # Using a string >>> gt3 = OGRGeomType('POLYGON') # It's case-insensitive >>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects True True-
name
Возвращает краткую строковую форму типа OGR-геометрии:
>>> gt1.name 'Polygon'
-
num
Возвращает число, соответствующее типу OGR-геометрии:
>>> gt1.num 3
-
django
Возвращает тип поля Django (подкласс GeometryField), используемый для хранения этого типа OGR, или
None, если соответствующего типа Django нет:>>> gt1.django 'PolygonField'
-
Envelope
-
class Envelope(*args) -
Представляет структуру OGR Envelope, которая содержит минимальные и максимальные координаты X и Y для прямоугольника, ограничивающего рамку. Наименование переменных совместимо со структурой OGR Envelope C.
-
min_x
Значение минимальной координаты X.
-
min_y
Значение максимальной координаты X.
-
max_x
Значение минимальной координаты Y.
-
max_y
Значение максимальной координаты Y.
-
ur
Координата верхнего правого угла в виде кортежа.
-
ll
Координата нижнего левого угла в виде кортежа.
-
tuple
Кортеж, представляющий огибающую.
-
wkt
Строка, представляющая эту огибающую в формате WKT в виде многоугольника.
-
expand_to_include(*args)
-
Объекты систем координат
SpatialReference
-
class SpatialReference(srs_input) -
Объекты пространственной привязки инициализируются на заданном
srs_input, который может быть одним из следующих:- OGC Well Known Text (WKT) (строка)
- Код EPSG (целое число или строка)
- Строка PROJ
- Сокращенная строка для известных стандартов (
'WGS84','WGS72','NAD27','NAD83')
Пример:
>>> wgs84 = SpatialReference('WGS84') # shorthand string >>> wgs84 = SpatialReference(4326) # EPSG code >>> wgs84 = SpatialReference('EPSG:4326') # EPSG string >>> proj = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ' >>> wgs84 = SpatialReference(proj) # PROJ string >>> wgs84 = SpatialReference("""GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]]""") # OGC WKT-
__getitem__(target)
Возвращает значение заданного узла атрибута строки,
Noneесли узел не существует. Также может принимать кортеж в качестве параметра, (target, child), где child — индекс атрибута в WKT. Например:>>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]') >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326 >>> print(srs['GEOGCS']) WGS 84 >>> print(srs['DATUM']) WGS_1984 >>> print(srs['AUTHORITY']) EPSG >>> print(srs['AUTHORITY', 1]) # The authority value 4326 >>> print(srs['TOWGS84', 4]) # the fourth value in this wkt 0 >>> print(srs['UNIT|AUTHORITY']) # For the units authority, have to use the pipe symbol. EPSG >>> print(srs['UNIT|AUTHORITY', 1]) # The authority value for the units 9122
-
attr_value(target, index=0)
Значение атрибута для заданного целевого узла (например,
'PROJCS'). Ключевое слово index указывает индекс дочернего узла, который нужно вернуть.-
auth_name(target)
Возвращает имя органа власти для заданного целевого узла строки.
-
auth_code(target)
Возвращает код органа власти для заданного целевого узла строки.
-
clone()
Возвращает копию этого объекта пространственной привязки.
-
identify_epsg()
Этот метод проверяет WKT этой
SpatialReferenceи добавит узлы органа власти EPSG, где применимо идентификатор EPSG.-
from_esri()
Преобразует эту SpatialReference из формата ESRI в EPSG
-
to_esri()
Преобразует эту SpatialReference в формат ESRI.
-
validate()
Проверяет, является ли заданная пространственная привязка допустимой. В противном случае будет выброшено исключение.
-
import_epsg(epsg)
Импортировать пространственную привязку из кода EPSG.
-
import_proj(proj)
Импортировать пространственную привязку из строки PROJ.
-
import_user_input(user_input)
-
import_wkt(wkt)
Импортировать пространственную привязку из WKT.
-
import_xml(xml)
Импортировать пространственную привязку из XML.
-
name
Возвращает имя этой пространственной привязки.
-
srid
Возвращает SRID верхнего уровня органа власти или
Noneесли не определено.-
linear_name
Возвращает имя линейных единиц.
-
linear_units
Возвращает значение линейных единиц.
-
angular_name
Возвращает имя угловых единиц.
-
angular_units
Возвращает значение угловых единиц.
-
units
Возвращает кортеж из двух значений: значения и имени единиц. Автоматически определяет, нужно возвращать линейные или угловые единицы.
-
ellipsoid
Возвращает кортеж параметров эллипсоида для этой пространственной привязки: (большая полуось, малая полуось и обратная сплющенность).
-
semi_major
Возвращает большую полуось эллипсоида для этой пространственной привязки.
-
semi_minor
Возвращает малую полуось эллипсоида для этой пространственной привязки.
-
inverse_flattening
Возвращает обратную сплющенность эллипсоида для этой пространственной привязки.
-
geographic
Возвращает
Trueесли эта пространственная привязка географическая (корневой узел —GEOGCS).-
local
Возвращает
Trueесли эта пространственная привязка локальная (корневой узел —LOCAL_CS).-
projected
Возвращает
Trueесли эта пространственная привязка является проекцией координатной системы (корневой узел —PROJCS).-
wkt
Возвращает представление WKT этой пространственной привязки.
-
pretty_wkt
Возвращает «красивое» представление WKT.
-
proj
Возвращает представление PROJ для этой пространственной привязки.
-
proj4
Псевдоним для
SpatialReference.proj.-
xml
Возвращает XML-представление этой пространственной привязки.
CoordTransform
-
class CoordTransform(source, target)
Представляет преобразование координатной системы. Инициализируется двумя SpatialReference, представляющими исходную и целевую системы координат соответственно. Эти объекты следует использовать при многократном выполнении одного и того же преобразования координат для различных геометрий:
>>> ct = CoordTransform(SpatialReference('WGS84'), SpatialReference('NAD83'))
>>> for feat in layer:
... geom = feat.geom # getting clone of feature geometry
... geom.transform(ct) # transforming
Растровые объекты данных
GDALRaster
GDALRaster — это обёртка над объектом растрового источника GDAL, который поддерживает чтение данных из различных поддерживаемых GDAL геопространственных форматов файлов и источников с помощью единого интерфейса. Каждый источник данных представлен объектом GDALRaster, который содержит один или несколько слоёв данных, имеющих имена каналов. Каждый канал, представленный объектом GDALBand, содержит геореференцированные данные изображения. Например, изображение RGB представлено тремя каналами: один для красного, один для зелёного и один для синего.
Примечание
Для растровых данных нет разницы между экземпляром растра и его источником данных. В отличие от геометрических объектов, объекты GDALRaster всегда являются источником данных. Временные растры могут быть созданы в памяти с помощью соответствующего драйвера, но они будут того же класса, что и растровые источники на основе файлов.
-
class GDALRaster(ds_input, write=False) -
Конструктор
GDALRasterпринимает два параметра. Первый параметр определяет источник растра, а второй — открывается ли растр в режиме записи. Для вновь создаваемых растров второй параметр игнорируется, и новый растр всегда создаётся в режиме записи.Первый параметр может принимать три формы: строку, представляющую путь к файлу (файловая система или виртуальная файловая система GDAL), словарь со значениями, определяющими новый растр, или байтовый объект, представляющий файл растра.
Если вход — путь к файлу, растр открывается из него. Если вход — исходные данные в словаре, требуются параметры
width,height, иsrid. Если вход — байтовый объект, он будет открыт с помощью виртуальной файловой системы GDAL.Подробное описание создания растров с использованием входных данных в виде словаря см. в Создание растров из данных. Подробное описание создания растров в виртуальной файловой системе см. в Использование виртуальной файловой системы GDAL.
Следующий пример демонстрирует, как создавать растры из различных источников ввода (используя образцы данных из тестов GeoDjango; см. также раздел Образцы данных).
>>> from django.contrib.gis.gdal import GDALRaster >>> rst = GDALRaster('/path/to/your/raster.tif', write=False) >>> rst.name '/path/to/your/raster.tif' >>> rst.width, rst.height # This file has 163 x 174 pixels (163, 174) >>> rst = GDALRaster({ # Creates an in-memory raster ... 'srid': 4326, ... 'width': 4, ... 'height': 4, ... 'datatype': 1, ... 'bands': [{ ... 'data': (2, 3), ... 'offset': (1, 1), ... 'size': (2, 2), ... 'shape': (2, 1), ... 'nodata_value': 5, ... }] ... }) >>> rst.srs.srid 4326 >>> rst.width, rst.height (4, 4) >>> rst.bands[0].data() array([[5, 5, 5, 5], [5, 2, 3, 5], [5, 2, 3, 5], [5, 5, 5, 5]], dtype=uint8) >>> rst_file = open('/path/to/your/raster.tif', 'rb') >>> rst_bytes = rst_file.read() >>> rst = GDALRaster(rst_bytes) >>> rst.is_vsi_based True >>> rst.name # Stored in a random path in the vsimem filesystem. '/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'Изменено в Django 4.0:Разрешено создание растров в любой виртуальной файловой системе GDAL.
-
name -
Имя источника, эквивалентное пути к входному файлу или имени, указанному при создании.
>>> GDALRaster({'width': 10, 'height': 10, 'name': 'myraster', 'srid': 4326}).name 'myraster'
-
driver -
Имя драйвера GDAL, используемого для обработки входного файла. Для
GDALRasterрастров, созданных из файла, тип драйвера определяется автоматически. Создание растров с нуля по умолчанию — это растр в оперативной памяти ('MEM'), но его можно изменить по мере необходимости. Например, используйтеGTiffдля файлаGeoTiff. Список типов файлов также см. в списке GDAL Raster Formats.Растр в оперативной памяти создаётся следующим образом:
>>> GDALRaster({'width': 10, 'height': 10, 'srid': 4326}).driver.name 'MEM'Файловоориентированный растр GeoTiff создаётся следующим образом:
>>> import tempfile >>> rstfile = tempfile.NamedTemporaryFile(suffix='.tif') >>> rst = GDALRaster({'driver': 'GTiff', 'name': rstfile.name, 'srid': 4326, ... 'width': 255, 'height': 255, 'nr_of_bands': 1}) >>> rst.name '/tmp/tmp7x9H4J.tif' # The exact filename will be different on your computer >>> rst.driver.name 'GTiff'
-
width -
Ширина источника в пикселях (ось X).
>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).width 10
-
height -
Высота источника в пикселях (ось Y).
>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).height 20
-
srs -
Система пространственной привязки растра в виде экземпляра
SpatialReference. СИП можно изменить, присвоив ей другой экземплярSpatialReferenceили предоставив любой вход, принятый конструкторомSpatialReference.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.srs.srid 4326 >>> rst.srs = 3086 >>> rst.srs.srid 3086
-
srid -
Идентификатор системы пространственной привязки (SRID) растра. Это свойство — способ получения или задания SRID через атрибут
srs.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.srid 4326 >>> rst.srid = 3086 >>> rst.srid 3086 >>> rst.srs.srid # This is equivalent 3086
-
geotransform -
Матрица аффинного преобразования, используемая для геопривязки источника, в виде кортежа из шести коэффициентов, которые отображают пиксельные/строчные координаты в геопривязанное пространство с помощью следующего соотношения:
Xgeo = GT(0) + Xpixel*GT(1) + Yline*GT(2) Ygeo = GT(3) + Xpixel*GT(4) + Yline*GT(5)
Те же значения можно получить, обратившись к свойствам
origin(индексы 0 и 3),scale(индексы 1 и 5) иskew(индексы 2 и 4).По умолчанию —
[0.0, 1.0, 0.0, 0.0, 0.0, -1.0].>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.geotransform [0.0, 1.0, 0.0, 0.0, 0.0, -1.0]
-
origin -
Координаты левого верхнего угла растра в системе пространственной привязки источника в виде объекта точки с
xиyчленами.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.origin [0.0, 0.0] >>> rst.origin.x = 1 >>> rst.origin [1.0, 0.0]
-
scale -
Ширина и высота пикселя, используемые для геопривязки растра, в виде объекта точки с
xиyчленами. См.geotransformдля получения дополнительной информации.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.scale [1.0, -1.0] >>> rst.scale.x = 2 >>> rst.scale [2.0, -1.0]
-
skew -
Коэффициенты наклона, используемые для геопривязки растра, в виде объекта точки с
xиyчленами. В случае изображений с направлением «север наверх» эти коэффициенты оба0.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.skew [0.0, 0.0] >>> rst.skew.x = 3 >>> rst.skew [3.0, 0.0]
-
extent -
Область (предельные значения) источника растра в виде 4-кортежа
(xmin, ymin, xmax, ymax)в системе пространственной привязки источника.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.extent (0.0, -20.0, 10.0, 0.0) >>> rst.origin.x = 100 >>> rst.extent (100.0, -20.0, 110.0, 0.0)
-
bands -
Список всех полос источника в виде экземпляров
GDALBand.>>> rst = GDALRaster({"width": 1, "height": 2, 'srid': 4326, ... "bands": [{"data": [0, 1]}, {"data": [2, 3]}]}) >>> len(rst.bands) 2 >>> rst.bands[1].data() array([[ 2., 3.]], dtype=float32)
-
warp(ds_input, resampling='NearestNeighbour', max_error=0.0) -
Возвращает деформированную версию этого растра.
Параметры деформации можно указать через аргумент
ds_input. Использованиеds_inputаналогично соответствующему аргументу конструктора класса. Это словарь с характеристиками целевого растра. Допустимые значения ключей словаря: width, height, SRID, origin, scale, skew, datatype, driver и name (имя файла).По умолчанию функции деформации сохраняет большинство параметров равными значениям исходного растра, поэтому нужно указывать только те параметры, которые нужно изменить. Обратите внимание, что это включает драйвер, поэтому для растров, основанных на файлах, функция деформации создаст новый растр на диске.
Единственный параметр, который отличается от параметров исходного растра, — имя. Значение имени растра по умолчанию — имя исходного растра, дополненное
'_copy' + source_driver_name. Для растров, основанных на файлах, рекомендуется указать путь к целевому растру.Алгоритм ресемплирования, используемый для деформации, можно указать с помощью аргумента
resampling. Значение по умолчанию —NearestNeighbor, а другие допустимые значения —Bilinear,Cubic,CubicSpline,Lanczos,Average, иMode.Аргумент
max_errorможно использовать для указания максимальной погрешности, измеряемой в пикселях входных данных, которая допускается при приближении преобразования. По умолчанию — 0,0 для точных вычислений.Для пользователей, знакомых с
GDAL, эта функция имеет аналогичную функциональность утилите командной строкиgdalwarp.Например, функция warp может использоваться для агрегирования растра в два раза больше его исходного масштаба пикселей:
>>> rst = GDALRaster({ ... "width": 6, "height": 6, "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}] ... }) >>> target = rst.warp({"scale": [200, -200], "width": 3, "height": 3}) >>> target.bands[0].data() array([[ 7., 9., 11.], [ 19., 21., 23.], [ 31., 33., 35.]], dtype=float32)
-
transform(srs, driver=None, name=None, resampling='NearestNeighbour', max_error=0.0) -
Преобразует этот растр в другую систему пространственной привязки (
srs), которая может быть объектомSpatialReferenceили любым другим входом, принятымSpatialReference(включая WKT и PROJ-строки систем пространственной привязки или целое число SRID).Вычисляет границы и масштаб текущего растра в новой системе пространственной привязки и деформирует растр с помощью функции
warp.По умолчанию используется драйвер исходного растра, а имя растра — оригинальное имя, дополненное
'_copy' + source_driver_name. Разный драйвер или имя можно указать с помощью аргументовdriverиname.Алгоритм ресемплирования по умолчанию —
NearestNeighbour, но его можно изменить с помощью аргументаresampling. По умолчанию максимальная допустимая погрешность ресемплирования — 0,0, и её можно изменить с помощью аргументаmax_error. Для получения подробной информации об этих аргументах см. документацию поwarp.>>> rst = GDALRaster({ ... "width": 6, "height": 6, "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}] ... }) >>> target_srs = SpatialReference(4326) >>> target = rst.transform(target_srs) >>> target.origin [-82.98492744885776, 27.601924753080144]Изменено в Django 3.2:Добавлена поддержка
SpatialReferencesrs
-
info -
Возвращает строку с кратким описанием растра. Это эквивалентно утилите командной строки gdalinfo.
-
-
metadata -
Метаданные этого растра, представленные в виде вложенного словаря. Ключ первого уровня — это область метаданных. Второй уровень содержит имена и значения элементов метаданных из каждой области.
Чтобы установить или обновить элемент метаданных, передайте соответствующий элемент метаданных в метод, используя описанную выше вложенную структуру. Обновляются только ключи, присутствующие в указанном словаре; остальные метаданные остаются неизменными.
Чтобы удалить элемент метаданных, используйте
Noneв качестве значения метаданных.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.metadata {} >>> rst.metadata = {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}} >>> rst.metadata {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}} >>> rst.metadata = {'DEFAULT': {'OWNER': None, 'VERSION': '2.0'}} >>> rst.metadata {'DEFAULT': {'VERSION': '2.0'}}
-
vsi_buffer -
Представление
bytesэтого растра. ВозвращаетNoneдля растров, которые не хранятся в виртуальной файловой системе GDAL.
-
is_vsi_based -
Булево значение, указывающее, хранится ли этот растр в виртуальной файловой системе GDAL.
-
GDALBand
-
class GDALBand -
Экземпляры
GDALBandне создаются явно, а вместо этого получаются из объектаGDALRasterчерез его атрибутbands. GDALBands содержат фактические пиксельные значения растра.-
description -
Имя или описание полосы, если таковое имеется.
-
width -
Ширина полосы в пикселях (ось X).
-
height -
Высота полосы в пикселях (ось Y).
-
pixel_count -
Общее количество пикселей в данной полосе. Равно
width * height.
-
statistics(refresh=False, approximate=False) -
Вычисление статистики пиксельных значений данной полосы. Результатом является кортеж со следующей структурой:
(minimum, maximum, mean, standard deviation).Если аргумент
approximateустановлен вTrue, статистика может быть вычислена на основе предварительного просмотра или подмножества плиток изображения.Если аргумент
refreshустановлен вTrue, статистика будет вычислена непосредственно из данных, а кеш будет обновлён результатом.Если найдено значение постоянного кеша, это значение возвращается. Для форматов растров, использующих службы постоянных вспомогательных метаданных (PAM), статистика может быть кэширована в вспомогательном файле. В некоторых случаях эти метаданные могут быть не синхронизированы со значениями пикселей или привести к возврату значений из предыдущего вызова, которые не отражают значение аргумента
approximate. В таких случаях используйте аргументrefreshдля получения обновлённых значений и сохранения их в кеше.Для пустых полос (где все пиксельные значения — «нет данных»), все статистики возвращаются как
None.Статистику также можно получить напрямую, обратившись к свойствам
min,max,meanиstd.
-
min -
Минимальное пиксельное значение полосы (исключая значение «нет данных»).
-
max -
Максимальное пиксельное значение полосы (исключая значение «нет данных»).
-
mean -
Среднее значение всех пиксельных значений полосы (исключая значение «нет данных»).
-
std -
Стандартное отклонение всех пиксельных значений полосы (исключая значение «нет данных»).
-
nodata_value -
Значение «нет данных» для полосы обычно представляет собой специальное маркерное значение, используемое для маркировки пикселей, которые не являются допустимыми данными. Такие пиксели, как правило, не должны отображаться и не должны участвовать в операциях анализа.
Чтобы удалить существующее значение «нет данных», установите это свойство в
None(требуется GDAL ≥ 2.1).
-
datatype(as_string=False) -
Тип данных в полосе, как целое число от 0 (Неизвестно) до 11. Если
as_stringравноTrue, тип данных возвращается как строка со следующими возможными значениями:GDT_Unknown,GDT_Byte,GDT_UInt16,GDT_Int16,GDT_UInt32,GDT_Int32,GDT_Float32,GDT_Float64,GDT_CInt16,GDT_CInt32,GDT_CFloat32, иGDT_CFloat64.
-
color_interp(as_string=False) -
Интерпретация цвета для полосы, как целое число от 0 до 16. Если
as_stringравноTrue, тип данных возвращается как строка со следующими возможными значениями:GCI_Undefined,GCI_GrayIndex,GCI_PaletteIndex,GCI_RedBand,GCI_GreenBand,GCI_BlueBand,GCI_AlphaBand,GCI_HueBand,GCI_SaturationBand,GCI_LightnessBand,GCI_CyanBand,GCI_MagentaBand,GCI_YellowBand,GCI_BlackBand,GCI_YCbCr_YBand,GCI_YCbCr_CbBand, иGCI_YCbCr_CrBand.GCI_YCbCr_CrBandтакже представляетGCI_Maxпотому что оба соответствуют целому числу 16, но толькоGCI_YCbCr_CrBandвозвращается как строка.
-
data(data=None, offset=None, size=None, shape=None) -
Доступ к пиксельным значениям
GDALBand. Возвращает весь массив данных, если параметры не указаны. Подмножество пиксельного массива можно запросить, указав смещение и размер блока в виде кортежей.Если NumPy доступен, данные возвращаются в виде массива NumPy. По соображениям производительности настоятельно рекомендуется использовать NumPy.
Данные записываются в
GDALBandесли параметрdataуказан. Входные данные могут быть одного из следующих типов: упакованная строка, буфер, список, массив и массив NumPy. Количество элементов во входных данных, как правило, должно соответствовать общему количеству пикселей в полосе или количеству пикселей для конкретного блока пиксельных значений, если параметрыoffsetиsizeуказаны.Если количество элементов во входных данных отличается от целевого блока пикселей, необходимо указать параметр
shape. Форма — это кортеж, который определяет ширину и высоту входных данных в пикселях. Затем данные дублируются для обновления пиксельных значений выбранного блока. Это полезно, например, для заполнения всей полосы одним значением.Например:
>>> rst = GDALRaster({'width': 4, 'height': 4, 'srid': 4326, 'datatype': 1, 'nr_of_bands': 1}) >>> bnd = rst.bands[0] >>> bnd.data(range(16)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(offset=(1, 1), size=(2, 2)) array([[ 5, 6], [ 9, 10]], dtype=int8) >>> bnd.data(data=[-1, -2, -3, -4], offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -1, -2, 7], [ 8, -3, -4, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(data='\x9d\xa8\xb3\xbe', offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -99, -88, 7], [ 8, -77, -66, 11], [ 12, 13, 14, 15]], dtype=int8) >>> bnd.data([1], shape=(1, 1)) >>> bnd.data() array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], dtype=uint8) >>> bnd.data(range(4), shape=(1, 4)) array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], dtype=uint8)
-
metadata -
Метаданные этой полосы. Функциональность идентична
GDALRaster.metadata.
-
Создание растров из данных
Этот раздел описывает, как создавать растры с нуля, используя параметр ds_input.
Новый растр создаётся, когда параметр dict передаётся в конструктор GDALRaster. Словарь содержит определяющие параметры нового растра, такие как начало координат, размер или система пространственной привязки. Словарь также может содержать пиксельные данные и информацию о формате нового растра. Полученный растр, следовательно, может быть файловым или основанным на памяти, в зависимости от указанного драйвера.
Нет стандарта для описания растровых данных в словаре или формате JSON. Определение входного словаря в класс GDALRaster поэтому специфично для Django. Оно вдохновлено форматом geojson, но стандарт geojson в настоящее время ограничен векторными форматами.
Примеры использования различных ключей при создании растров можно найти в документации соответствующих атрибутов и методов классов GDALRaster и GDALBand.
Словарь ds_input
Для создания растра в словаре ds_input требуются только несколько ключей: width, height, и srid. Все остальные параметры имеют значения по умолчанию (см. таблицу ниже). Список ключей, которые можно передать в словаре ds_input , тесно связан, но не идентичен свойствам класса GDALRaster. Многие параметры напрямую отображаются на эти свойства; остальные описаны ниже.
В следующей таблице описаны все ключи, которые можно установить в словаре ds_input.
| Ключ | Значение по умолчанию | Использование |
|---|---|---|
srid | обязательно | Сопоставлено с атрибутом srid |
width | обязательно | Сопоставлено с атрибутом width |
height | обязательно | Сопоставлено с атрибутом height |
driver | MEM | Сопоставлено с атрибутом driver |
name | '' | См. ниже |
origin | 0 | Сопоставлено с атрибутом origin |
scale | 0 | Сопоставлено с атрибутом scale |
skew | 0 | Сопоставлено с атрибутом width |
bands | [] | См. ниже |
nr_of_bands | 0 | См. ниже |
datatype | 6 | См. ниже |
papsz_options | {} | См. ниже |
-
name -
Строка, представляющая имя растра. При создании растра на основе файла, этот параметр должен содержать путь к файлу нового растра. Если имя начинается с
/vsimem/, растр создается в виртуальной файловой системе GDAL.
-
datatype -
Целое число, представляющее тип данных для всех полос. По умолчанию
6(Float32). Все полосы нового растра должны иметь один и тот же тип данных. Соответствие значений:Значение Тип пикселя GDAL Описание 1 GDT_Byte Восьмибитное беззнаковое целое число 2 GDT_UInt16 Шестнадцатибитное беззнаковое целое число 3 GDT_Int16 Шестнадцатибитное знаковое целое число 4 GDT_UInt32 Тридцатидвухбитное беззнаковое целое число 5 GDT_Int32 Тридцатидвухбитное знаковое целое число 6 GDT_Float32 Тридцатидвухбитное число с плавающей точкой 7 GDT_Float64 Шестидесятичетырехбитное число с плавающей точкой
-
nr_of_bands -
Целое число, представляющее количество полос растра. Растр можно создать без передачи данных полос при создании. Если количество полос не указано, оно автоматически вычисляется из длины входного
bands. Количество полос нельзя изменить после создания.
-
bands -
Список словарей
band_inputс входными данными полос. Индексы полос результата совпадают с индексами в предоставленном списке. Определение словаря входных данных полосы приведено ниже. Если данные полосы не предоставлены, значения полос растра инициализируются как массив нулей, а значение «без данных» устанавливается вNone.
-
papsz_options -
Словарь с параметрами создания растра. Пара ключ-значение входного словаря передаются драйверу при создании растра.
Доступные параметры зависят от драйвера и описаны в документации каждого драйвера.
Значения в словаре не чувствительны к регистру и автоматически преобразуются в правильный строковый формат при создании.
Следующий пример использует некоторые параметры, доступные для драйвера GTiff. Результатом является сжатый растр со знаковыми байтами и внутренней схемой разбиения на блоки. Размер блоков внутри – 23 на 23:
>>> GDALRaster({ ... 'driver': 'GTiff', ... 'name': '/path/to/new/file.tif', ... 'srid': 4326, ... 'width': 255, ... 'height': 255, ... 'nr_of_bands': 1, ... 'papsz_options': { ... 'compress': 'packbits', ... 'pixeltype': 'signedbyte', ... 'tiled': 'yes', ... 'blockxsize': 23, ... 'blockysize': 23, ... } ... })
Словарь band_input
Ключ bands в словаре ds_input – список band_input словарей. Каждый band_input словарь может содержать значения пикселей и значение «без данных», которые будут установлены для полос нового растра. Массив данных может иметь полный размер нового растра или быть меньше. Для массивов, меньших полного растра, ключи size, shape, и offset управляют значениями пикселей. Соответствующие ключи передаются методу data(). Их функциональность аналогична установке данных полосы с помощью этого метода. Следующая таблица описывает ключи, которые можно использовать.
| Ключ | Значение по умолчанию | Использование |
|---|---|---|
nodata_value | None | Сопоставлено с атрибутом nodata_value |
data | То же, что и nodata_value или 0
| Передается методу data() |
size | Размер растра | Передается методу data() |
shape | То же, что и размер | Передается методу data() |
offset | (0, 0) | Передается методу data() |
Использование виртуальной файловой системы GDAL
GDAL может обращаться к файлам, хранящимся в файловой системе, но также поддерживает виртуальные файловые системы для абстрагирования доступа к другим типам файлов, таким как сжатые, зашифрованные или удаленные файлы.
Использование виртуальной файловой системы на основе памяти
GDAL имеет внутреннюю виртуальную файловую систему на основе памяти, которая позволяет рассматривать блоки памяти как файлы. Она может использоваться для чтения и записи объектов GDALRaster из и в буферы бинарных файлов.
Это полезно в веб-контекстах, где растры могут быть получены в виде буфера из удаленного хранилища или возвращены из представления, не записываясь на диск.
Объекты GDALRaster создаются в виртуальной файловой системе, когда в качестве входных данных предоставляется объект bytes, или когда путь к файлу начинается с /vsimem/.
Входящие данные в виде bytes должны представлять собой полное бинарное представление файла. Например:
# Read a raster as a file object from a remote source.
>>> from urllib.request import urlopen
>>> dat = urlopen('http://example.com/raster.tif').read()
# Instantiate a raster from the bytes object.
>>> rst = GDALRaster(dat)
# The name starts with /vsimem/, indicating that the raster lives in the
# virtual filesystem.
>>> rst.name
'/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'
Для создания нового виртуального файла-растра с нуля используйте представление словаря ds_input и укажите аргумент name, который начинается с /vsimem/ (подробности о представлении словаря см. в разделе Создание растров из данных). Для виртуальных файловых растров атрибут vsi_buffer возвращает представление растра в формате bytes.
Вот как создать растр и вернуть его как файл в HttpResponse:
>>> from django.http import HttpResponse
>>> rst = GDALRaster({
... 'name': '/vsimem/temporarymemfile',
... 'driver': 'tif',
... 'width': 6, 'height': 6, 'srid': 3086,
... 'origin': [500000, 400000],
... 'scale': [100, -100],
... 'bands': [{'data': range(36), 'nodata_value': 99}]
... })
>>> HttpResponse(rast.vsi_buffer, 'image/tiff')
Использование других виртуальных файловых систем
В зависимости от локальной сборки GDAL могут поддерживаться и другие виртуальные файловые системы. Вы можете использовать их, добавив соответствующий префикс /vsi*/ к предоставляемому пути. Подробности см. в документации GDAL по виртуальным файловым системам .
Сжатые растры
Вместо разархивирования файла и создания растра, GDAL может напрямую обращаться к сжатым файлам, используя виртуальные файловые системы /vsizip/, /vsigzip/, или /vsitar/:
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster('/vsizip/path/to/your/file.zip/path/to/raster.tif')
>>> rst = GDALRaster('/vsigzip/path/to/your/file.gz')
>>> rst = GDALRaster('/vsitar/path/to/your/file.tar/path/to/raster.tif')
Сеть растров
GDAL может прозрачно поддерживать онлайн-ресурсы и поставщиков хранилищ. До тех пор, пока он построен с такими возможностями.
Для доступа к публичному файлу растра без аутентификации вы можете использовать /vsicurl/:
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster('/vsicurl/https://example.com/raster.tif')
>>> rst.name
'/vsicurl/https://example.com/raster.tif'
Для коммерческих поставщиков хранилищ (например, /vsis3/) система должна быть предварительно настроена для аутентификации и, возможно, других параметров (подробности см. в документации GDAL по виртуальным файловым системам ).
Настройки
GDAL_LIBRARY_PATH
Строка, указывающая расположение библиотеки GDAL. Как правило, это значение используется только если библиотека GDAL расположена в нестандартном месте (например, /home/john/lib/libgdal.so).
Исключения
-
exception GDALException -
Основное исключение GDAL, указывающее на ошибку, связанную с GDAL.
-
exception SRSException -
Исключение, генерируемое при возникновении ошибки при создании или использовании объекта системы пространственных координат.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.0/ref/contrib/gis/gdal/