Spec-Zone.ru › Django 3.1

GDAL API

GDAL обозначает Библиотеку абстракции геопространственных данных и является настоящим «швейцарским армейским ножом» для функциональности данных ГИС. Подмножество GDAL — это OGR, Библиотека простых объектов, специализирующаяся на чтении и записи векторных географических данных в различных стандартных форматах.

GeoDjango предоставляет высокоуровневый Python-интерфейс для некоторых возможностей OGR, включая чтение и преобразование координат векторных пространственных данных и минимальную поддержку функций GDAL в отношении растровых (изображений) данных.

Примечание

Несмотря на то, что модуль называется gdal, GeoDjango в настоящее время поддерживает только некоторые возможности OGR и растровых функций GDAL.

Обзор

Примеры данных

Инструменты GDAL/OGR, описанные здесь, предназначены для помощи в чтении ваших геопространственных данных, и для их полезности, вам необходимо иметь данные. Если вы начинаете и у вас пока нет собственных данных для использования, тесты GeoDjango содержат ряд наборов данных, которые вы можете использовать для тестирования. Вы можете загрузить их здесь:

$ wget https://raw.githubusercontent.com/django/django/master/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
$ wget https://raw.githubusercontent.com/django/django/master/tests/gis_tests/data/rasters/raster.tif

Объекты источников векторных данных

DataSource

DataSource является оболочкой для объекта источника данных OGR, которая поддерживает чтение данных из различных поддерживаемых OGR форматов и источников геопространственных файлов, используя согласованный интерфейс. Каждый источник данных представлен объектом DataSource, который содержит один или несколько слоев данных. Каждый слой, представленный объектом Layer, содержит некоторое количество географических объектов (Feature), информацию о типе объектов, содержащихся в этом слое (например, точки, полигоны и т. д.), а также имена и типы дополнительных полей (Field) данных, которые могут быть связаны с каждым объектом в этом слое.

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

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

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, 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.4 или целочисленный 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.4
  • Сокращенная строка для общеизвестных стандартов ('WGS84', 'WGS72', 'NAD27', 'NAD83')

Пример:

>>> wgs84 = SpatialReference('WGS84') # shorthand string
>>> wgs84 = SpatialReference(4326) # EPSG code
>>> wgs84 = SpatialReference('EPSG:4326') # EPSG string
>>> proj4 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs '
>>> wgs84 = SpatialReference(proj4) # PROJ.4 string
>>> wgs84 = SpatialReference("""GEOGCS["WGS 84",
DATUM["WGS_1984",
     SPHEROID["WGS 84",6378137,298.257223563,
         AUTHORITY["EPSG","7030"]],
     AUTHORITY["EPSG","6326"]],
 PRIMEM["Greenwich",0,
     AUTHORITY["EPSG","8901"]],
 UNIT["degree",0.01745329251994328,
     AUTHORITY["EPSG","9122"]],
 AUTHORITY["EPSG","4326"]]""") # OGC WKT
__getitem__(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)

Возвращает имя организации (authority) для заданного целевого узла (строка).

auth_code(target)

Возвращает код организации (authority) для заданного целевого узла (строка).

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

import_user_input(user_input)
import_wkt(wkt)

Импортирует пространственную привязку из WKT.

import_xml(xml)

Импортирует пространственную привязку из XML.

name

Возвращает имя этой пространственной привязки.

srid

Возвращает SRID верхнего уровня организации (authority), или 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.4 этой пространственной привязки.

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, который содержит один или несколько слоёв данных, называемых полосами (bands). Каждая полоса, представленная объектом 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(srid, driver=None, name=None, resampling='NearestNeighbour', max_error=0.0)

Возвращает преобразованную версию этого растра с указанным SRID.

Эта функция преобразует текущий растр в новую систему пространственной привязки, которую можно указать с помощью 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 = rst.transform(4326)
>>> target.origin
[-82.98492744885776, 27.601924753080144]
info

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

metadata

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

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

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

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

Представление 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 (Persistent Auxiliary Metadata), статистика может быть кэширована в вспомогательном файле. В некоторых случаях эта метаданные могут не синхронизироваться со значениями пикселей или могут быть возвращены значения из предыдущего вызова, которые не отражают значение параметра approximate. В таких случаях используйте параметр refresh для получения обновлённых значений и сохранения их в кеше.

Для пустых полос (где все пиксельные значения — "no data"), все статистические данные возвращаются как None.

Статистику также можно получить напрямую, обратившись к свойствам min, max, mean и std.

min

Минимальное пиксельное значение полосы (без учёта значения "no data").

max

Максимальное пиксельное значение полосы (без учёта значения "no data").

mean

Среднее значение всех пиксельных значений полосы (без учёта значения "no data").

std

Стандартное отклонение всех пиксельных значений полосы (без учёта значения "no data").

nodata_value

Значение "no data" для полосы — это специальное маркерное значение, используемое для маркировки пикселей, которые не являются действительными данными. Такие пиксели обычно не должны отображаться и не должны участвовать в операциях анализа.

Для удаления существующего значения "no data", установите это свойство в 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 передаётся словарь dict . Словарь содержит параметры определения нового растра, такие как начало, размер или система пространственной привязки. Словарь также может содержать пиксельные данные и информацию о формате нового растра. В результате растр может быть файловым или основанным на памяти, в зависимости от указанного драйвера.

Нет единого стандарта описания данных растров в словаре или формате 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. Результатом является сжатый знаковый байтовый растр с внутренней схемой разбиения на блоки. Размер блоков внутренних тайлов составляет 23x23:

>>> 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 в словаре 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 возвращает представление растра в виде 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_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.1/ref/contrib/gis/gdal/

Spec-Zone.ru

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