• 3.1
  • 5.0
  • 6.1
  • Версия документации: 3.2

ГДАЛ API

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

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

Примечание

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

Обзор

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

The GDAL/OGR tools described here are designed to help you read in your geospatial data, in order for most of them to be useful you have to have some data to work with. If you’re starting out and don’t yet have any data of your own to use, GeoDjango tests contain a number of data sets that you can use for testing. You can download them here:

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

class DataSource(ds_input, encoding='utf-8')

Конструктору DataSource требуется только один параметр: путь к файлу, который вы хотите прочитать. Однако OGR также поддерживает множество более сложных источников данных, включая базы данных, доступ к которым можно получить, передав специальную строку имени вместо пути. Для получения дополнительной информации см. документацию `OGR Vector Formats`__. Свойство name экземпляра DataSource дает OGR-имя базового источника данных, который он использует.

Необязательный параметр encoding позволяет указать нестандартную кодировку строк в источнике. Обычно это полезно, когда вы получаете исключения DjangoUnicodeDecodeError при чтении значений полей.

Once you’ve created your DataSource, you can find out how many layers of data it contains by accessing the layer_count property, or (equivalently) by using the len() function. For information on accessing the layers of data themselves, see the next section:

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

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

Changed in Django 3.2:

Support for pathlib.Path ds_input was added.

Слой

class Layer

Layer — это оболочка слоя данных в объекте DataSource. Вы никогда не создаете объект Layer напрямую. Вместо этого вы извлекаете их из объекта DataSource, который по сути является стандартным контейнером Python для объектов Layer. Например, вы можете получить доступ к определенному слою по его индексу (например, ds[0] для доступа к первому слою) или вы можете перебрать все слои в контейнере в цикле for. Сам «Слой» действует как контейнер для геометрических объектов.

Typically, all the features in a given layer have the same geometry type. The geom_type property of a layer is an OGRGeomType that identifies the feature type. We can use it to print out some basic information about each layer in a DataSource:

