GDAL API
GDAL означает Библиотека абстракции геопространственных данных и представляет собой настоящий «швейцарский армейский нож» функциональности данных ГИС. Подмножество GDAL — это OGR — Библиотека простых объектов, которая специализируется на чтении и записи векторных географических данных в различных стандартных форматах.
GeoDjango предоставляет высокоуровневый Python-интерфейс для некоторых возможностей OGR, включая чтение и преобразование координат векторных пространственных данных и минимальную поддержку функций GDAL в отношении растровых (изображений) данных.
Примечание
Хотя модуль называется gdal, GeoDjango в настоящее время поддерживает только некоторые возможности OGR и растровых функций GDAL.
Обзор
Образцы данных
Инструменты GDAL/OGR, описанные здесь, предназначены для помощи в чтении ваших геопространственных данных, для того, чтобы большинство из них были полезны, вам необходимо иметь какие-то данные для работы. Если вы начинаете и у вас еще нет собственных данных для использования, тесты GeoDjango содержат ряд простых наборов данных, которые вы можете использовать для тестирования. Вы можете скачать их здесь:
$ wget https://raw.githubusercontent.com/django/django/master/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
$ wget https://raw.githubusercontent.com/django/django/master/tests/gis_tests/data/rasters/raster.tif
Объекты источника векторных данных
DataSource
DataSource — это оболочка для объекта источника данных OGR, которая поддерживает чтение данных из различных поддерживаемых OGR геопространственных форматов файлов и источников данных с использованием простого и согласованного интерфейса. Каждый источник данных представлен объектом DataSource, который содержит один или несколько слоёв данных. Каждый слой, представленный объектом Layer, содержит некоторое количество географических объектов (Feature), информацию о типе объектов, содержащихся в этом слое (например, точки, полигоны и т. д.), а также названия и типы любых дополнительных полей (Field) данных, которые могут быть связаны с каждым объектом в этом слое.
-
class DataSource(ds_input, encoding='utf-8') -
Конструктор
DataSourceтребует только одного параметра: путь к файлу, который вы хотите прочитать. Однако OGR также поддерживает различные более сложные источники данных, включая базы данных, к которым можно получить доступ, передав специальную строку имени вместо пути. Для получения дополнительной информации см. документацию OGR Vector Formats. СвойствоnameэкземпляраDataSourceвозвращает имя OGR базового источника данных, который он использует.Необязательный параметр
encodingпозволяет указать нестандартное кодирование строк в источнике. Это обычно полезно, когда вы получаетеDjangoUnicodeDecodeErrorисключения при чтении значений полей.После создания вашего
DataSource, вы можете узнать, сколько слоев данных он содержит, обратившись к свойствуlayer_countили (эквивалентно) используя функциюlen(). Сведения о доступе к самим слоям данных см. в следующем разделе:>>> from django.contrib.gis.gdal import DataSource >>> ds = DataSource('/path/to/your/cities.shp') >>> ds.name '/path/to/your/cities.shp' >>> ds.layer_count # This file only contains one layer 1-
layer_count
Возвращает количество слоёв в источнике данных.
-
name
Возвращает имя источника данных.
-
Layer
-
class Layer -
Layer— это оболочка для слоя данных в объектеDataSource. Вы никогда не создаёте объектLayerнапрямую. Вместо этого вы получаете их из объектаDataSource, который по сути является стандартным контейнером Python для объектовLayer. Например, вы можете получить доступ к определённому слою по его индексу (например,ds[0]для доступа к первому слою), или вы можете перебирать все слои в контейнере в циклеfor. Сам объектLayerдействует как контейнер для геометрических объектов.Как правило, все объекты в данном слое имеют один и тот же тип геометрии. Свойство
geom_typeслоя — этоOGRGeomType, который идентифицирует тип объекта. Мы можем использовать его для вывода некоторой базовой информации о каждом слое вDataSource:>>> for layer in ds: ... print('Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name)) ... Layer "cities": 3 PointsПример вывода — из источника данных городов, загруженного выше, который, очевидно, содержит один слой под названием
"cities", который содержит три точечных объекта. Для простоты в примерах ниже предполагается, что вы сохранили этот слой в переменнойlayer:>>> layer = ds[0]
-
name
Возвращает имя этого слоя в источнике данных.
>>> layer.name 'cities'
-
num_feat
Возвращает количество объектов в слое. То же самое, что и
len(layer):>>> layer.num_feat 3
-
geom_type
Возвращает тип геометрии слоя в виде объекта
OGRGeomType:>>> layer.geom_type.name 'Point'
-
num_fields
Возвращает количество полей в слое, т. е. количество полей данных, связанных с каждым объектом в слое:
>>> layer.num_fields 4
-
fields
Возвращает список имён каждого из полей в этом слое:
>>> layer.fields ['Name', 'Population', 'Density', 'Created']
Возвращает список типов данных каждого из полей в этом слое. Это подклассы
Field, обсуждаемые ниже:>>> [ft.__name__ for ft in layer.field_types] ['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
-
field_widths
Возвращает список максимальных ширин полей для каждого из полей в этом слое:
>>> layer.field_widths [80, 11, 24, 10]
-
field_precisions
Возвращает список числовых точностей для каждого из полей в этом слое. Это бессмысленно (и установлено в ноль) для нечисловых полей:
>>> layer.field_precisions [0, 0, 15, 0]
-
extent
Возвращает пространственный объём этого слоя в виде объекта
Envelope:>>> layer.extent.tuple (-104.609252, 29.763374, -95.23506, 38.971823)
-
srs
Свойство, возвращающее
SpatialReference, связанное с этим слоем:>>> print(layer.srs) GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]]Если у
Layerнет связанной с ним информации о пространственной системе координат, возвращаетсяNone.-
spatial_filter
Свойство, которое можно использовать для получения или установки пространственного фильтра для этого слоя. Пространственный фильтр может быть установлен только с помощью экземпляра
OGRGeometry, 4-кратного расширения илиNone. Когда установлено значение, отличное отNone, при итерировании по слою будут возвращены только объекты, пересекающие фильтр:>>> print(layer.spatial_filter) None >>> print(len(layer)) 3 >>> [feat.get('Name') for feat in layer] ['Pueblo', 'Lawrence', 'Houston'] >>> ks_extent = (-102.051, 36.99, -94.59, 40.00) # Extent for state of Kansas >>> layer.spatial_filter = ks_extent >>> len(layer) 1 >>> [feat.get('Name') for feat in layer] ['Lawrence'] >>> layer.spatial_filter = None >>> len(layer) 3-
get_fields()
Метод, возвращающий список значений заданного поля для каждого объекта в слое:
>>> layer.get_fields('Name') ['Pueblo', 'Lawrence', 'Houston']-
get_geoms(geos=False)
Метод, возвращающий список, содержащий геометрию каждого объекта в слое. Если необязательный аргумент
geosустановлен вTrue, геометрии преобразуются в объектыGEOSGeometry. В противном случае они возвращаются как объектыOGRGeometry:>>> [pt.tuple for pt in layer.get_geoms()] [(-104.609252, 38.255001), (-95.23506, 38.971823), (-95.363151, 29.763374)]
-
test_capability(capability)
Возвращает булево значение, указывающее, поддерживает ли этот слой данную возможность (строку). Примеры допустимых строк возможностей включают:
'RandomRead','SequentialWrite','RandomWrite','FastSpatialFilter','FastFeatureCount','FastGetExtent','CreateField','Transactions','DeleteFeature', и'FastSetNextByIndex'. -
Feature
-
class Feature -
Featureоборачивает объект OGR Feature. Вы никогда не создаёте объектFeatureнапрямую. Вместо этого, вы получаете их из объектаLayer. Каждый объект Feature состоит из геометрии и набора полей, содержащих дополнительные свойства. Геометрия поля доступна через свойствоgeom, которое возвращает объектOGRGeometry. ОбъектFeatureведет себя как стандартный контейнер Python для своих полей, которые он возвращает как объектыField: вы можете получить доступ к полю по его индексу или имени, или вы можете перебрать поля объекта Feature, например, в циклеfor.-
geom
Возвращает геометрию для этого объекта Feature, как объект
OGRGeometry:>>> city.geom.tuple (-104.609252, 38.255001)
-
get
Метод, возвращающий значение заданного поля (указанного по имени) для данного объекта Feature, не являющегося объектом-обёрткой
Field:>>> city.get('Population') 102121-
geom_type
Возвращает тип геометрии для данного объекта Feature, как объект
OGRGeomType. Это будет одинаково для всех объектов Feature в данном слое и эквивалентно свойствуLayer.geom_typeобъектаLayer, из которого был получен объект Feature.-
num_fields
Возвращает количество полей данных, связанных с объектом Feature. Это будет одинаково для всех объектов Feature в данном слое и эквивалентно свойству
Layer.num_fieldsобъектаLayer, из которого был получен объект Feature.-
fields
Возвращает список имён полей данных, связанных с объектом Feature. Это будет одинаково для всех объектов Feature в данном слое и эквивалентно свойству
Layer.fieldsобъектаLayer, из которого был получен объект Feature.-
fid
Возвращает идентификатор объекта Feature в слое:
>>> city.fid 0
-
layer_name
Возвращает имя
Layer, из которого был получен объект Feature. Это будет одинаково для всех объектов Feature в данном слое:>>> city.layer_name 'cities'
-
index
Метод, возвращающий индекс заданного имени поля. Это будет одинаково для всех объектов Feature в данном слое:
>>> city.index('Population') 1 -
Field
-
class Field -
-
name
Возвращает имя этого поля:
>>> city['Name'].name 'Name'
-
type
Возвращает тип OGR этого поля, как целое число. Словарь
FIELD_CLASSESотображает эти значения на подклассыField:>>> city['Density'].type 2
-
type_name
Возвращает строку с именем типа данных этого поля:
>>> city['Name'].type_name 'String'
-
value
Возвращает значение этого поля. Класс
Fieldсам возвращает значение как строку, но каждый подкласс возвращает значение в наиболее подходящем формате:>>> city['Population'].value 102121
-
width
Возвращает ширину этого поля:
>>> city['Name'].width 80
-
precision
Возвращает числовую точность этого поля. Это не имеет смысла (и установлено в ноль) для полей, не являющихся числовыми:
>>> city['Density'].precision 15
-
as_double()
Возвращает значение поля как double (float):
>>> city['Density'].as_double() 874.7
-
as_int()
Возвращает значение поля как целое число:
>>> city['Population'].as_int() 102121
-
as_string()
Возвращает значение поля как строку:
>>> city['Name'].as_string() 'Pueblo'
-
as_datetime()
Возвращает значение поля как кортеж компонентов даты и времени:
>>> city['Created'].as_datetime() (c_long(1999), c_long(5), c_long(23), c_long(0), c_long(0), c_long(0), c_long(0))
-
Driver
-
class Driver(dr_input) -
Класс
Driverиспользуется внутри для обертывания драйвера OGRDataSource.-
driver_count
Возвращает количество OGR векторных драйверов, которые в настоящее время зарегистрированы.
-
OGR Геометрии
OGRGeometry
OGRGeometry объекты разделяют схожую функциональность с объектами GEOSGeometry и являются тонкими обёртками вокруг внутренней геометрии представления OGR. Таким образом, они обеспечивают более эффективный доступ к данным при использовании DataSource. В отличие от своего аналога GEOS, OGRGeometry поддерживает системы пространственных ссылок и преобразование координат:
>>> from django.contrib.gis.gdal import OGRGeometry
>>> polygon = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5))')
-
class OGRGeometry(geom_input, srs=None) -
Этот объект является оболочкой для класса OGR Geometry. Эти объекты создаются непосредственно из переданного параметра
geom_input, который может быть строкой, содержащей WKT, HEX, GeoJSON,buffer, содержащим данные WKB, или объектомOGRGeomType. Эти объекты также возвращаются из атрибутаFeature.geomпри чтении векторных данных изLayer(который, в свою очередь, является частьюDataSource).-
classmethod from_gml(gml_string)
Новая функция в Django 1.11.Создаёт объект
OGRGeometryиз переданной строки GML.-
classmethod from_bbox(bbox)
Создаёт
Polygonиз переданной прямоугольной области (кортежа из 4 элементов).-
__len__()
Возвращает количество точек в
LineString, количество колец вPolygonили количество геометрий вGeometryCollection. Неприменимо к другим типам геометрий.-
__iter__()
Итерируется по точкам в
LineString, кольцам вPolygonили геометриям вGeometryCollection. Неприменимо к другим типам геометрий.-
__getitem__()
Возвращает точку по указанному индексу для
LineString, внутреннее кольцо по указанному индексу дляPolygonили геометрию по указанному индексу вGeometryCollection. Неприменимо к другим типам геометрий.-
dimension
Возвращает количество координатных измерений геометрии, т.е. 0 для точек, 1 для линий и т.д.:
>> polygon.dimension 2
-
coord_dim
Возвращает или устанавливает размерность координат этой геометрии. Например, значение будет 2 для двумерных геометрий.
-
geom_count
Возвращает количество элементов в этой геометрии:
>>> polygon.geom_count 1
-
point_count
Возвращает количество точек, используемых для описания этой геометрии:
>>> polygon.point_count 4
-
num_points
Псевдоним для
point_count.-
num_coords
Псевдоним для
point_count.-
geom_type
Возвращает тип этой геометрии как объект
OGRGeomType.-
geom_name
Возвращает имя типа этой геометрии:
>>> polygon.geom_name 'POLYGON'
-
area
Возвращает площадь этой геометрии или 0 для геометрий, не содержащих площади:
>>> polygon.area 25.0
-
envelope
Возвращает прямоугольную область этой геометрии как объект
Envelope.-
extent
Возвращает прямоугольную область этой геометрии как кортеж из 4 элементов вместо объекта
Envelope:>>> point.extent (0.0, 0.0, 5.0, 5.0)
-
srs
Этот атрибут контролирует систему пространственной привязки для этой геометрии или
None, если система пространственной привязки не была назначена. Если назначена, обращение к этому свойству возвращает объектSpatialReference. Его можно установить с помощью другого объектаSpatialReferenceили любого входного значения, которое принимаетSpatialReference. Пример:>>> city.geom.srs.name 'GCS_WGS_1984'
-
srid
Возвращает или устанавливает идентификатор системы пространственной привязки, соответствующий
SpatialReferenceэтой геометрии. ВозвращаетNone, если информация о системе пространственной привязки отсутствует или SRID определить невозможно.-
geos
Возвращает объект
GEOSGeometry, соответствующий этой геометрии.-
gml
Возвращает строковое представление этой геометрии в формате GML:
>>> OGRGeometry('POINT(1 2)').gml '<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'-
hex
Возвращает строковое представление этой геометрии в формате HEX WKB:
>>> OGRGeometry('POINT(1 2)').hex '0101000000000000000000F03F0000000000000040'-
json
Возвращает строковое представление этой геометрии в формате JSON:
>>> OGRGeometry('POINT(1 2)').json '{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'-
kml
Возвращает строковое представление этой геометрии в формате KML.
-
wkb_size
Возвращает размер буфера WKB, необходимого для хранения представления WKB этой геометрии:
>>> OGRGeometry('POINT(1 2)').wkb_size 21-
wkb
Возвращает
buffer, содержащий представление WKB этой геометрии.-
wkt
Возвращает строковое представление этой геометрии в формате WKT.
-
ewkt
Возвращает представление EWKT этой геометрии.
-
clone()
Возвращает новый клон
OGRGeometryэтого объекта геометрии.-
close_rings()
Если в этой геометрии есть кольца, которые не были замкнуты, эта функция закроет их, добавив начальную точку в конец:
>>> triangle = OGRGeometry('LINEARRING (0 0,0 1,1 0)') >>> triangle.close_rings() >>> triangle.wkt 'LINEARRING (0 0,0 1,1 0,0 0)'-
transform(coord_trans, clone=False)
Преобразует эту геометрию в другую систему пространственной привязки. Может принимать объект
CoordTransform, объектSpatialReferenceили любое другое входное значение, принимаемоеSpatialReference(включая WKT и PROJ.4 строки системы пространственной привязки или целочисленный SRID).По умолчанию ничего не возвращается, и геометрия преобразуется на месте. Однако, если ключевое слово
cloneустановлено в значениеTrue, вместо этого возвращается преобразованный клон этой геометрии.-
intersects(other)
Возвращает
True, если эта геометрия пересекается с другой, в противном случае возвращаетFalse.-
equals(other)
Возвращает
True, если эта геометрия эквивалентна другой, в противном случае возвращаетFalse. -
-
disjoint(other)
Возвращает
True, если эта геометрия пространственно не пересекается с другой (т. е. не пересекается), в противном случае возвращаетFalse.-
touches(other)
Возвращает
True, если эта геометрия касается другой, в противном случае возвращаетFalse.-
crosses(other)
Возвращает
True, если эта геометрия пересекает другую, в противном случае возвращаетFalse.-
within(other)
Возвращает
True, если эта геометрия содержится внутри другой, в противном случае возвращаетFalse.-
contains(other)
Возвращает
True, если эта геометрия содержит другую, в противном случае возвращаетFalse.-
overlaps(other)
Возвращает
True, если эта геометрия перекрывается с другой, в противном случае возвращаетFalse.-
boundary()
Граница этой геометрии в виде нового объекта
OGRGeometry.-
convex_hull
Наименьший выпуклый многоугольник, содержащий эту геометрию, в виде нового объекта
OGRGeometryобъекта.-
difference()
Возвращает область, являющуюся разностью этой геометрии и другой, в виде нового объекта
OGRGeometryобъекта.-
intersection()
Возвращает область, являющуюся пересечением этой геометрии и другой, в виде нового объекта
OGRGeometryобъекта.-
sym_difference()
Возвращает область, являющуюся симметричной разностью этой геометрии и другой, в виде нового объекта
OGRGeometryобъекта.-
union()
Возвращает область, являющуюся объединением этой геометрии и другой, в виде нового объекта
OGRGeometryобъекта.-
tuple
Возвращает координаты геометрии точки в виде кортежа, координаты геометрии линии в виде кортежа кортежей и так далее:
>>> OGRGeometry('POINT (1 2)').tuple (1.0, 2.0) >>> OGRGeometry('LINESTRING (1 2,3 4)').tuple ((1.0, 2.0), (3.0, 4.0))-
coords
Псевдоним для
tuple.-
-
class Point -
-
x
Возвращает координату X этой точки:
>>> OGRGeometry('POINT (1 2)').x 1.0-
y
Возвращает координату Y этой точки:
>>> OGRGeometry('POINT (1 2)').y 2.0-
z
Возвращает координату Z этой точки или
None, если у точки нет координаты Z:>>> OGRGeometry('POINT (1 2 3)').z 3.0 -
-
class LineString -
-
x
Возвращает список координат X в этой линии:
>>> OGRGeometry('LINESTRING (1 2,3 4)').x [1.0, 3.0]-
y
Возвращает список координат Y в этой линии:
>>> OGRGeometry('LINESTRING (1 2,3 4)').y [2.0, 4.0]-
z
Возвращает список координат Z в этой линии, или
None, если у линии нет координат Z:>>> OGRGeometry('LINESTRING (1 2 3,4 5 6)').z [3.0, 6.0] -
-
class Polygon -
-
shell
Возвращает контур или внешнее кольцо этого многоугольника в виде геометрии
LinearRing.-
exterior_ring
Псевдоним для
shell.-
centroid
Возвращает
Point, представляющий центр масс этого многоугольника. -
-
class GeometryCollection -
-
add(geom)
Добавляет геометрию в эту коллекцию геометрий. Не применимо к другим типам геометрий.
-
OGRGeomType
-
class OGRGeomType(type_input) -
Этот класс позволяет представлять тип OGR-геометрии несколькими способами:
>>> from django.contrib.gis.gdal import OGRGeomType >>> gt1 = OGRGeomType(3) # Using an integer for the type >>> gt2 = OGRGeomType('Polygon') # Using a string >>> gt3 = OGRGeomType('POLYGON') # It's case-insensitive >>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects True True-
name
Возвращает короткую строковую форму типа OGR-геометрии:
>>> gt1.name 'Polygon'
-
num
Возвращает число, соответствующее типу OGR-геометрии:
>>> gt1.num 3
-
django
Возвращает тип поля Django (подкласс GeometryField), используемый для хранения этого типа OGR, или
None, если нет подходящего типа Django:>>> gt1.django 'PolygonField'
-
Envelope
-
class Envelope(*args) -
Представляет структуру OGR Envelope, содержащую минимальные и максимальные координаты X, Y для прямоугольника ограничивающей рамки. Имена переменных совместимы со структурой C OGR Envelope.
-
min_x
Значение минимальной координаты X.
-
min_y
Значение максимальной координаты X.
-
max_x
Значение минимальной координаты Y.
-
max_y
Значение максимальной координаты Y.
-
ur
Координата верхнего правого угла в виде кортежа.
-
ll
Координата нижнего левого угла в виде кортежа.
-
tuple
Кортеж, представляющий охватывающую рамку.
-
wkt
Строка, представляющая эту охватывающую рамку как многоугольник в формате WKT.
-
expand_to_include(*args)
-
Объекты систем координат
SpatialReference
-
class SpatialReference(srs_input) -
Объекты пространственной привязки инициализируются на основе заданного
srs_input, которое может быть одним из следующих:- OGC Well Known Text (WKT) (строка)
- Код EPSG (целое число или строка)
- Строка PROJ.4
- Сокращённая строка для общеизвестных стандартов (
'WGS84','WGS72','NAD27','NAD83')
Пример:
>>> wgs84 = SpatialReference('WGS84') # shorthand string >>> wgs84 = SpatialReference(4326) # EPSG code >>> wgs84 = SpatialReference('EPSG:4326') # EPSG string >>> proj4 = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ' >>> wgs84 = SpatialReference(proj4) # PROJ.4 string >>> wgs84 = SpatialReference("""GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]]""") # OGC WKT-
__getitem__(target)
Возвращает значение заданного узла атрибута строки,
Noneесли узел не существует. Также может принимать кортеж в качестве параметра, (target, child), где child — индекс атрибута в WKT. Например:>>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]') >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326 >>> print(srs['GEOGCS']) WGS 84 >>> print(srs['DATUM']) WGS_1984 >>> print(srs['AUTHORITY']) EPSG >>> print(srs['AUTHORITY', 1]) # The authority value 4326 >>> print(srs['TOWGS84', 4]) # the fourth value in this wkt 0 >>> print(srs['UNIT|AUTHORITY']) # For the units authority, have to use the pipe symbol. EPSG >>> print(srs['UNIT|AUTHORITY', 1]) # The authority value for the units 9122
-
attr_value(target, index=0)
Значение атрибута для заданного целевого узла (например,
'PROJCS'). Ключевое слово index указывает индекс дочернего узла для возврата.-
auth_name(target)
Возвращает имя полномочий для заданного целевого узла строки.
-
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.4.
-
import_user_input(user_input)
-
import_wkt(wkt)
Импортировать пространственную привязку из WKT.
-
import_xml(xml)
Импортировать пространственную привязку из XML.
-
name
Возвращает имя этой пространственной привязки.
-
srid
Возвращает SRID верхнего уровня полномочий или
Noneесли не определено.-
linear_name
Возвращает имя линейных единиц.
-
linear_units
Возвращает значение линейных единиц.
-
angular_name
Возвращает имя угловых единиц.
-
angular_units
Возвращает значение угловых единиц.
-
units
Возвращает кортеж из 2 элементов: значения единиц и имени единиц, автоматически определяя, нужно ли возвращать линейные или угловые единицы.
-
ellipsoid
Возвращает кортеж параметров эллипсоида для этой пространственной привязки: (большая полуось, малая полуось и обратное сжатие).
-
semi_major
Возвращает большую полуось эллипсоида для этой пространственной привязки.
-
semi_minor
Возвращает малую полуось эллипсоида для этой пространственной привязки.
-
inverse_flattening
Возвращает обратное сжатие эллипсоида для этой пространственной привязки.
-
geographic
Возвращает
Trueесли эта пространственная привязка географическая (корневой узелGEOGCS).-
local
Возвращает
Trueесли эта пространственная привязка локальная (корневой узелLOCAL_CS).-
projected
Возвращает
Trueесли эта пространственная привязка — проекционная система координат (корневой узелPROJCS).-
wkt
Возвращает представление WKT этой пространственной привязки.
-
pretty_wkt
Возвращает «красивое» представление WKT.
-
proj
Возвращает представление PROJ.4 для этой пространственной привязки.
-
proj4
Псевдоним для
SpatialReference.proj.-
xml
Возвращает XML-представление этой пространственной привязки.
CoordTransform
-
class CoordTransform(source, target)
Представляет преобразование системы координат. Инициализируется двумя SpatialReference, представляющими исходную и целевую системы координат соответственно. Эти объекты следует использовать при многократном выполнении одного и того же преобразования координат на различных геометриях:
>>> ct = CoordTransform(SpatialReference('WGS84'), SpatialReference('NAD83'))
>>> for feat in layer:
... geom = feat.geom # getting clone of feature geometry
... geom.transform(ct) # transforming
Растровые данные
GDALRaster
GDALRaster — это оболочка для объекта растрового источника GDAL, поддерживающая чтение данных из различных поддерживаемых GDAL геопространственных форматов файлов и источников с помощью простого и согласованного интерфейса. Каждый источник данных представлен объектом GDALRaster, который содержит один или несколько слоёв данных, называемых полосами. Каждая полоса, представленная объектом GDALBand, содержит геореференцированные данные изображения. Например, изображение RGB представлено тремя полосами: одной для красного, одной для зелёного и одной для синего.
Примечание
Для растровых данных нет различия между экземпляром растра и его источником данных. В отличие от объектов геометрии, объекты GDALRaster всегда являются источником данных. Временные растры могут быть созданы в памяти с использованием соответствующего драйвера, но они будут того же класса, что и растровые источники, основанные на файлах.
-
class GDALRaster(ds_input, write=False) -
Конструктор для
GDALRasterпринимает два параметра. Первый параметр определяет источник растра, а второй — открывается ли растр в режиме записи. Для вновь созданных растров второй параметр игнорируется, и новый растр всегда создаётся в режиме записи.Первый параметр может принимать три формы: строку, представляющую путь к файлу; словарь со значениями, определяющими новый растр; или байтовый объект, представляющий файл растра.
Если входной параметр — путь к файлу, растр открывается из него. Если входной параметр — сырые данные в словаре, то обязательными являются параметры
width,height, иsrid. Если входной параметр — байтовый объект, он будет открыт с использованием виртуальной файловой системы GDAL.Подробное описание создания растров с использованием входных данных в виде словаря см. в Создание растров из данных. Подробное описание создания растров в виртуальной файловой системе см. в Использование виртуальной файловой системы GDAL.
Следующий пример демонстрирует, как можно создать растры из различных источников входных данных (используя примерные данные из тестов GeoDjango; см. также раздел Образцы данных).
>>> from django.contrib.gis.gdal import GDALRaster >>> rst = GDALRaster('/path/to/your/raster.tif', write=False) >>> rst.name '/path/to/your/raster.tif' >>> rst.width, rst.height # This file has 163 x 174 pixels (163, 174) >>> rst = GDALRaster({ # Creates an in-memory raster ... 'srid': 4326, ... 'width': 4, ... 'height': 4, ... 'datatype': 1, ... 'bands': [{ ... 'data': (2, 3), ... 'offset': (1, 1), ... 'size': (2, 2), ... 'shape': (2, 1), ... 'nodata_value': 5, ... }] ... }) >>> rst.srs.srid 4326 >>> rst.width, rst.height (4, 4) >>> rst.bands[0].data() array([[5, 5, 5, 5], [5, 2, 3, 5], [5, 2, 3, 5], [5, 5, 5, 5]], dtype=uint8) >>> rst_file = open('/path/to/your/raster.tif', 'rb') >>> rst_bytes = rst_file.read() >>> rst = GDALRaster(rst_bytes) >>> rst.is_vsi_based True >>> rst.name # Stored in a random path in the vsimem filesystem. '/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'Изменено в Django 1.11:Добавлена возможность передавать параметры
size,shape, иoffsetпри создании объектовGDALRaster. Эти параметры можно передать через словарьds_input. Это позволяет точно управлять начальными значениями пикселей. Функциональность аналогична методуGDALBand.data().Изменено в Django 2.0:Добавлена возможность чтения и записи растров в основанной на памяти виртуальной файловой системе GDAL. Объекты
GDALRasterтеперь могут быть преобразованы в двоичные данные в памяти и обратно.-
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. Система пространственной привязки может быть изменена путём присвоения ей другого экземпляра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, а другие разрешённые значения —Bilinear,Cubic,CubicSpline,Lanczos,Average, иMode.Аргумент
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(srid, driver=None, name=None, resampling='NearestNeighbour', max_error=0.0) -
Возвращает преобразованную версию этого растра с указанным SRID.
Эта функция преобразует текущий растр в новую систему пространственной привязки, которую можно указать с помощью
srid. Она вычисляет границы и масштаб текущего растра в новой системе пространственной привязки и искажает растр с помощью функцииwarp.По умолчанию используется драйвер исходного растра, а имя растра — исходное имя, дополненное
'_copy' + source_driver_name. Разный драйвер или имя можно указать с помощью аргументовdriverиname.По умолчанию алгоритм ресемплирования —
NearestNeighbour, но его можно изменить с помощью аргументаresampling. По умолчанию максимальная допустимая ошибка ресемплирования — 0,0, и её можно изменить с помощью аргументаmax_error. Обратитесь к документацииwarpдля получения подробностей об этих аргументах.>>> rst = GDALRaster({ ... "width": 6, "height": 6, "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}] ... }) >>> target = rst.transform(4326) >>> target.origin [-82.98492744885776, 27.601924753080144]
-
info -
Добавлена в Django 2.0.
Возвращает строку с кратким описанием растра. Это эквивалентно утилите командной строки gdalinfo.
-
-
metadata -
Новое в Django 2.0.
Метаданные этого растрового изображения, представленные как вложенный словарь. Ключ первого уровня — область метаданных. Второй уровень содержит имена и значения элементов метаданных из каждой области.
Для установки или обновления элемента метаданных передайте соответствующий элемент метаданных в метод, используя вложенную структуру, описанную выше. Обновляются только ключи, присутствующие в указанном словаре; остальные метаданные остаются неизменными.
Для удаления элемента метаданных используйте
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 -
Новое в Django 2.0:
Представление этого растрового изображения в формате
bytes. ВозвращаетNoneдля растровых изображений, которые не хранятся в виртуальной файловой системе GDAL.
-
is_vsi_based -
Новое в Django 2.0:
Булево значение, указывающее, хранится ли это растровое изображение в виртуальной файловой системе GDAL.
-
GDALBand
-
class GDALBand -
Экземпляры класса
GDALBandне создаются явно, а получаются из объектаGDALRasterчерез его атрибутbands. Объекты GDALBand содержат фактические значения пикселей растрового изображения.-
description -
Имя или описание полосы, если оно есть.
-
width -
Ширина полосы в пикселях (ось X).
-
height -
Высота полосы в пикселях (ось Y).
-
pixel_count -
Общее количество пикселей в этой полосе. Равно
width * height.
-
statistics(refresh=False, approximate=False) -
Вычисление статистики по значениям пикселей этой полосы. Результат — кортеж со следующей структурой:
(minimum, maximum, mean, standard deviation).Если аргумент
approximateустановлен вTrue, статистика может быть вычислена на основе предварительных просмотров или подмножества фрагментов изображения.Если аргумент
refreshустановлен вTrue, статистика будет вычислена непосредственно из данных, а кэш будет обновлён результатом.Если в кэше найдено значение, оно возвращается. Для форматов растровых изображений, использующих службы постоянных вспомогательных метаданных (PAM), статистика может быть кэширована в вспомогательном файле. В некоторых случаях эти метаданные могут не синхронизироваться со значениями пикселей или привести к возвращению значений из предыдущего вызова, которые не отражают значение аргумента
approximate. В таких случаях используйте аргументrefreshдля получения обновлённых значений и сохранения их в кэше.Для пустых полос (где все значения пикселей — «нет данных»), вся статистика возвращается как
None.Статистику также можно получить, обратившись к свойствам
min,max,meanиstd.
-
min -
Минимальное значение пикселя полосы (без учёта значения «нет данных»).
-
max -
Максимальное значение пикселя полосы (без учёта значения «нет данных»).
-
mean -
Среднее значение всех значений пикселей полосы (без учёта значения «нет данных»).
-
std -
Среднеквадратическое отклонение всех значений пикселей полосы (без учёта значения «нет данных»).
-
nodata_value -
Значение «нет данных» для полосы — это специальное маркерное значение, используемое для маркировки пикселей, которые не являются допустимыми данными. Такие пиксели обычно не должны отображаться и не должны участвовать в аналитических операциях.
Для удаления существующего значения «нет данных» установите это свойство в
None(требуется GDAL ≥ 2.1).
-
datatype(as_string=False) -
Тип данных в полосе, как целое число от 0 (Неизвестно) до 11. Если
as_stringравноTrue, тип данных возвращается как строка со следующими возможными значениями:GDT_Unknown,GDT_Byte,GDT_UInt16,GDT_Int16,GDT_UInt32,GDT_Int32,GDT_Float32,GDT_Float64,GDT_CInt16,GDT_CInt32,GDT_CFloat32, иGDT_CFloat64.
-
color_interp(as_string=False) -
Новое в Django 2.0.
Интерпретация цвета для полосы, как целое число от 0 до 16. Если
as_stringравноTrue, тип данных возвращается как строка со следующими возможными значениями:GCI_Undefined,GCI_GrayIndex,GCI_PaletteIndex,GCI_RedBand,GCI_GreenBand,GCI_BlueBand,GCI_AlphaBand,GCI_HueBand,GCI_SaturationBand,GCI_LightnessBand,GCI_CyanBand,GCI_MagentaBand,GCI_YellowBand,GCI_BlackBand,GCI_YCbCr_YBand,GCI_YCbCr_CbBand, иGCI_YCbCr_CrBand.GCI_YCbCr_CrBandтакже представляетGCI_Maxпотому, что оба соответствуют целому числу 16, но возвращается только строкаGCI_YCbCr_CrBand.
-
data(data=None, offset=None, size=None, shape=None) -
Доступ к значениям пикселей
GDALBand. Возвращает массив данных целиком, если параметры не указаны. Можно запросить подмножество массива пикселей, указав смещение и размер блока как кортежи.Если NumPy доступен, данные возвращаются как массив NumPy. Для повышения производительности рекомендуется использовать NumPy.
Данные записываются в
GDALBandесли указан параметрdata. Входные данные могут быть одного из следующих типов — упакованная строка, буфер, список, массив и массив NumPy. Количество элементов во входных данных обычно должно соответствовать общему количеству пикселей в полосе или количеству пикселей для определённого блока значений пикселей, если указаны параметрыoffsetиsize.Если количество элементов во входных данных отличается от целевого блока пикселей, необходимо указать параметр
shape. Форма — кортеж, задающий ширину и высоту входных данных в пикселях. Данные затем дублируются для обновления значений пикселей выбранного блока. Это полезно, например, для заполнения всей полосы одним значением.Например:
>>> rst = GDALRaster({'width': 4, 'height': 4, 'srid': 4326, 'datatype': 1, 'nr_of_bands': 1}) >>> bnd = rst.bands[0] >>> bnd.data(range(16)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(offset=(1, 1), size=(2, 2)) array([[ 5, 6], [ 9, 10]], dtype=int8) >>> bnd.data(data=[-1, -2, -3, -4], offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -1, -2, 7], [ 8, -3, -4, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(data='\x9d\xa8\xb3\xbe', offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -99, -88, 7], [ 8, -77, -66, 11], [ 12, 13, 14, 15]], dtype=int8) >>> bnd.data([1], shape=(1, 1)) >>> bnd.data() array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], dtype=uint8) >>> bnd.data(range(4), shape=(1, 4)) array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], dtype=uint8)
-
metadata -
Новое в Django 2.0.
Метаданные этой полосы. Функциональность идентична
GDALRaster.metadata.
-
Создание растровых изображений из данных
Этот раздел описывает, как создать растровые изображения с нуля, используя параметр ds_input.
Новое растровое изображение создаётся, когда в конструктор GDALRaster передаётся словарь. Словарь содержит определяющие параметры нового растрового изображения, такие как начало координат, размер или система пространственной привязки. Словарь также может содержать данные пикселей и информацию о формате нового растрового изображения. Полученное растровое изображение может быть файловым или основанным на памяти, в зависимости от указанного драйвера.
Нет стандартного способа описания растровых данных в словаре или формате JSON. Определение входного словаря для класса GDALRaster поэтому специфично для Django. Оно вдохновлено форматом geojson, но стандарт geojson в настоящее время ограничен векторными форматами.
Примеры использования различных ключей при создании растровых изображений можно найти в документации соответствующих атрибутов и методов классов GDALRaster и GDALBand.
Словарь ds_input
Для создания растрового изображения в словаре ds_input требуются только несколько ключей: width, height, и srid. Все остальные параметры имеют значения по умолчанию (см. таблицу ниже). Список ключей, которые можно передать в словаре ds_input, тесно связан, но не идентичен свойствам класса GDALRaster. Многие параметры напрямую отображаются на эти свойства; остальные описаны ниже.
В следующей таблице описаны все ключи, которые можно задать в словаре ds_input.
| Ключ | Значение по умолчанию | Использование |
|---|---|---|
srid | обязательно | Сопоставлено с атрибутом srid |
width | обязательно | Сопоставлено с атрибутом width |
height | обязательно | Сопоставлено с атрибутом height |
driver | MEM | Сопоставлено с атрибутом driver |
name | '' | См. ниже |
origin | 0 | Сопоставлено с атрибутом origin |
scale | 0 | Сопоставлено с атрибутом scale |
skew | 0 | Сопоставлено с атрибутом width |
bands | [] | См. ниже |
nr_of_bands | 0 | См. ниже |
datatype | 6 | См. ниже |
papsz_options | {} | См. ниже |
-
name -
Строка, представляющая имя растра. При создании растра на основе файла, этот параметр должен содержать путь к файлу нового растра. Если имя начинается с
/vsimem/, растр создается в виртуальной файловой системе GDAL.
-
datatype -
Целое число, представляющее тип данных для всех полос. По умолчанию
6(Float32). Все полосы нового растра должны иметь одинаковый тип данных. Сопоставление значений:Значение Тип пикселя GDAL Описание 1 GDT_Byte Восьмибитное беззнаковое целое число 2 GDT_UInt16 Шестнадцатибитное беззнаковое целое число 3 GDT_Int16 Шестнадцатибитное знаковое целое число 4 GDT_UInt32 Тридцатидвухбитное беззнаковое целое число 5 GDT_Int32 Тридцатидвухбитное знаковое целое число 6 GDT_Float32 Тридцатидвухбитное число с плавающей точкой 7 GDT_Float64 Шестидесятичетырехбитное число с плавающей точкой
-
nr_of_bands -
Целое число, представляющее количество полос растра. Растр можно создать без передачи данных полосы при создании. Если количество полос не указано, оно автоматически вычисляется из длины входного массива
bands. Количество полос нельзя изменить после создания.
-
bands -
Список словарей
band_inputс входными данными полосы. Результирующие индексы полос совпадают с теми, что указаны в списке. Определение словаря входных данных полосы приведено ниже. Если данные полосы не предоставлены, значения полос растра инициализируются массивом нулей, а значение «без данных» устанавливается вNone.
-
papsz_options -
Добавлено в Django 2.0.
Словарь с параметрами создания растра. Пара ключ-значение входного словаря передаются драйверу при создании растра.
Доступные параметры зависят от драйвера и описаны в документации каждого драйвера.
Значения в словаре нечувствительны к регистру и автоматически преобразуются в правильный строковый формат при создании.
Следующий пример использует некоторые параметры, доступные для драйвера GTiff. Результатом является сжатый знаковый байтовый растр с внутренней схемой разбиения на блоки. Внутренние блоки имеют размер 23 на 23:
>>> GDALRaster({ ... 'driver': 'GTiff', ... 'name': '/path/to/new/file.tif', ... 'srid': 4326, ... 'width': 255, ... 'height': 255, ... 'nr_of_bands': 1, ... 'papsz_options': { ... 'compress': 'packbits', ... 'pixeltype': 'signedbyte', ... 'tiled': 'yes', ... 'blockxsize': 23, ... 'blockysize': 23, ... } ... })
Словарь band_input
Ключ bands в словаре ds_input представляет собой список band_input словарей. Каждый словарь band_input может содержать значения пикселей и значение «без данных», которое необходимо установить для полос нового растра. Массив данных может иметь полный размер нового растра или быть меньше. Для массивов, меньших, чем весь растр, ключи size, shape, и offset управляют значениями пикселей. Соответствующие ключи передаются методу data(). Их функциональность такая же, как установка данных полосы с помощью этого метода. В следующей таблице описаны ключи, которые можно использовать.
| Ключ | Значение по умолчанию | Использование |
|---|---|---|
nodata_value | None | Сопоставлено с атрибутом nodata_value |
data | То же, что nodata_value или 0
| Передается методу data() |
size | Размер растра | Передается методу data() |
shape | То же, что размер | Передается методу data() |
offset | (0, 0) | Передается методу data() |
Использование виртуальной файловой системы GDAL
GDAL имеет внутреннюю файловую систему на основе памяти, которая позволяет обрабатывать блоки памяти как файлы. Она может использоваться для чтения и записи объектов GDALRaster в двоичные буферы файлов.
Это полезно в веб-контекстах, где растры могут быть получены в виде буфера из удаленного хранилища или возвращены из представления без записи на диск.
Объекты GDALRaster создаются в виртуальной файловой системе, когда в качестве входных данных используется объект bytes, или когда путь к файлу начинается с /vsimem/.
Входные данные, предоставленные в виде bytes, должны представлять собой полное двоичное представление файла. Например:
# Read a raster as a file object from a remote source.
>>> from urllib.request import urlopen
>>> dat = urlopen('http://example.com/raster.tif').read()
# Instantiate a raster from the bytes object.
>>> rst = GDALRaster(dat)
# The name starts with /vsimem/, indicating that the raster lives in the
# virtual filesystem.
>>> rst.name
'/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'
Для создания нового виртуального растра на основе файла с нуля используйте представление словаря ds_input и укажите аргумент name, который начинается с /vsimem/ (подробнее о представлении словаря см. Создание растров из данных). Для виртуальных файлов растра атрибут vsi_buffer возвращает двоичное представление растра bytes.
Вот как создать растр и вернуть его как файл в HttpResponse:
>>> from django.http import HttpResponse
>>> rst = GDALRaster({
... 'name': '/vsimem/temporarymemfile',
... 'driver': 'tif',
... 'width': 6, 'height': 6, 'srid': 3086,
... 'origin': [500000, 400000],
... 'scale': [100, -100],
... 'bands': [{'data': range(36), 'nodata_value': 99}]
... })
>>> HttpResponse(rast.vsi_buffer, 'image/tiff')
Настройки
GDAL_LIBRARY_PATH
Строка, определяющая расположение библиотеки GDAL. Обычно эта настройка используется только если библиотека GDAL находится в нестандартном расположении (например, /home/john/lib/libgdal.so).
Исключения
-
exception GDALException -
Основное исключение GDAL, указывающее на ошибку, связанную с GDAL.
-
exception SRSException -
Исключение, которое возникает при возникновении ошибки при построении или использовании объекта системы пространственной привязки.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.0/ref/contrib/gis/gdal/