Spec-Zone.ru › Django 3.2

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.Path ds_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", содержащий три точечных объекта. Для простоты в примерах ниже предполагается, что вы сохранили этот слой в переменной 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]]

Если у слоя нет связанной с ним пространственной информации, возвращается 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 используется внутренне для обертывания драйвера OGR DataSource.

driver_count

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

OGR Геометрии

OGRGeometry

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

>>> from django.contrib.gis.gdal import OGRGeometry
>>> polygon = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5))')
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 принимает два параметра. Первый параметр определяет источник растра, а второй — нужно ли открывать растр в режиме записи. Для вновь созданных растров второй параметр игнорируется, и новый растр всегда создаётся в режиме записи.

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

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

Подробное описание создания растров с использованием входных данных в словаре см. в разделе Создание растров из данных. Подробное описание создания растров в виртуальной файловой системе см. в разделе Использование виртуальной файловой системы GDAL.

Следующий пример демонстрирует создание растров из разных источников (используя примерные данные из тестов GeoDjango; см. также раздел Примерные данные).

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

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

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

Имя драйвера GDAL, используемого для обработки входного файла. Для растров, созданных из файла, тип драйвера определяется автоматически. Создание растров с нуля по умолчанию — это растр в оперативной памяти ('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]
Изменено в Django 3.2:

Добавлена поддержка SpatialReference srs

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.

Новый растр создаётся, когда в конструктор 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,
...    }
... })

Словарь входных полос

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

Это полезно в веб-контекстах, где растры могут быть получены как буфер из удалённого хранилища или возвращены из представления без записи на диск.

Объекты GDALRaster создаются в виртуальной файловой системе, когда в качестве входного параметра используется объект bytes, или когда путь к файлу начинается с /vsimem/.

Ввод, предоставленный как bytes, должен быть полным двоичным представлением файла. Например:

# Read a raster as a file object from a remote source.
>>> from urllib.request import urlopen
>>> dat = urlopen('http://example.com/raster.tif').read()
# Instantiate a raster from the bytes object.
>>> rst = GDALRaster(dat)
# The name starts with /vsimem/, indicating that the raster lives in the
# virtual filesystem.
>>> rst.name
'/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'

Чтобы создать новый виртуальный файл-растр с нуля, используйте представление словаря ds_input и передайте аргумент name, который начинается с /vsimem/ (подробнее о представлении словаря см. Создание растров из данных). Для растров на основе виртуальных файлов атрибут vsi_buffer возвращает двоичное представление растра.

Вот как создать растр и вернуть его как файл в HttpResponse:

>>> from django.http import HttpResponse
>>> rst = GDALRaster({
...     'name': '/vsimem/temporarymemfile',
...     'driver': 'tif',
...     'width': 6, 'height': 6, 'srid': 3086,
...     'origin': [500000, 400000],
...     'scale': [100, -100],
...     'bands': [{'data': range(36), 'nodata_value': 99}]
... })
>>> HttpResponse(rast.vsi_buffer, 'image/tiff')

Настройки

GDAL_LIBRARY_PATH

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

Исключения

exception GDALException

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

exception SRSException

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

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/ref/contrib/gis/gdal/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API