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", который содержит три точечных объекта. Для простоты в примерах ниже предполагается, что вы сохранили этот слой в переменной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]]Если у слоя нет пространственной ссылки, связанной с ним, возвращается
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)
Создаёт
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
Возвращает внешнюю сторону (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
Значение минимальной координаты Y.
-
max_x
Значение максимальной координаты X.
-
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
Возвращает кортеж из двух элементов: значения и названия единиц и автоматически определяет, нужно вернуть линейные или угловые единицы.
-
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.Растр в памяти создаётся следующим образом:
>>> 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. GDALBands содержат фактические значения пикселей растра.-
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 (Неизвестно) до 14. Если
as_stringявляетсяTrue, тип данных возвращается как строка. Обратите внимание на столбец «Тип пикселя GDAL» в таблице значений типа данных для возможных значений.
-
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 8-битовое беззнаковое целое число 2 GDT_UInt16 16-битовое беззнаковое целое число 3 GDT_Int16 16-битовое знаковое целое число 4 GDT_UInt32 32-битовое беззнаковое целое число 5 GDT_Int32 32-битовое знаковое целое число 6 GDT_Float32 32-битное число с плавающей запятой 7 GDT_Float64 64-битное число с плавающей запятой 12 GDT_UInt64 64-битовое беззнаковое целое число (GDAL 3.5+) 13 GDT_Int64 64-битовое знаковое целое число (GDAL 3.5+) 14 GDT_Int8 8-битовое знаковое целое число (GDAL 3.7+)
-
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", ... "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 | То же, что и размер | Передается методу 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 Virtual Filesystems для доступных вариантов).
Настройки
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/5.0/ref/contrib/gis/gdal/