>>> for layer in ds:
...     print('Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name))
...
Layer "cities": 3 Points

The example output is from the cities data source, loaded above, which evidently contains one layer, called "cities", which contains three point features. For simplicity, the examples below assume that you’ve stored that layer in the variable layer:

>>> layer = ds[0]
name

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

>>> layer.name
'cities'
num_feat

Returns the number of features in the layer. Same as len(layer):

>>> layer.num_feat
3
geom_type

Returns the geometry type of the layer, as an OGRGeomType object:

>>> layer.geom_type.name
'Point'
num_fields

Returns the number of fields in the layer, i.e the number of fields of data associated with each feature in the layer:

>>> layer.num_fields
4
fields

Returns a list of the names of each of the fields in this layer:

>>> layer.fields
['Name', 'Population', 'Density', 'Created']

Returns a list of the data types of each of the fields in this layer. These are subclasses of Field, discussed below:

>>> [ft.__name__ for ft in layer.field_types]
['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
field_widths

Returns a list of the maximum field widths for each of the fields in this layer:

>>> layer.field_widths
[80, 11, 24, 10]
field_precisions

Returns a list of the numeric precisions for each of the fields in this layer. This is meaningless (and set to zero) for non-numeric fields:

>>> layer.field_precisions
[0, 0, 15, 0]
extent

Returns the spatial extent of this layer, as an Envelope object:

>>> layer.extent.tuple
(-104.609252, 29.763374, -95.23506, 38.971823)
srs

Property that returns the SpatialReference associated with this layer:

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

Property that may be used to retrieve or set a spatial filter for this layer. A spatial filter can only be set with an OGRGeometry instance, a 4-tuple extent, or None. When set with something other than None, only features that intersect the filter will be returned when iterating over the layer:

>>> 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()

A method that returns a list of the values of a given field for each feature in the layer:

>>> layer.get_fields('Name')
['Pueblo', 'Lawrence', 'Houston']
get_geoms(geos=False)

A method that returns a list containing the geometry of each feature in the layer. If the optional argument geos is set to True then the geometries are converted to GEOSGeometry objects. Otherwise, they are returned as OGRGeometry objects:

>>> [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'.

Особенность

class Feature

Feature оборачивает функцию OGR. Вы никогда не создаете объект Feature напрямую. Вместо этого вы извлекаете их из объекта Layer. Каждый объект состоит из геометрии и набора полей, содержащих дополнительные свойства. Геометрия поля доступна через его свойство geom, которое возвращает объект OGRGeometry. Функция ведет себя как стандартный контейнер Python для своих полей, которые он возвращает как объекты Field: вы можете получить доступ к полю напрямую по его индексу или имени или вы можете перебирать поля функции, например в цикле for.

geom

Returns the geometry for this feature, as an OGRGeometry object:

>>> city.geom.tuple
(-104.609252, 38.255001)
get

A method that returns the value of the given field (specified by name) for this feature, not a Field wrapper object:

>>> city.get('Population')
102121
geom_type

Возвращает тип геометрии для этого объекта в виде объекта OGRGeomType. Оно будет одинаковым для всех объектов в данном слое и эквивалентно свойству Layer.geom_type объекта Layer, из которого получен объект.

num_fields

Возвращает количество полей данных, связанных с объектом. Оно будет одинаковым для всех объектов данного слоя и эквивалентно свойству Layer.num_fields объекта Layer, из которого получен объект.

fields

Возвращает список имен полей данных, связанных с объектом. Оно будет одинаковым для всех объектов данного слоя и эквивалентно свойству Layer.fields объекта Layer, из которого получен объект.

fid

Returns the feature identifier within the layer:

>>> city.fid
0
layer_name

Returns the name of the Layer that the feature came from. This will be the same for all features in a given layer:

>>> city.layer_name
'cities'
index

A method that returns the index of the given field name. This will be the same for all features in a given layer:

>>> city.index('Population')
1

Поле

class Field
name

Returns the name of this field:

>>> city['Name'].name
'Name'
type

Returns the OGR type of this field, as an integer. The FIELD_CLASSES dictionary maps these values onto subclasses of Field:

>>> city['Density'].type
2
type_name

Returns a string with the name of the data type of this field:

>>> city['Name'].type_name
'String'
value

Returns the value of this field. The Field class itself returns the value as a string, but each subclass returns the value in the most appropriate form:

>>> city['Population'].value
102121
width

Returns the width of this field:

>>> city['Name'].width
80
precision

Returns the numeric precision of this field. This is meaningless (and set to zero) for non-numeric fields:

>>> city['Density'].precision
15
as_double()

Returns the value of the field as a double (float):

>>> city['Density'].as_double()
874.7
as_int()

Returns the value of the field as an integer:

>>> city['Population'].as_int()
102121
as_string()

Returns the value of the field as a string:

>>> city['Name'].as_string()
'Pueblo'
as_datetime()

Returns the value of the field as a tuple of date and time components:

>>> 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))

Водитель

class Driver(dr_input)

Класс Driver используется внутри для оболочки драйвера OGR DataSource.

driver_count

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

Геометрия OGR

OGRGeometry

OGRGeometry objects share similar functionality with GEOSGeometry objects and are thin wrappers around OGR’s internal geometry representation. Thus, they allow for more efficient access to data when using DataSource. Unlike its GEOS counterpart, OGRGeometry supports spatial reference systems and coordinate transformation:

>>> 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, буфером, содержащим данные WKB, или объектом OGRGeomType. Эти объекты также возвращаются из атрибута Feature.geom при чтении векторных данных из Layer (который, в свою очередь, является частью DataSource).

classmethod from_gml(gml_string)

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

classmethod from_bbox(bbox)

Создает Polygon из заданной ограничивающей рамки (четверки).

__len__()

Возвращает количество точек в LineString, количество колец в Polygon или количество геометрических фигур в GeometryCollection. Не применимо к другим типам геометрии.

__iter__()

Выполняет итерацию по точкам в LineString, кольцам в Polygon или геометрии в GeometryCollection. Не применимо к другим типам геометрии.

__getitem__()

Возвращает точку по указанному индексу для LineString, внутреннее кольцо по указанному индексу для Polygon или геометрию по указанному индексу в GeometryCollection. Не применимо к другим типам геометрии.

dimension

Returns the number of coordinated dimensions of the geometry, i.e. 0 for points, 1 for lines, and so forth:

>> polygon.dimension
2
coord_dim

Returns or sets the coordinate dimension of this geometry. For example, the value would be 2 for two-dimensional geometries.

geom_count

Returns the number of elements in this geometry:

>>> polygon.geom_count
1
point_count

Returns the number of points used to describe this geometry:

>>> polygon.point_count
4
num_points

Псевдоним для point_count.

num_coords

Псевдоним для point_count.

geom_type

Возвращает тип этой геометрии в виде объекта OGRGeomType.

geom_name

Returns the name of the type of this geometry:

>>> polygon.geom_name
'POLYGON'
area

Returns the area of this geometry, or 0 for geometries that do not contain an area:

>>> polygon.area
25.0
envelope

Возвращает оболочку этой геометрии как объект Envelope.

extent

Returns the envelope of this geometry as a 4-tuple, instead of as an Envelope object:

>>> point.extent
(0.0, 0.0, 5.0, 5.0)
srs

This property controls the spatial reference for this geometry, or None if no spatial reference system has been assigned to it. If assigned, accessing this property returns a SpatialReference object. It may be set with another SpatialReference object, or any input that SpatialReference accepts. Example:

>>> city.geom.srs.name
'GCS_WGS_1984'
srid

Возвращает или устанавливает идентификатор пространственной привязки, соответствующий SpatialReference этой геометрии. Возвращает None, если с этой геометрией не связана информация о пространственной привязке, или если SRID не может быть определен.

geos

Возвращает объект GEOSGeometry, соответствующий этой геометрии.

gml

Returns a string representation of this geometry in GML format:

>>> OGRGeometry('POINT(1 2)').gml
'<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'
hex

Returns a string representation of this geometry in HEX WKB format:

>>> OGRGeometry('POINT(1 2)').hex
'0101000000000000000000F03F0000000000000040'
json

Returns a string representation of this geometry in JSON format:

>>> OGRGeometry('POINT(1 2)').json
'{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'
kml

Возвращает строковое представление этой геометрии в формате KML.

wkb_size

Returns the size of the WKB buffer needed to hold a WKB representation of this geometry:

>>> OGRGeometry('POINT(1 2)').wkb_size
21
wkb

Возвращает буфер, содержащий WKB-представление этой геометрии.

wkt

Возвращает строковое представление этой геометрии в формате WKT.

ewkt

Возвращает представление EWKT этой геометрии.

clone()

Возвращает новый OGRGeometry клон этого геометрического объекта.

close_rings()

If there are any rings within this geometry that have not been closed, this routine will do so by adding the starting point to the end:

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

Returns the coordinates of a point geometry as a tuple, the coordinates of a line geometry as a tuple of tuples, and so forth:

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

Returns the X coordinate of this point:

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

Returns the Y coordinate of this point:

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

Returns the Z coordinate of this point, or None if the point does not have a Z coordinate:

>>> OGRGeometry('POINT (1 2 3)').z
3.0
class LineString
x

Returns a list of X coordinates in this line:

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

Returns a list of Y coordinates in this line:

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

Returns a list of Z coordinates in this line, or None if the line does not have Z coordinates:

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

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

exterior_ring

Псевдоним для shell.

centroid

Returns a Point representing the centroid of this polygon.

class GeometryCollection
add(geom)

Добавляет геометрию в эту коллекцию геометрии. Не применимо к другим типам геометрии.

OGRGeomType

class OGRGeomType(type_input)

This class allows for the representation of an OGR geometry type in any of several ways:

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

Returns a short-hand string form of the OGR Geometry type:

>>> gt1.name
'Polygon'
num

Returns the number corresponding to the OGR geometry type:

>>> gt1.num
3
django

Returns the Django field type (a subclass of GeometryField) to use for storing this OGR type, or None if there is no appropriate Django type:

>>> gt1.django
'PolygonField'

Конверт

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)

