GDAL API
GDAL означает Библиотеку абстракции геопространственных данных и представляет собой настоящий «швейцарский армейский нож» функциональности данных ГИС. Подмножество GDAL — OGR Библиотека простых объектов, специализирующаяся на чтении и записи векторных географических данных в различных стандартных форматах.
GeoDjango предоставляет высокоуровневый Python-интерфейс для некоторых возможностей OGR, включая чтение и преобразование координат векторных пространственных данных и минимальную поддержку функций GDAL по отношению к растровым (изображениям) данным.
Примечание
Хотя модуль называется gdal, GeoDjango в настоящее время поддерживает лишь некоторые возможности OGR и растровых функций GDAL.
Обзор
Образцы данных
Инструменты GDAL/OGR, описанные здесь, предназначены для помощи в чтении ваших геопространственных данных. Для их эффективного использования вам необходимо иметь данные. Если вы начинаете и еще не имеете собственных данных, тесты GeoDjango содержат ряд наборов данных, которые вы можете использовать для тестирования. Вы можете загрузить их здесь:
$ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
$ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/rasters/raster.tif
Объекты источника векторных данных
DataSource
DataSource является оболочкой для объекта источника данных OGR, которая поддерживает чтение данных из различных поддерживаемых OGR форматов и источников геопространственных файлов с помощью согласованного интерфейса. Каждый источник данных представлен объектом DataSource, который содержит один или несколько слоев данных. Каждый слой, представленный объектом Layer, содержит некоторое количество географических объектов (Feature), информацию о типе объектов, содержащихся в этом слое (например, точки, многоугольники и т. д.), а также имена и типы любых дополнительных полей (Field) данных, которые могут быть связаны с каждым объектом в этом слое.
-
class DataSource(ds_input, encoding='utf-8') -
Конструктор для
DataSourceтребует только одного параметра: путь к файлу, который вы хотите прочитать. Однако OGR также поддерживает различные более сложные источники данных, включая базы данных, к которым можно получить доступ, передав специальную строку имени вместо пути. Для получения дополнительной информации см. документацию Форматы векторных данных OGR. Свойство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, загруженного выше, который, очевидно, содержит один слой, называемый
"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()
Возвращает значение поля как двойное (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 vector.
-
OGR Геометрии
OGRGeometry
OGRGeometry объекты обладают схожей функциональностью с объектами GEOSGeometry и являются тонкими обёртками вокруг внутренней геометрической репрезентации OGR. Таким образом, они позволяют более эффективно получать доступ к данным при использовании DataSource. В отличие от своего аналога GEOS, OGRGeometry поддерживает системы пространственных ссылок и преобразование координат:
>>> from django.contrib.gis.gdal import OGRGeometry
>>> polygon = OGRGeometry("POLYGON((0 0, 5 0, 5 5, 0 5))")
-
class OGRGeometry(geom_input, srs=None) -
Этот объект является оболочкой для класса OGR Geometry. Эти объекты создаются непосредственно из заданного
geom_inputпараметра, который может быть строкой, содержащей WKT, HEX, GeoJSON,bufferсодержащим данные WKB, или объектомOGRGeomType. Эти объекты также возвращаются из атрибутаFeature.geomпри чтении векторных данных изLayer(который, в свою очередь, является частьюDataSource).-
classmethod from_gml(gml_string)
Создаёт
OGRGeometryиз заданной строки GML.-
classmethod from_bbox(bbox)
Создаёт
Polygonиз заданной прямоугольной области (4-кортеж).-
__len__()
Возвращает количество точек в
LineString, количество колец вPolygonили количество геометрий вGeometryCollection. Не применимо к другим типам геометрий.-
__iter__()
Итерируется по точкам в
LineString, кольцам вPolygonили геометриям вGeometryCollection. Не применимо к другим типам геометрий.-
__getitem__()
Возвращает точку по указанному индексу для
LineString, внутреннее кольцо по указанному индексу дляPolygonили геометрию по указанному индексу вGeometryCollection. Не применимо к другим типам геометрий.-
dimension
Возвращает количество координатных измерений геометрии, например, 0 для точек, 1 для линий и т. д.:
>> polygon.dimension 2
-
coord_dim
Возвращает или устанавливает размерность координат этой геометрии. Например, значение будет 2 для двумерных геометрий.
-
geom_count
Возвращает количество элементов в этой геометрии:
>>> polygon.geom_count 1
-
point_count
Возвращает количество точек, используемых для описания этой геометрии:
>>> polygon.point_count 4
-
num_points
Псевдоним для
point_count.-
num_coords
Псевдоним для
point_count.-
geom_type
Возвращает тип этой геометрии как объект
OGRGeomType.-
geom_name
Возвращает имя типа этой геометрии:
>>> polygon.geom_name 'POLYGON'
-
area
Возвращает площадь этой геометрии или 0 для геометрий, которые не содержат площади:
>>> polygon.area 25.0
-
envelope
Возвращает прямоугольную область (огибающую) этой геометрии как объект
Envelope.-
extent
Возвращает прямоугольную область (огибающую) этой геометрии как 4-кортеж вместо объекта
Envelope:>>> point.extent (0.0, 0.0, 5.0, 5.0)
-
srs
Этот атрибут управляет пространственной системой отсчёта для этой геометрии или
Noneесли ей не была назначена никакая система пространственных отсчётов. При обращении к нему, если назначена, возвращает объектSpatialReference. Может быть установлен с помощью другого объектаSpatialReferenceили любого входного значения, которое принимаетSpatialReference. Пример:>>> city.geom.srs.name 'GCS_WGS_1984'
-
srid
Возвращает или устанавливает идентификатор пространственной системы отсчёта, соответствующий
SpatialReferenceэтой геометрии. ВозвращаетNoneесли нет информации о пространственной системе отсчёта, связанной с этой геометрией, или если SRID определить нельзя.-
geos
Возвращает объект
GEOSGeometry, соответствующий этой геометрии.-
gml
Возвращает строковое представление этой геометрии в формате GML:
>>> OGRGeometry("POINT(1 2)").gml '<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'-
hex
Возвращает строковое представление этой геометрии в формате HEX WKB:
>>> OGRGeometry("POINT(1 2)").hex '0101000000000000000000F03F0000000000000040'-
json
Возвращает строковое представление этой геометрии в формате JSON:
>>> OGRGeometry("POINT(1 2)").json '{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'-
kml
Возвращает строковое представление этой геометрии в формате KML.
-
wkb_size
Возвращает размер буфера WKB, необходимого для хранения представления WKB этой геометрии:
>>> OGRGeometry("POINT(1 2)").wkb_size 21-
wkb
Возвращает
bufferсодержащий представление WKB этой геометрии.-
wkt
Возвращает строковое представление этой геометрии в формате WKT.
-
ewkt
Возвращает представление EWKT этой геометрии.
-
clone()
Возвращает новый клонированный объект
OGRGeometryэтой геометрии.-
close_rings()
Если в этой геометрии есть кольца, которые не закрыты, эта процедура закроет их, добавив начальную точку в конец:
>>> triangle = OGRGeometry("LINEARRING (0 0,0 1,1 0)") >>> triangle.close_rings() >>> triangle.wkt 'LINEARRING (0 0,0 1,1 0,0 0)'-
transform(coord_trans, clone=False)
-
Преобразует эту геометрию в другую систему пространственных координат. Может принять объект
CoordTransform, объектSpatialReferenceили любой другой вход, принятый объектомSpatialReference(включая WKT и PROJ строки, представляющие систему пространственных координат, или целочисленный SRID).По умолчанию ничего не возвращается, и геометрия преобразуется на месте. Однако, если ключевое слово
cloneустановлено в значениеTrue, вместо этого возвращается преобразованная копия этой геометрии.-
intersects(other)
Возвращает
True, если эта геометрия пересекается с другой, в противном случае возвращаетFalse.-
equals(other)
Возвращает
True, если эта геометрия эквивалентна другой, в противном случае возвращаетFalse.-
disjoint(other)
Возвращает
True, если эта геометрия пространственно несвязная (то есть не пересекается) с другой, в противном случае возвращаетFalse.-
touches(other)
Возвращает
True, если эта геометрия касается другой, в противном случае возвращаетFalse.-
crosses(other)
Возвращает
True, если эта геометрия пересекает другую, в противном случае возвращаетFalse.-
within(other)
Возвращает
True, если эта геометрия содержится внутри другой, в противном случае возвращаетFalse.-
contains(other)
Возвращает
True, если эта геометрия содержит другую, в противном случае возвращаетFalse.-
overlaps(other)
Возвращает
True, если эта геометрия перекрывается с другой, в противном случае возвращаетFalse.-
boundary()
Граница этой геометрии, как новый объект
OGRGeometry.-
convex_hull
Наименьший выпуклый многоугольник, содержащий эту геометрию, как новый объект
OGRGeometry.-
difference()
Возвращает область, представляющую разность этой геометрии и другой, как новый объект
OGRGeometry.-
intersection()
Возвращает область, представляющую пересечение этой геометрии и другой, как новый объект
OGRGeometry.-
sym_difference()
Возвращает область, представляющую симметричную разность этой геометрии и другой, как новый объект
OGRGeometry.-
union()
Возвращает область, представляющую объединение этой геометрии и другой, как новый объект
OGRGeometry.-
tuple
Возвращает координаты точки геометрии как кортеж, координаты линейной геометрии как кортеж кортежей и так далее:
>>> OGRGeometry("POINT (1 2)").tuple (1.0, 2.0) >>> OGRGeometry("LINESTRING (1 2,3 4)").tuple ((1.0, 2.0), (3.0, 4.0))-
coords
Псевдоним для
tuple.-
-
class Point -
-
x
Возвращает координату X этой точки:
>>> OGRGeometry("POINT (1 2)").x 1.0-
y
Возвращает координату Y этой точки:
>>> OGRGeometry("POINT (1 2)").y 2.0-
z
Возвращает координату Z этой точки или
None, если у точки нет координаты Z:>>> OGRGeometry("POINT (1 2 3)").z 3.0 -
-
class LineString -
-
x
Возвращает список координат X в этой линии:
>>> OGRGeometry("LINESTRING (1 2,3 4)").x [1.0, 3.0]-
y
Возвращает список координат Y в этой линии:
>>> OGRGeometry("LINESTRING (1 2,3 4)").y [2.0, 4.0]-
z
Возвращает список координат Z в этой линии или
None, если у линии нет координат Z:>>> OGRGeometry("LINESTRING (1 2 3,4 5 6)").z [3.0, 6.0] -
-
class Polygon -
-
shell
Возвращает контур (внешнее кольцо) этого многоугольника в виде объекта геометрии
LinearRing.-
exterior_ring
Псевдоним для
shell.-
centroid
Возвращает объект
Point, представляющий центр масс этого многоугольника. -
-
class GeometryCollection -
-
add(geom)
Добавляет геометрию в эту коллекцию геометрий. Не применимо к другим типам геометрии.
-
OGRGeomType
-
class OGRGeomType(type_input) -
Этот класс позволяет представлять тип OGR геометрии различными способами:
>>> from django.contrib.gis.gdal import OGRGeomType >>> gt1 = OGRGeomType(3) # Using an integer for the type >>> gt2 = OGRGeomType("Polygon") # Using a string >>> gt3 = OGRGeomType("POLYGON") # It's case-insensitive >>> print(gt1 == 3, gt1 == "Polygon") # Equivalence works w/non-OGRGeomType objects True True-
name
Возвращает строку-псевдоним типа OGR геометрии:
>>> gt1.name 'Polygon'
-
num
Возвращает число, соответствующее типу OGR геометрии:
>>> gt1.num 3
-
django
Возвращает тип поля Django (подкласс GeometryField), используемый для хранения этого типа OGR, или
None, если подходящего типа Django нет:>>> gt1.django 'PolygonField'
-
Envelope
-
class Envelope(*args) -
Представляет структуру OGR Envelope, содержащую минимальные и максимальные координаты X, Y для прямоугольной ограничивающей рамки. Имена переменных совместимы со структурой 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
- Сокращенная строка для общеизвестных стандартов (
'WGS84','WGS72','NAD27','NAD83')
Пример:
>>> wgs84 = SpatialReference("WGS84") # shorthand string >>> wgs84 = SpatialReference(4326) # EPSG code >>> wgs84 = SpatialReference("EPSG:4326") # EPSG string >>> proj = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs " >>> wgs84 = SpatialReference(proj) # PROJ string >>> wgs84 = SpatialReference( ... """GEOGCS["WGS 84", ... DATUM["WGS_1984", ... SPHEROID["WGS 84",6378137,298.257223563, ... AUTHORITY["EPSG","7030"]], ... AUTHORITY["EPSG","6326"]], ... PRIMEM["Greenwich",0, ... AUTHORITY["EPSG","8901"]], ... UNIT["degree",0.01745329251994328, ... AUTHORITY["EPSG","9122"]], ... AUTHORITY["EPSG","4326"]]""" ... ) # OGC WKT-
__getitem__(target)
Возвращает значение узла атрибута заданной строки,
Noneесли узел не существует. Также может принимать кортеж в качестве параметра, (target, child), где child — индекс атрибута в WKT. Например:>>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]' >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326 >>> print(srs["GEOGCS"]) WGS 84 >>> print(srs["DATUM"]) WGS_1984 >>> print(srs["AUTHORITY"]) EPSG >>> print(srs["AUTHORITY", 1]) # The authority value 4326 >>> print(srs["TOWGS84", 4]) # the fourth value in this wkt 0 >>> print(srs["UNIT|AUTHORITY"]) # For the units authority, have to use the pipe symbol. EPSG >>> print(srs["UNIT|AUTHORITY", 1]) # The authority value for the units 9122
-
attr_value(target, index=0)
Значение атрибута для заданного целевого узла (например,
'PROJCS'). Ключевое слово index указывает индекс дочернего узла для возврата.-
auth_name(target)
Возвращает имя органа по стандартизации для заданного целевого узла строки.
-
auth_code(target)
Возвращает код органа по стандартизации для заданного целевого узла строки.
-
clone()
Возвращает клон этого объекта пространственной привязки.
-
identify_epsg()
Этот метод проверяет WKT этой
SpatialReferenceи добавит узлы органа по стандартизации EPSG, где применимо идентификатор EPSG.-
from_esri()
Преобразует эту пространственную привязку из формата ESRI в EPSG
-
to_esri()
Преобразует эту пространственную привязку в формат 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
Возвращает кортеж из 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 для этой пространственной привязки.
-
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принимает два параметра. Первый параметр определяет источник растра, а второй — режим открытия растра (чтение или запись). Для вновь создаваемых растров второй параметр игнорируется, и новый растр всегда создаётся в режиме записи.Первый параметр может быть представлен в трёх форматах: строка или
Path, представляющие путь к файлу (файловая система или виртуальная файловая система GDAL), словарь с параметрами для нового растра или байтовый объект, представляющий растровый файл.Если входной параметр — путь к файлу, растр открывается из этого файла. Если входной параметр — данные в словаре, обязательными параметрами являются
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 4.2:Добавлена поддержка
pathlib.Pathds_input.-
name -
Имя источника, эквивалентное пути к входному файлу или имени, заданному при инициализации.
>>> GDALRaster({'width': 10, 'height': 10, 'name': 'myraster', 'srid': 4326}).name 'myraster'
-
driver -
Имя драйвера GDAL, используемого для обработки входного файла. Для растров, созданных из файла, тип драйвера определяется автоматически. Создание растров с нуля по умолчанию происходит в оперативной памяти (
'MEM'), но может быть изменено по необходимости. Например, используйтеGTiffдля файла форматаGeoTiff. Список типов файлов см. также в списке GDAL Raster Formats.Растр в оперативной памяти создаётся следующим образом:
>>> GDALRaster({'width': 10, 'height': 10, 'srid': 4326}).driver.name 'MEM'Файловый растр GeoTiff создаётся следующим образом:
>>> import tempfile >>> rstfile = tempfile.NamedTemporaryFile(suffix='.tif') >>> rst = GDALRaster({'driver': 'GTiff', 'name': rstfile.name, 'srid': 4326, ... 'width': 255, 'height': 255, 'nr_of_bands': 1}) >>> rst.name '/tmp/tmp7x9H4J.tif' # The exact filename will be different on your computer >>> rst.driver.name 'GTiff'
-
width -
Ширина источника в пикселях (ось X).
>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).width 10
-
height -
Высота источника в пикселях (ось Y).
>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).height 20
-
srs -
Система пространственных координат растра, как экземпляр
SpatialReference. Система координат можно изменить, присвоив ей другой экземплярSpatialReference, или используя любой входной параметр, принимаемый конструкторомSpatialReference.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.srs.srid 4326 >>> rst.srs = 3086 >>> rst.srs.srid 3086
-
srid -
Идентификатор системы пространственных координат (SRID) растра. Это свойство является сокращением для получения или задания SRID через атрибут
srs.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.srid 4326 >>> rst.srid = 3086 >>> rst.srid 3086 >>> rst.srs.srid # This is equivalent 3086
-
geotransform -
Матрица аффинного преобразования для геореферирования источника, как кортеж из шести коэффициентов, преобразующий координаты пикселя/строки в геореференцированное пространство по следующей формуле:
Xgeo = GT(0) + Xpixel * GT(1) + Yline * GT(2) Ygeo = GT(3) + Xpixel * GT(4) + Yline * GT(5)
Те же значения можно получить, обратившись к свойствам
origin(индексы 0 и 3),scale(индексы 1 и 5) иskew(индексы 2 и 4).По умолчанию
[0.0, 1.0, 0.0, 0.0, 0.0, -1.0].>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.geotransform [0.0, 1.0, 0.0, 0.0, 0.0, -1.0]
-
origin -
Координаты верхнего левого угла растра в системе координат источника, как объект точки с членами
xиy.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.origin [0.0, 0.0] >>> rst.origin.x = 1 >>> rst.origin [1.0, 0.0]
-
scale -
Ширина и высота пикселя для геореферирования растра, как объект точки с членами
xиy. Подробнее см.geotransform.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.scale [1.0, -1.0] >>> rst.scale.x = 2 >>> rst.scale [2.0, -1.0]
-
skew -
Коэффициенты искажения, используемые для геореферирования растра, как объект точки с членами
xиy. В случае изображений с направлением на север, эти коэффициенты равны0.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.skew [0.0, 0.0] >>> rst.skew.x = 3 >>> rst.skew [3.0, 0.0]
-
extent -
Область (границы) растрового источника, как 4-кортеж
(xmin, ymin, xmax, ymax)в системе координат источника.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.extent (0.0, -20.0, 10.0, 0.0) >>> rst.origin.x = 100 >>> rst.extent (100.0, -20.0, 110.0, 0.0)
-
bands -
Список всех полос источника, как экземпляры
GDALBand.>>> rst = GDALRaster({"width": 1, "height": 2, 'srid': 4326, ... "bands": [{"data": [0, 1]}, {"data": [2, 3]}]}) >>> len(rst.bands) 2 >>> rst.bands[1].data() array([[ 2., 3.]], dtype=float32)
-
warp(ds_input, resampling='NearestNeighbour', max_error=0.0) -
Возвращает деформированную (преобразованную) версию растра.
Параметры деформации могут быть заданы через аргумент
ds_input. Использованиеds_inputаналогично соответствующему аргументу конструктора класса. Это словарь с характеристиками целевого растра. Разрешённые ключи словаря: width, height, SRID, origin, scale, skew, datatype, driver и name (имя файла).По умолчанию функции деформации сохраняет большинство параметров равными значениям исходного растра, поэтому необходимо указать только те параметры, которые нужно изменить. Обратите внимание, что это включает драйвер, поэтому для растров на основе файла функция деформации создаст новый растр на диске.
Единственный параметр, отличный от исходного растра, это имя. Значение по умолчанию для имени растра — имя исходного растра, дополненное
'_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(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]
-
info -
Возвращает строку с кратким описанием растра. Эквивалентно команде gdalinfo командной строки.
-
-
metadata -
Метаданные этого растра, представленные в виде вложенного словаря. Ключ первого уровня — домен метаданных. Второй уровень содержит имена и значения элементов метаданных из каждого домена.
Для установки или обновления элемента метаданных передайте соответствующий элемент метаданных в метод, используя описанную выше вложенную структуру. Обновляются только ключи, присутствующие в указанном словаре; остальная часть метаданных остается неизменной.
Для удаления элемента метаданных используйте
Noneв качестве значения метаданных.>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326}) >>> rst.metadata {} >>> rst.metadata = {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}} >>> rst.metadata {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}} >>> rst.metadata = {'DEFAULT': {'OWNER': None, 'VERSION': '2.0'}} >>> rst.metadata {'DEFAULT': {'VERSION': '2.0'}}
-
vsi_buffer -
Представление этого растра в формате
bytes. ВозвращаетNoneдля растров, которые не хранятся в виртуальной файловой системе GDAL.
-
is_vsi_based -
Логическое значение, указывающее, хранится ли этот растр в виртуальной файловой системе GDAL.
-
GDALBand
-
class GDALBand -
Экземпляры GDALBand не создаются явно, а получаются из объекта
GDALRasterчерез его атрибутbands. GDALBand содержат фактические значения пикселей растра.-
description -
Имя или описание полосы, если таковое имеется.
-
width -
Ширина полосы в пикселях (ось X).
-
height -
Высота полосы в пикселях (ось Y).
-
pixel_count -
Общее количество пикселей в этой полосе. Равно
width * height.
-
statistics(refresh=False, approximate=False) -
Вычисление статистики значений пикселей этой полосы. Результат — кортеж со следующей структурой:
(minimum, maximum, mean, standard deviation).Если аргумент
approximateустановлен вTrue, статистика может быть вычислена на основе предварительных просмотров или подмножества тайлов изображения.Если аргумент
refreshустановлен вTrue, статистика будет вычислена непосредственно из данных, и кэш будет обновлён результатом.Если найдено постоянное значение кэша, возвращается это значение. Для форматов растров, использующих службы постоянных вспомогательных метаданных (PAM), статистика может кэшироваться во вспомогательном файле. В некоторых случаях эти метаданные могут быть не синхронизированы со значениями пикселей или возвращать значения из предыдущего вызова, не отражающие значение аргумента
approximate. В таких случаях используйте аргументrefresh, чтобы получить обновлённые значения и сохранить их в кэше.Для пустых полос (где все значения пикселей — «без данных»), все статистики возвращаются как
None.Статистику также можно получить напрямую, обратившись к свойствам
min,max,meanиstd.
-
min -
Минимальное значение пикселя в полосе (исключая значение «без данных»).
-
max -
Максимальное значение пикселя в полосе (исключая значение «без данных»).
-
mean -
Среднее значение всех значений пикселей в полосе (исключая значение «без данных»).
-
std -
Среднеквадратическое отклонение всех значений пикселей в полосе (исключая значение «без данных»).
-
nodata_value -
Значение «без данных» для полосы — это обычно специальное маркерное значение, используемое для маркировки пикселей, которые не являются действительными данными. Такие пиксели обычно не должны отображаться и не должны участвовать в операциях анализа.
Для удаления существующего значения «без данных» установите это свойство в
None.
-
datatype(as_string=False) -
Тип данных в полосе, как целое число от 0 (Неизвестно) до 11. Если
as_stringравноTrue, тип данных возвращается в виде строки со следующими возможными значениями:GDT_Unknown,GDT_Byte,GDT_UInt16,GDT_Int16,GDT_UInt32,GDT_Int32,GDT_Float32,GDT_Float64,GDT_CInt16,GDT_CInt32,GDT_CFloat32, иGDT_CFloat64.
-
color_interp(as_string=False) -
Интерпретация цвета для полосы, как целое число от 0 до 16. Если
as_stringравноTrue, тип данных возвращается в виде строки со следующими возможными значениями:GCI_Undefined,GCI_GrayIndex,GCI_PaletteIndex,GCI_RedBand,GCI_GreenBand,GCI_BlueBand,GCI_AlphaBand,GCI_HueBand,GCI_SaturationBand,GCI_LightnessBand,GCI_CyanBand,GCI_MagentaBand,GCI_YellowBand,GCI_BlackBand,GCI_YCbCr_YBand,GCI_YCbCr_CbBand, иGCI_YCbCr_CrBand.GCI_YCbCr_CrBandтакже представляетGCI_Max, так как оба соответствуют целому числу 16, но возвращается толькоGCI_YCbCr_CrBandв виде строки.
-
data(data=None, offset=None, size=None, shape=None) -
Доступ к значениям пикселей
GDALBand. Возвращает полный массив данных, если параметры не указаны. Подмножество массива пикселей может быть запрошено путём указания смещения и размера блока в виде кортежей.Если NumPy доступен, данные возвращаются в виде массива NumPy. Для повышения производительности рекомендуется использовать NumPy.
Данные записываются в
GDALBandесли указан параметрdata. Входные данные могут быть одного из следующих типов — упакованная строка, буфер, список, массив и массив NumPy. Количество элементов во входных данных обычно должно соответствовать общему количеству пикселей в полосе или количеству пикселей для определённого блока значений пикселей, если указаны параметрыoffsetиsize.Если количество элементов во входных данных отличается от целевого блока пикселей, необходимо указать параметр
shape. Форма — кортеж, указывающий ширину и высоту входных данных в пикселях. Данные затем дублируются для обновления значений пикселей выбранного блока. Это полезно, например, для заполнения всей полосы одним значением.Например:
>>> rst = GDALRaster({'width': 4, 'height': 4, 'srid': 4326, 'datatype': 1, 'nr_of_bands': 1}) >>> bnd = rst.bands[0] >>> bnd.data(range(16)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(offset=(1, 1), size=(2, 2)) array([[ 5, 6], [ 9, 10]], dtype=int8) >>> bnd.data(data=[-1, -2, -3, -4], offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -1, -2, 7], [ 8, -3, -4, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(data='\x9d\xa8\xb3\xbe', offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -99, -88, 7], [ 8, -77, -66, 11], [ 12, 13, 14, 15]], dtype=int8) >>> bnd.data([1], shape=(1, 1)) >>> bnd.data() array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], dtype=uint8) >>> bnd.data(range(4), shape=(1, 4)) array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], dtype=uint8)
-
metadata -
Метаданные этой полосы. Функциональность идентична
GDALRaster.metadata.
-
Создание растров из данных
Этот раздел описывает создание растров с нуля, используя параметр ds_input.
Новый растр создаётся, когда параметр dict передаётся конструктору GDALRaster. Словарь содержит определяющие параметры нового растра, такие как начало, размер или система пространственной привязки. Словарь также может содержать данные пикселей и информацию о формате нового растра. Полученный растр может быть файловым или основанным на памяти, в зависимости от указанного драйвера.
Нет стандартного способа описания растровых данных в словаре или формате JSON. Определение входного словаря в класс GDALRaster поэтому специфично для Django. Оно вдохновлено форматом geojson, но стандарт geojson в настоящее время ограничен векторными форматами.
Примеры использования различных ключей при создании растров можно найти в документации соответствующих атрибутов и методов классов GDALRaster и GDALBand.
Словарь ds_input
Для создания растра в словаре ds_input необходимы только несколько ключей: width, height, и srid. Все остальные параметры имеют значения по умолчанию (см. таблицу ниже). Список ключей, которые можно передать в словаре ds_input, тесно связан, но не идентичен свойствам класса GDALRaster. Многие параметры напрямую сопоставляются с этими свойствами; остальные описаны ниже.
В следующей таблице описаны все ключи, которые можно установить в словаре ds_input.
| Ключ | По умолчанию | Использование |
|---|---|---|
srid | обязательно | Сопоставлено с атрибутом srid |
width | обязательно | Сопоставлено с атрибутом width |
height | обязательно | Сопоставлено с атрибутом height |
driver | MEM | Сопоставлено с атрибутом driver |
name | '' | См. ниже |
origin | 0 | Сопоставлено с атрибутом origin |
scale | 0 | Сопоставлено с атрибутом scale |
skew | 0 | Сопоставлено с атрибутом width |
bands | [] | См. ниже |
nr_of_bands | 0 | См. ниже |
datatype | 6 | См. ниже |
papsz_options | {} | См. ниже |
-
name -
Строка, представляющая имя растрового изображения. При создании растрового изображения на основе файла, этот параметр должен содержать путь к файлу нового растрового изображения. Если имя начинается с
/vsimem/, растровое изображение создается в виртуальной файловой системе GDAL.
-
datatype -
Целое число, представляющее тип данных для всех полос. По умолчанию
6(Float32). Все полосы нового растрового изображения должны иметь одинаковый тип данных. Сопоставление значений:Значение Тип пикселей GDAL Описание 1 GDT_Byte Восьмибитное беззнаковое целое число 2 GDT_UInt16 Шестнадцатибитное беззнаковое целое число 3 GDT_Int16 Шестнадцатибитное знаковое целое число 4 GDT_UInt32 Тридцатидвухбитное беззнаковое целое число 5 GDT_Int32 Тридцатидвухбитное знаковое целое число 6 GDT_Float32 Тридцатидвухбитное число с плавающей запятой 7 GDT_Float64 Шестидесятичетырехбитное число с плавающей запятой
-
nr_of_bands -
Целое число, представляющее количество полос растрового изображения. Растровое изображение можно создать без передачи данных полос при создании. Если количество полос не указано, оно автоматически вычисляется из длины входных данных
bands. Количество полос нельзя изменить после создания.
-
bands -
Список словарей
band_inputсо входными данными полос. Результирующие индексы полос совпадают с указанными в списке. Определение словаря входных данных полос приведено ниже. Если данные полос не предоставлены, значения полос растрового изображения инициализируются как массив нулей, а значение «нет данных» устанавливается вNone.
-
papsz_options -
Словарь с параметрами создания растрового изображения. Параметры ключевых значений входного словаря передаются драйверу при создании растрового изображения.
Доступные параметры зависят от драйвера и описаны в документации каждого драйвера.
Значения в словаре нечувствительны к регистру и автоматически преобразуются в правильный строковый формат при создании.
Следующий пример использует некоторые параметры, доступные для драйвера GTiff. Результат — сжатое знаковое растровое изображение байта с внутренней схемой разбиения на блоки. Внутренние блоки имеют размер 23 на 23:
>>> GDALRaster( ... { ... "driver": "GTiff", ... "name": "/path/to/new/file.tif", ... "srid": 4326, ... "width": 255, ... "height": 255, ... "nr_of_bands": 1, ... "papsz_options": { ... "compress": "packbits", ... "pixeltype": "signedbyte", ... "tiled": "yes", ... "blockxsize": 23, ... "blockysize": 23, ... }, ... } ... )
Словарь входных данных полос
Ключ bands в словаре ds_input представляет собой список band_input словарей. Каждый band_input словарь может содержать значения пикселей и значение «нет данных», которое должно быть установлено для полос нового растрового изображения. Массив данных может иметь полный размер нового растрового изображения или меньший. Для массивов, меньших полного размера растрового изображения, ключи size, shape, и offset управляют значениями пикселей. Соответствующие ключи передаются методу data(). Их функциональность аналогична установке данных полосы с помощью этого метода. В следующей таблице описаны используемые ключи.
| Ключ | По умолчанию | Использование |
|---|---|---|
nodata_value | None | Сопоставлено с атрибутом nodata_value |
data | То же, что nodata_value или 0
| Передается методу data() |
size | Размер растрового изображения | Передается методу data() |
shape | То же, что size | Передается методу data() |
offset | (0, 0) | Передается методу data() |
Использование виртуальной файловой системы GDAL
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 могут поддерживаться другие виртуальные файловые системы. Их можно использовать, добавив соответствующий префикс /vsi*/ к предоставленному пути. Более подробную информацию см. в документации GDAL по виртуальным файловым системам .
Сжатые растровые изображения
Вместо распаковки файла и создания из него растрового изображения GDAL может напрямую получить доступ к сжатым файлам, используя виртуальные файловые системы /vsizip/, /vsigzip/, или /vsitar/:
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster("/vsizip/path/to/your/file.zip/path/to/raster.tif")
>>> rst = GDALRaster("/vsigzip/path/to/your/file.gz")
>>> rst = GDALRaster("/vsitar/path/to/your/file.tar/path/to/raster.tif")
Сеть растровых изображений
GDAL может поддерживать онлайн-ресурсы и провайдеров хранилищ прозрачно. При условии, что он скомпилирован с такими возможностями.
Для доступа к общедоступному растровому файлу без авторизации можно использовать /vsicurl/:
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster("/vsicurl/https://example.com/raster.tif")
>>> rst.name
'/vsicurl/https://example.com/raster.tif'
Для коммерческих поставщиков хранилищ (например, /vsis3/) система должна быть предварительно настроена для аутентификации и, возможно, других настроек (см. документацию по виртуальным файловым системам GDAL для доступных параметров).
Настройки
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/4.2/ref/contrib/gis/gdal/