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. Свойство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
-
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", который содержит три точечных объекта. Для простоты, примеры ниже предполагают, что вы сохранили этот слой в переменнойlayer:>>> layer = ds[0]
-
name
Возвращает имя этого слоя в источнике данных.
>>> layer.name 'cities'
-
num_feat
Возвращает количество объектов в слое. То же, что и
len(layer):>>> layer.num_feat 3
-
geom_type
Возвращает тип геометрии слоя в виде объекта
OGRGeomType:>>> layer.geom_type.name 'Point'
-
num_fields
Возвращает количество полей в слое, т.е. количество полей данных, связанных с каждым объектом в слое:
>>> layer.num_fields 4
-
fields
Возвращает список имён каждого поля в этом слое:
>>> layer.fields ['Name', 'Population', 'Density', 'Created']
Возвращает список типов данных каждого поля в этом слое. Это подклассы
Field, которые обсуждаются ниже:>>> [ft.__name__ for ft in layer.field_types] ['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
-
field_widths
Возвращает список максимальных длин полей для каждого поля в этом слое:
>>> layer.field_widths [80, 11, 24, 10]
-
field_precisions
Возвращает список числовых точностей для каждого поля в этом слое. Это не имеет смысла (и установлено в ноль) для полей, не являющихся числовыми:
>>> layer.field_precisions [0, 0, 15, 0]
-
extent
Возвращает пространственный объём этого слоя в виде объекта
Envelope:>>> layer.extent.tuple (-104.609252, 29.763374, -95.23506, 38.971823)
-
srs
Свойство, возвращающее
SpatialReference, связанное с этим слоем:>>> print(layer.srs) GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]]Если у слоя
Layerнет связанной с ним пространственной системы отсчёта, возвращаетсяNone.-
spatial_filter
Свойство, которое может быть использовано для получения или установки пространственного фильтра для этого слоя. Пространственный фильтр может быть установлен только с помощью экземпляра
OGRGeometry, четвёрки координат, илиNone. При установке значения, отличного отNone, при итерации по слою будут возвращены только объекты, которые пересекаются с фильтром:>>> print(layer.spatial_filter) None >>> print(len(layer)) 3 >>> [feat.get('Name') for feat in layer] ['Pueblo', 'Lawrence', 'Houston'] >>> ks_extent = (-102.051, 36.99, -94.59, 40.00) # Extent for state of Kansas >>> layer.spatial_filter = ks_extent >>> len(layer) 1 >>> [feat.get('Name') for feat in layer] ['Lawrence'] >>> layer.spatial_filter = None >>> len(layer) 3-
get_fields()
Метод, возвращающий список значений заданного поля для каждого объекта в слое:
>>> layer.get_fields('Name') ['Pueblo', 'Lawrence', 'Houston']-
get_geoms(geos=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напрямую. Вместо этого вы получаете их из объектаLayer. Каждый признак состоит из геометрии и набора полей, содержащих дополнительные свойства. Геометрию поля можно получить через свойство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
-
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
Значение минимальной координаты Y.
-
max_x
Значение максимальной координаты X.
-
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
Возвращает кортеж из 2 элементов: значения единиц и имени единиц, автоматически определяет, возвращать ли линейные или угловые единицы.
-
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 (имя файла).По умолчанию функция warp сохраняет большинство параметров равными значениям исходного растрового изображения, поэтому нужно указывать только параметры, которые следует изменить. Обратите внимание, что это включает в себя драйвер, поэтому для растровых изображений, основанных на файлах, функция warp создаст новое растровое изображение на диске.
Единственный параметр, который отличается от исходного растрового изображения, — это имя. Значение имени растрового изображения по умолчанию — имя исходного растрового изображения, дополненное
'_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]
-
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. GDALBand содержат фактические значения пикселей растра.-
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.
-
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 https://gdal.org/user/virtual_file_systems.html для доступных вариантов).
Настройки
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.1/ref/contrib/gis/gdal/