Объекты системы координат

Пространственная ссылка

class SpatialReference(srs_input)

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

  • Хорошо известный текст OGC (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)

Returns the value of the given string attribute node, None if the node doesn’t exist. Can also take a tuple as a parameter, (target, child), where child is the index of the attribute in the WKT. For example:

>>> 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)

Represents a coordinate system transform. It is initialized with two SpatialReference, representing the source and target coordinate systems, respectively. These objects should be used when performing the same coordinate transformation repeatedly on different geometries:

>>> ct = CoordTransform(SpatialReference('WGS84'), SpatialReference('NAD83'))
>>> for feat in layer:
...     geom = feat.geom # getting clone of feature geometry
...     geom.transform(ct) # transforming

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

GDALRaster

GDALRaster — это оболочка для исходного объекта растра GDAL, которая поддерживает чтение данных из различных форматов геопространственных файлов и источников данных, поддерживаемых GDAL, с использованием согласованного интерфейса. Каждый источник данных представлен объектом GDALRaster, который содержит один или несколько слоев данных, называемых полосами. Каждый канал, представленный объектом GDALBand, содержит данные изображения с географической привязкой. Например, изображение RGB представлено тремя полосами: одна для красного, одна для зеленого и одна для синего.

Примечание

Для растровых данных нет разницы между экземпляром растра и его источником данных. В отличие от объектов Geometry, объекты GDALRaster всегда являются источником данных. Временные растры могут быть созданы в памяти с помощью соответствующего драйвера, но они будут того же класса, что и файловые источники растров.

