ГДАЛ 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 thelayer_countproperty, or (equivalently) by using thelen()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.Pathds_inputwas 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_typeproperty of a layer is anOGRGeomTypethat identifies the feature type. We can use it to print out some basic information about each layer in aDataSource:>>> 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 variablelayer:>>> 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
OGRGeomTypeobject:>>> 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
Envelopeobject:>>> layer.extent.tuple (-104.609252, 29.763374, -95.23506, 38.971823)
- srs¶
Property that returns the
SpatialReferenceassociated 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
OGRGeometryinstance, a 4-tuple extent, orNone. When set with something other thanNone, 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
geosis set toTruethen the geometries are converted toGEOSGeometryobjects. Otherwise, they are returned asOGRGeometryobjects:>>> [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
OGRGeometryobject:>>> 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
Fieldwrapper 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
Layerthat 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_CLASSESdictionary maps these values onto subclasses ofField:>>> 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
Fieldclass 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
Envelopeobject:>>> point.extent (0.0, 0.0, 5.0, 5.0)
- srs¶
This property controls the spatial reference for this geometry, or
Noneif no spatial reference system has been assigned to it. If assigned, accessing this property returns aSpatialReferenceobject. It may be set with anotherSpatialReferenceobject, or any input thatSpatialReferenceaccepts. 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
Noneif 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
Noneif the line does not have Z coordinates:>>> OGRGeometry('LINESTRING (1 2 3,4 5 6)').z [3.0, 6.0]
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
Noneif 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,
Noneif 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
SpatialReferencesrswas 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_stringisTrue, 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, andGDT_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.
Ключ |
По умолчанию |
Использование |
|---|---|---|
|
необходимый |
Сопоставляется с атрибутом |
|
необходимый |
Сопоставляется с атрибутом |
|
необходимый |
Сопоставляется с атрибутом |
|
|
Сопоставляется с атрибутом |
|
|
См. ниже |
|
|
Сопоставляется с атрибутом |
|
|
Сопоставляется с атрибутом |
|
|
Сопоставляется с атрибутом |
|
|
См. ниже |
|
|
См. ниже |
|
|
См. ниже |
|
|
См. ниже |
- 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(). Их функциональность аналогична настройке данных полосы этим методом. В следующей таблице описаны ключи, которые можно использовать.
Ключ |
По умолчанию |
Использование |
|---|---|---|
|
|
Сопоставляется с атрибутом |
|
То же, что |
Передается в метод |
|
|
Передается в метод |
|
То же, что и размер |
Передается в метод |
|
|
Передается в метод |
Использование виртуальной файловой системы 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¶
Исключение, возникающее при возникновении ошибки при построении или использовании объекта системы пространственной привязки.