class GDALRaster(ds_input, write=False)

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

The first parameter can take three forms: a string representing a file path, a dictionary with values defining a new raster, or a bytes object representing a raster file.

Если входными данными является путь к файлу, растр открывается оттуда. Если входные данные представляют собой необработанные данные в словаре, параметры «ширина», «высота» и «srid» являются обязательными. Если входные данные представляют собой байтовый объект, он будет открыт с использованием виртуальной файловой системы GDAL.

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

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

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

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

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

Имя драйвера GDAL, используемого для обработки входного файла. Для GDALRaster, созданных из файла, тип драйвера определяется автоматически. По умолчанию растры создаются в памяти (MEM), но при необходимости их можно изменить. Например, используйте GTiff для файла GeoTiff. Список типов файлов см. также в списке `Растровые форматы GDAL`__.

Растр в памяти создается с помощью следующего примера:

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

Растр GeoTiff на основе файла создается с помощью следующего примера:

>>> import tempfile
>>> rstfile = tempfile.NamedTemporaryFile(suffix='.tif')
>>> rst = GDALRaster({'driver': 'GTiff', 'name': rstfile.name, 'srid': 4326,
...                   'width': 255, 'height': 255, 'nr_of_bands': 1})
>>> rst.name
'/tmp/tmp7x9H4J.tif'           # The exact filename will be different on your computer
>>> rst.driver.name
'GTiff'
width

Ширина источника в пикселях (ось X).

>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).width
10
height

Высота источника в пикселях (ось Y).

>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).height
20
srs

Пространственная система привязки растра в виде экземпляра SpatialReference. SRS можно изменить, установив для него другой 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 аналогично соответствующему аргументу конструктора класса. Это словарь с характеристиками целевого растра. Допустимые значения ключей словаря: ширина, высота, SRID, начало координат, масштаб, наклон, тип данных, драйвер и имя (имя файла).

По умолчанию функции деформации сохраняют большинство параметров равными значениям исходного исходного растра, поэтому необходимо указать только те параметры, которые следует изменить. Обратите внимание, что сюда входит и драйвер, поэтому для файловых растров функция деформации создаст новый растр на диске.

Единственный параметр, который задается иначе, чем у исходного растра, — это имя. Значением имени растра по умолчанию является имя исходного растра, к которому добавляется '_copy' + source_driver_name. Для файловых растров рекомендуется указывать путь к файлу целевого растра.

Алгоритм повторной выборки, используемый для деформации, можно указать с помощью аргумента resampling. По умолчанию установлено значение «NearestNeighbor», а другими допустимыми значениями являются «Билинейный», «Кубический», «Кубический сплайн», «Ланцос», «Средний» и «Режим».

Аргумент max_error можно использовать для указания максимальной ошибки, измеренной во входных пикселях, которая допускается при аппроксимации преобразования. Значение по умолчанию — 0,0 для точных вычислений.

Для пользователей, знакомых с GDAL, эта функция аналогична утилите командной строки gdalwarp.

Например, функцию деформации можно использовать для агрегирования растра до двойного его исходного пиксельного масштаба:

>>> 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]
Changed in Django 3.2:

Support for SpatialReference srs was added

info

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

metadata

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

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

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

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

Байтовое представление этого растра. Возвращает None для растров, которые не хранятся в виртуальной файловой системе GDAL.

is_vsi_based

Логическое значение, указывающее, хранится ли этот растр в виртуальной файловой системе GDAL.

GDALBand

class GDALBand

Экземпляры GDALRaster не создаются явно, а скорее получаются из объекта GDALRaster через его атрибут bands. GDALBands содержит фактические значения пикселей растра.

description

Название или описание группы, если таковое имеется.

width

Ширина полосы в пикселях (ось X).

height

Высота полосы в пикселях (ось Y).

pixel_count

Общее количество пикселей в этой полосе. Равен ширина * высота.

statistics(refresh=False, approximate=False)

Вычислите статистику по значениям пикселей этой полосы. Возвращаемое значение представляет собой кортеж со следующей структурой: (минимум, максимум, среднее, стандартное отклонение).

Если аргумент approximate установлен в True, статистика может быть вычислена на основе обзоров или подмножества фрагментов изображений.

Если для аргумента refresh установлено значение True, статистика будет рассчитываться непосредственно из данных, а кеш будет обновляться с учетом результата.

Если найдено значение постоянного кэша, это значение возвращается. Для растровых форматов, использующих службы постоянных вспомогательных метаданных (PAM), статистика может кэшироваться во вспомогательном файле. В некоторых случаях эти метаданные могут не синхронизироваться со значениями пикселей или вызывать возврат значений из предыдущего вызова, которые не отражают значение аргумента approximate. В таких случаях используйте аргумент «обновить», чтобы получить обновленные значения и сохранить их в кеше.

Для пустых полос (где все значения пикселей «нет данных») вся статистика возвращается как «Нет».

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

min

Минимальное значение пикселя полосы (исключая значение «нет данных»).

max

Максимальное значение пикселя полосы (исключая значение «нет данных»).

mean

Среднее значение всех пикселей полосы (исключая значение «нет данных»).

std

Стандартное отклонение всех значений пикселей полосы (исключая значение «нет данных»).

nodata_value

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

To delete an existing «no data» value, set this property to None (requires GDAL ≥ 2.1).

datatype(as_string=False)

The data type contained in the band, as an integer constant between 0 (Unknown) and 11. If as_string is True, the data type is returned as a string with the following possible values: GDT_Unknown, GDT_Byte, GDT_UInt16, GDT_Int16, GDT_UInt32, GDT_Int32, GDT_Float32, GDT_Float64, GDT_CInt16, GDT_CInt32, GDT_CFloat32, and GDT_CFloat64.

color_interp(as_string=False)

Интерпретация цвета полосы в виде целого числа от 0 до 16. Если as_string имеет значение True, тип данных возвращается в виде строки со следующими возможными значениями: GCI_Undefine, 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.

ширина

необходимый

Сопоставляется с атрибутом width.

высота

необходимый

Сопоставляется с атрибутом height.

водитель

МЕМ

Сопоставляется с атрибутом driver.

name

''

См. ниже

происхождение

0

Сопоставляется с атрибутом origin.

масштаб

0

Сопоставляется с атрибутом scale.

перекос

0

Сопоставляется с атрибутом width.

группы

[]

См. ниже

nr_of_bands

0

См. ниже

тип данных

6

См. ниже

papsz_options

{}

См. ниже

name

Строка, представляющая имя растра. При создании файлового растра этот параметр должен быть путем к файлу нового растра. Если имя начинается с /vsimem/, растр создается в виртуальной файловой системе GDAL.

datatype

Целое число, представляющее тип данных для всех каналов. По умолчанию 6 (Float32). Все каналы нового растра должны иметь один и тот же тип данных. Сопоставление значений:

Значение

Тип пикселя GDAL

Описание

1

GDT_байт

Eight bit unsigned integer

2

GDT_UInt16

Sixteen bit unsigned integer

3

GDT_Int16

Sixteen bit signed integer

4

GDT_UInt32

Thirty-two bit unsigned integer

5

GDT_Int32

Thirty-two bit signed integer

6

GDT_Float32

Thirty-two bit floating point

7

GDT_Float64

Sixty-four bit floating point

nr_of_bands

Целое число, представляющее количество каналов растра. Растр может быть создан без передачи данных канала при создании. Если количество полос не указано, оно автоматически рассчитывается на основе длины входных данных bands. После создания количество групп изменить нельзя.

bands

Список словарейband_input с входными данными диапазона. Итоговые индексы полос такие же, как в приведенном списке. Определение входного словаря полосы приведено ниже. Если данные каналов не предоставлены, значения растровых каналов создаются как массив нулей, а для значения «нет данных» устанавливается значение «Нет».

papsz_options

Словарь с опциями создания растра. Пары ключ-значение входного словаря передаются драйверу при создании растра.

Доступные параметры зависят от драйвера и описаны в документации каждого драйвера.

Значения в словаре не чувствительны к регистру и автоматически преобразуются в правильный строковый формат при создании.

The following example uses some of the options available for the `GTiff driver`__. The result is a compressed signed byte raster with an internal tiling scheme. The internal tiles have a block size of 23 by 23:

>>> GDALRaster({
...    'driver': 'GTiff',
...    'name': '/path/to/new/file.tif',
...    'srid': 4326,
...    'width': 255,
...    'height': 255,
...    'nr_of_bands': 1,
...    'papsz_options': {
...        'compress': 'packbits',
...        'pixeltype': 'signedbyte',
...        'tiled': 'yes',
...        'blockxsize': 23,
...        'blockysize': 23,
...    }
... })

Словарь band_input

Ключ Bands в словаре ds_input представляет собой список словарей Band_input. Каждый словарь band_input может содержать значения пикселей и значение «нет данных», которое должно быть установлено на каналах нового растра. Массив данных может иметь полный размер нового растра или быть меньше. Для массивов, размер которых меньше полного растра, значениями пикселей управляют клавиши размера, формы и смещения. Соответствующие ключи передаются методу data(). Их функциональность аналогична настройке данных полосы этим методом. В следующей таблице описаны ключи, которые можно использовать.

Ключ

По умолчанию

Использование

nodata_value

None

Сопоставляется с атрибутом nodata_value.

данные

То же, что nodata_value или 0

Передается в метод data().

размер

высотой) растра

Передается в метод data().

форма

То же, что и размер

Передается в метод data().

смещение

(0, 0)

Передается в метод data().

Использование виртуальной файловой системы GDAL

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

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

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

Input provided as bytes has to be a full binary representation of a file. For instance:

# 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 возвращает байтовое представление растра.

Here’s how to create a raster and return it as a file in an 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

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

Back to Top