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')[source] -
Конструктор
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[source]
Возвращает количество слоёв в источнике данных.
-
name[source]
Возвращает имя источника данных.
-
Layer
-
class Layer -
Layerявляется оболочкой для слоя данных в объектеDataSource. Вы никогда не создаете объектLayerнапрямую. Вместо этого вы получаете их из объектаDataSource, который по существу является стандартным контейнером Python для объектовLayer. Например, вы можете получить доступ к определенному слою по его индексу (например,ds[0]для доступа к первому слою), или вы можете перебирать все слои в контейнере в циклеfor. Сам объектLayerвыступает в качестве контейнера для геометрических объектов.Как правило, все объекты в данном слое имеют одинаковый тип геометрии. Свойство
geom_typeслоя — это объектOGRGeomType, который идентифицирует тип объекта. Мы можем использовать его для вывода некоторых основных сведений о каждом слое в объектеDataSource:>>> for layer in ds: ... print('Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name)) ... Layer "cities": 3 PointsПример вывода получен из источника данных городов, загруженного выше, который, очевидно, содержит один слой под названием
"cities", который содержит три точечных объекта. Для простоты примеры ниже предполагают, что вы сохранили этот слой в переменнойlayer:>>> layer = ds[0]
-
name
Возвращает имя этого слоя в источнике данных.
>>> layer.name 'cities'
-
num_feat
Возвращает количество объектов в слое. То же самое, что и
len(layer):>>> layer.num_feat 3
-
geom_type
Возвращает тип геометрии слоя в виде объекта
OGRGeomType:>>> layer.geom_type.name 'Point'
-
num_fields
Возвращает количество полей в слое, т. е. количество полей данных, связанных с каждым объектом в слое:
>>> layer.num_fields 4
-
fields
Возвращает список имен каждого поля в этом слое:
>>> layer.fields ['Name', 'Population', 'Density', 'Created']
Возвращает список типов данных каждого поля в этом слое. Это подклассы
Field, обсуждаемые ниже:>>> [ft.__name__ for ft in layer.field_types] ['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
-
field_widths
Возвращает список максимальных длин полей для каждого поля в этом слое:
>>> layer.field_widths [80, 11, 24, 10]
-
field_precisions
Возвращает список числовых точностей для каждого поля в этом слое. Это бессмысленно (и равно нулю) для полей, не являющихся числовыми:
>>> layer.field_precisions [0, 0, 15, 0]
-
extent
Возвращает пространственный охват этого слоя в виде объекта
Envelope:>>> layer.extent.tuple (-104.609252, 29.763374, -95.23506, 38.971823)
-
srs
Свойство, возвращающее связанную с этим слоем
SpatialReference:>>> print(layer.srs) GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]]Если у слоя
Layerнет связанной с ним информации о пространственной системе координат, возвращаетсяNone.-
spatial_filter
Свойство, которое можно использовать для получения или установки пространственного фильтра для этого слоя. Пространственный фильтр может быть задан только с помощью экземпляра
OGRGeometry, 4-х кортежа охватом илиNone. При установке значения, отличного отNone, будут возвращаться только объекты, пересекающие фильтр, при итерации по слою:>>> print(layer.spatial_filter) None >>> print(len(layer)) 3 >>> [feat.get("Name") for feat in layer] ['Pueblo', 'Lawrence', 'Houston'] >>> ks_extent = (-102.051, 36.99, -94.59, 40.00) # Extent for state of Kansas >>> layer.spatial_filter = ks_extent >>> len(layer) 1 >>> [feat.get("Name") for feat in layer] ['Lawrence'] >>> layer.spatial_filter = None >>> len(layer) 3-
get_fields()
Метод, возвращающий список значений заданного поля для каждого объекта в слое:
>>> layer.get_fields("Name") ['Pueblo', 'Lawrence', 'Houston']-
get_geoms(geos=False)
Метод, возвращающий список, содержащий геометрию каждого объекта в слое. Если необязательный аргумент
geosустановлен вTrue, то геометрии преобразуются в объектыGEOSGeometry. В противном случае они возвращаются как объектыOGRGeometry:>>> [pt.tuple for pt in layer.get_geoms()] [(-104.609252, 38.255001), (-95.23506, 38.971823), (-95.363151, 29.763374)]
-
test_capability(capability)
Возвращает булево значение, указывающее, поддерживает ли этот слой заданную возможность (строку). Примеры допустимых строк возможностей:
'RandomRead','SequentialWrite','RandomWrite','FastSpatialFilter','FastFeatureCount','FastGetExtent','CreateField','Transactions','DeleteFeature', и'FastSetNextByIndex'. -
Feature
-
class Feature -
Featureоборачивает объект OGR Feature. Вы никогда не создаете объектFeatureнапрямую. Вместо этого вы получаете их из объектаLayer. Каждый объект содержит геометрию и набор полей с дополнительными свойствами. Геометрия поля доступна через свойствоgeom, которое возвращает объектOGRGeometry. ОбъектFeatureведет себя как стандартный контейнер Python для своих полей, которые он возвращает как объектыField: вы можете получить доступ к полю напрямую по его индексу или имени, или вы можете перебирать поля объекта, например, в циклеfor.-
geom
Возвращает геометрию этого объекта в виде объекта
OGRGeometry:>>> city.geom.tuple (-104.609252, 38.255001)
-
get
Метод, возвращающий значение заданного поля (указанного по имени) для этого объекта, не объект-обёртку
Field:>>> city.get("Population") 102121-
geom_type
Возвращает тип геометрии для этого объекта в виде объекта
OGRGeomType. Это будет одинаковым для всех объектов в данном слое и эквивалентно свойствуLayer.geom_typeобъектаLayer, из которого этот объект был получен.-
num_fields
Возвращает количество полей данных, связанных с объектом. Это будет одинаковым для всех объектов в данном слое и эквивалентно свойству
Layer.num_fieldsобъектаLayer, из которого этот объект был получен.-
fields
Возвращает список имен полей данных, связанных с объектом. Это будет одинаковым для всех объектов в данном слое и эквивалентно свойству
Layer.fieldsобъектаLayer, из которого этот объект был получен.-
fid
Возвращает идентификатор объекта в слое:
>>> city.fid 0
-
layer_name
Возвращает имя
Layer, из которого был получен объект. Это будет одинаковым для всех объектов в данном слое:>>> city.layer_name 'cities'
-
index
Метод, возвращающий индекс заданного имени поля. Это будет одинаковым для всех объектов в данном слое:
>>> 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()
Возвращает значение поля как двойное (вещественное):
>>> 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)[source] -
Класс
Driverиспользуется внутри для обертывания драйвера OGRDataSource.-
driver_count[source]
Возвращает количество зарегистрированных в настоящее время драйверов 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)[source]
-
Этот объект является оболочкой для класса OGR Geometry. Эти объекты создаются непосредственно из заданного параметра
geom_input, который может быть строкой, содержащей WKT, HEX, GeoJSON,buffer, содержащим данные WKB, или объектомOGRGeomType. Эти объекты также возвращаются атрибутомFeature.geomпри чтении векторных данных изLayer(который, в свою очередь, является частьюDataSource).-
classmethod from_gml(gml_string)[source]
Создаёт объект
OGRGeometryиз заданной строки GML.-
classmethod from_bbox(bbox)[source]
Создаёт
Polygonиз заданного прямоугольника ограничивающей рамки (кортежа из 4 элементов).-
__len__()
Возвращает количество точек в
LineString, количество колец вPolygonили количество геометрий вGeometryCollection. Не применимо к другим типам геометрий.-
__iter__()
Итерирует по точкам в
LineString, кольцам вPolygonили геометриям вGeometryCollection. Не применимо к другим типам геометрий.-
__getitem__()
Возвращает точку по указанному индексу для
LineString, внутреннее кольцо по указанному индексу дляPolygonили геометрию по указанному индексу вGeometryCollection. Не применимо к другим типам геометрий.-
dimension[source]
Возвращает число координатных измерений геометрии, т.е. 0 для точек, 1 для линий и т.д.:
>>> polygon.dimension 2
-
coord_dim[source]
Возвращает координатное измерение этой геометрии. Например, значение будет 2 для двумерных геометрий.
Устарело начиная с версии 5.1: Свойство
coord_dimустарело. Используйтеset_3d()вместо него.-
is_3d[source]
Добавлена в Django 5.1.Булево значение, указывающее, содержит ли эта геометрия координаты Z.
-
set_3d(value)[source]
Добавлена в Django 5.1.Метод для добавления или удаления координатного измерения Z.
>>> p = OGRGeometry("POINT (1 2 3)") >>> p.is_3d True >>> p.set_3d(False) >>> p.wkt "POINT (1 2)"-
is_measured[source]
Добавлена в Django 5.1.Булево значение, указывающее, содержит ли эта геометрия координаты M.
-
set_measured(value)[source]
Добавлена в Django 5.1.Метод для добавления или удаления координатного измерения M.
>>> p = OGRGeometry("POINT (1 2)") >>> p.is_measured False >>> p.set_measured(True) >>> p.wkt "POINT M (1 2 0)"-
geom_count[source]
Возвращает количество элементов в этой геометрии:
>>> polygon.geom_count 1
-
point_count[source]
Возвращает количество точек, используемых для описания этой геометрии:
>>> polygon.point_count 4
-
num_points[source]
Псевдоним для
point_count.-
num_coords[source]
Псевдоним для
point_count.-
geom_type[source]
Возвращает тип этой геометрии в виде объекта
OGRGeomType.-
geom_name[source]
Возвращает имя типа этой геометрии:
>>> polygon.geom_name 'POLYGON'
-
area[source]
Возвращает площадь этой геометрии или 0 для геометрий, не содержащих площади:
>>> polygon.area 25.0
-
envelope[source]
Возвращает ограничивающую рамку этой геометрии как объект
Envelope.-
extent[source]
Возвращает ограничивающую рамку этой геометрии как кортеж из 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[source]
Возвращает объект
GEOSGeometry, соответствующий этой геометрии.-
gml[source]
Возвращает строковое представление этой геометрии в формате GML:
>>> OGRGeometry("POINT(1 2)").gml '<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'-
hex[source]
Возвращает строковое представление этой геометрии в формате HEX WKB:
>>> OGRGeometry("POINT(1 2)").hex '0101000000000000000000F03F0000000000000040'-
json[source]
Возвращает строковое представление этой геометрии в формате JSON:
>>> OGRGeometry("POINT(1 2)").json '{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'-
kml[source]
Возвращает строковое представление этой геометрии в формате KML.
-
wkb_size[source]
Возвращает размер буфера WKB, необходимого для хранения представления этой геометрии в WKB формате:
>>> OGRGeometry("POINT(1 2)").wkb_size 21-
wkb[source]
Возвращает
buffer, содержащий WKB представление этой геометрии.-
wkt[source]
Возвращает строковое представление этой геометрии в формате WKT.
-
ewkt[source]
Возвращает EWKT представление этой геометрии.
-
clone()[source]
Возвращает новую копию (
OGRGeometry) этого объекта геометрии.-
close_rings()[source]
Если в этой геометрии есть не замкнутые кольца, эта процедура замкнёт их, добавив начальную точку в конец:
>>> 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)[source]
Преобразует эту геометрию в другую систему пространственной привязки. Может принять объект
CoordTransform, объектSpatialReference, или любой другой входной параметр, принимаемыйSpatialReference(включая пространственные привязки WKT и PROJ-строки, или целое число SRID).По умолчанию ничего не возвращается, и геометрия преобразуется на месте. Однако, если ключевое слово
cloneустановлено вTrue, то вместо этого возвращается преобразованная копия этой геометрии.-
intersects(other)[source]
Возвращает
Trueесли эта геометрия пересекается с другой, в противном случае возвращаетFalse.-
equals(other)[source]
Возвращает
Trueесли эта геометрия эквивалентна другой, в противном случае возвращаетFalse.-
disjoint(other)[source]
Возвращает
Trueесли эта геометрия пространственно несвязана (т.е. не пересекается) с другой, в противном случае возвращаетFalse.-
touches(other)[source]
Возвращает
Trueесли эта геометрия касается другой, в противном случае возвращаетFalse.-
crosses(other)[source]
Возвращает
Trueесли эта геометрия пересекается с другой, в противном случае возвращаетFalse.-
within(other)[source]
Возвращает
Trueесли эта геометрия содержится внутри другой, в противном случае возвращаетFalse.-
contains(other)[source]
Возвращает
Trueесли эта геометрия содержит другую, в противном случае возвращаетFalse.-
overlaps(other)[source]
Возвращает
Trueесли эта геометрия перекрывается с другой, в противном случае возвращаетFalse.-
boundary()[source]
Граница этой геометрии, как новый объект
OGRGeometry.-
convex_hull[source]
Наименьший выпуклый многоугольник, содержащий эту геометрию, как новый объект
OGRGeometryобъекта.-
-
difference()[source]
Возвращает область, представляющую разность этой геометрии и другой, в виде нового объекта
OGRGeometry.-
intersection()[source]
Возвращает область, представляющую пересечение этой геометрии и другой, в виде нового объекта
OGRGeometryобъекта.-
sym_difference()[source]
Возвращает область, представляющую симметричную разность этой геометрии и другой, в виде нового объекта
OGRGeometry.-
union()[source]
Возвращает область, представляющую объединение этой геометрии и другой, в виде нового объекта
OGRGeometry.-
centroid[source]
Возвращает
Point, представляющий центр тяжести этой геометрии.Изменено в Django 5.1:centroidбыл повышен от атрибута, доступного только дляPolygon, до доступности для всех типов геометрий.-
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-
m
Новое в Django 5.1.Возвращает координату M этой точки, или
None, если у точки нет координаты M:>>> OGRGeometry("POINT ZM (1 2 3 4)").m 4.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]-
m
Новое в Django 5.1.Возвращает список координат M в этой линии, или
Noneесли у линии нет координат M:>>> OGRGeometry("LINESTRING(0 1 2 10, 1 2 3 11, 2 3 4 12)").m [10.0, 11.0, 12.0] -
-
class Polygon -
-
shell
Возвращает контур или внешнюю линию этого многоугольника в виде геометрии
LinearRing.-
exterior_ring
Псевдоним для
shell. -
-
class GeometryCollection -
-
add(geom)
Добавляет геометрию в эту коллекцию геометрий. Не применимо к другим типам геометрий.
-
OGRGeomType
-
class OGRGeomType(type_input)[source] -
Этот класс позволяет представлять тип 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[source]
Возвращает краткую строковую форму типа OGR геометрии:
>>> gt1.name 'Polygon'
-
num
Возвращает число, соответствующее типу OGR геометрии:
>>> gt1.num 3
-
django[source]
Возвращает тип поля Django (подкласс GeometryField) для хранения этого типа OGR, или
Noneесли соответствующего типа Django нет:>>> gt1.django 'PolygonField'
-
Envelope
-
class Envelope(*args)[source] -
Представляет структуру OGR Envelope, содержащую минимальные и максимальные координаты X и Y для прямоугольника, ограничивающего прямоугольника. Имена переменных совместимы со структурой OGR Envelope C.
-
min_x[source]
Значение минимальной координаты X.
-
min_y[source]
Значение максимальной координаты X.
-
max_x[source]
Значение минимальной координаты Y.
-
max_y[source]
Значение максимальной координаты Y.
-
ur[source]
Координата верхнего правого угла, как кортеж.
-
ll[source]
Координата нижнего левого угла, как кортеж.
-
tuple[source]
Кортеж, представляющий охватывающую область.
-
wkt[source]
Строка, представляющая эту охватывающую область как многоугольник в формате WKT.
-
expand_to_include(*args)[source]
-
Объекты систем координат
SpatialReference
-
class SpatialReference(srs_input)[source] -
Объекты пространственной привязки инициализируются на основе указанного
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)[source]
Возвращает значение узла атрибута заданной строки,
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)[source]
Значение атрибута для заданного целевого узла (например,
'PROJCS'). Ключевое слово index указывает индекс дочернего узла для возвращения.-
auth_name(target)[source]
Возвращает имя органа по стандарту для заданного целевого узла строки.
-
auth_code(target)[source]
Возвращает код органа по стандарту для заданного целевого узла строки.
-
clone()[source]
Возвращает копию этого объекта пространственной привязки.
-
identify_epsg()[source]
Этот метод анализирует WKT этой
SpatialReferenceи добавляет узлы органа EPSG, где применимо EPSG-идентификатор.-
from_esri()[source]
Преобразует эту SpatialReference из формата ESRI в EPSG
-
to_esri()[source]
Преобразует эту SpatialReference в формат ESRI.
-
validate()[source]
Проверяет, является ли заданная пространственная привязка валидной, если нет — возбуждается исключение.
-
import_epsg(epsg)[source]
Импортировать пространственную привязку из кода EPSG.
-
import_proj(proj)[source]
Импортировать пространственную привязку из строки PROJ.
-
import_user_input(user_input)[source]
-
import_wkt(wkt)[source]
Импортировать пространственную привязку из WKT.
-
import_xml(xml)[source]
Импортировать пространственную привязку из XML.
-
name[source]
Возвращает имя этой пространственной привязки.
-
srid[source]
Возвращает SRID верхнего уровня, или
Noneесли не определён.-
linear_name[source]
Возвращает имя линейных единиц.
-
linear_units[source]
Возвращает значение линейных единиц.
-
angular_name[source]
Возвращает имя угловых единиц.
-
angular_units[source]
Возвращает значение угловых единиц.
-
units[source]
Возвращает кортеж из 2-х значений: значения и имени единиц, автоматически определяет, нужно вернуть линейные или угловые единицы.
-
ellipsoid[source]
Возвращает кортеж параметров эллипсоида для этой пространственной привязки: (большая полуось, малая полуось и обратное сжатие).
-
semi_major[source]
Возвращает большую полуось эллипсоида для этой пространственной привязки.
-
semi_minor[source]
Возвращает малую полуось эллипсоида для этой пространственной привязки.
-
inverse_flattening[source]
Возвращает обратное сжатие эллипсоида для этой пространственной привязки.
-
geographic[source]
Возвращает
Trueесли эта пространственная привязка географическая (корневой узел этоGEOGCS).-
local[source]
Возвращает
Trueесли эта пространственная привязка локальная (корневой узел этоLOCAL_CS).-
projected[source]
Возвращает
Trueесли эта пространственная привязка — проекционная система координат (корневой узел этоPROJCS).
-
wkt[source]
Возвращает представление WKT этого пространственного ссылочного объекта.
-
pretty_wkt[source]
Возвращает «красивое» представление WKT.
-
proj[source]
Возвращает представление PROJ для этого пространственного ссылочного объекта.
-
proj4[source]
Псевдоним для
SpatialReference.proj.-
xml[source]
Возвращает XML-представление этого пространственного ссылочного объекта.
-
CoordTransform
-
class CoordTransform(source, target)[source]
Представляет преобразование координатных систем. Инициализируется двумя 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)[source]
-
Конструктор
GDALRasterпринимает два параметра. Первый параметр определяет источник растра, а второй — режим открытия растра (чтение или запись). Для вновь создаваемых растров второй параметр игнорируется, и новый растр всегда создаётся в режиме записи.Первый параметр может быть строкой или
Path, представляющей путь к файлу (файловой системе или виртуальной файловой системе GDAL), словарем с параметрами нового растра или объектом типа bytes, представляющим файл растра.Если входным параметром является путь к файлу, растр открывается из него. Если входной параметр — данные в словаре, обязательными являются параметры
width,height, иsrid. Если входной параметр — объект типа bytes, он будет открыт с помощью виртуальной файловой системы GDAL.Подробное описание создания растров с использованием входных данных в словаре см. в разделе Создание растров из данных. Подробное описание создания растров в виртуальной файловой системе см. в разделе Использование виртуальной файловой системы GDAL.
В следующем примере показано, как можно создать растры из различных источников (используя образцы данных из тестов GeoDjango; см. также раздел Образцы данных).
>>> from django.contrib.gis.gdal import GDALRaster >>> rst = GDALRaster("/path/to/your/raster.tif", write=False) >>> rst.name '/path/to/your/raster.tif' >>> rst.width, rst.height # This file has 163 x 174 pixels (163, 174) >>> rst = GDALRaster( ... { # Creates an in-memory raster ... "srid": 4326, ... "width": 4, ... "height": 4, ... "datatype": 1, ... "bands": [ ... { ... "data": (2, 3), ... "offset": (1, 1), ... "size": (2, 2), ... "shape": (2, 1), ... "nodata_value": 5, ... } ... ], ... } ... ) >>> rst.srs.srid 4326 >>> rst.width, rst.height (4, 4) >>> rst.bands[0].data() array([[5, 5, 5, 5], [5, 2, 3, 5], [5, 2, 3, 5], [5, 5, 5, 5]], dtype=uint8) >>> rst_file = open("/path/to/your/raster.tif", "rb") >>> rst_bytes = rst_file.read() >>> rst = GDALRaster(rst_bytes) >>> rst.is_vsi_based True >>> rst.name # Stored in a random path in the vsimem filesystem. '/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'-
name[source] -
Имя источника, которое эквивалентно пути к входному файлу или имени, заданному при создании.
>>> GDALRaster({"width": 10, "height": 10, "name": "myraster", "srid": 4326}).name 'myraster'
-
driver[source] -
Имя драйвера 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[source] -
Ширина источника в пикселях (ось X).
>>> GDALRaster({"width": 10, "height": 20, "srid": 4326}).width 10
-
height[source] -
Высота источника в пикселях (ось Y).
>>> GDALRaster({"width": 10, "height": 20, "srid": 4326}).height 20
-
srs[source] -
Система пространственных координат растра, как экземпляр
SpatialReference. СИС можно изменить, присвоив ей другой экземплярSpatialReferenceили любой входной параметр, который принимает конструкторSpatialReference.>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.srs.srid 4326 >>> rst.srs = 3086 >>> rst.srs.srid 3086
-
srid[source] -
Идентификатор системы пространственных координат (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[source] -
Матрица аффинного преобразования, используемая для геореференцирования источника, как кортеж из шести коэффициентов, которые отображают координаты пикселя/строки в геореференцированное пространство, используя следующее соотношение:
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[source] -
Координаты верхнего левого угла растра в системе пространственных координат источника, как объект типа point с
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[source] -
Ширина и высота пикселя, используемые для геореференцирования растра, как объект типа point с
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[source] -
Коэффициенты наклона, используемые для геореференцирования растра, как объект типа point с
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[source] -
Пределы (границы) источника растра, как кортеж из 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[source] -
Список всех полос источника в виде экземпляров
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)[source] -
Возвращает искажённую версию этого растра.
Параметры искажения можно указать с помощью аргумента
ds_input. Использованиеds_inputаналогично соответствующему аргументу конструктора класса. Это словарь с характеристиками целевого растра. Разрешённые ключи словаря: width, height, SRID, origin, scale, skew, datatype, driver и name (имя файла).По умолчанию, функция warp сохраняет большинство параметров равными значениям исходного растра, поэтому необходимо указать только те параметры, которые нужно изменить. Обратите внимание, что это включает драйвер, поэтому для растров, основанных на файлах, функция warp создаст новый растр на диске.
Единственным параметром, который отличается от исходного растра, является имя. Значение по умолчанию для имени растра — имя исходного растра, дополненное
'_copy' + source_driver_name. Для растров, основанных на файлах, рекомендуется указать путь к файлу целевого растра.Алгоритм ресемплирования, используемый для искажения, можно указать с помощью аргумента
resamplingПо умолчанию —NearestNeighbor, а другие допустимые значения —Bilinear,Cubic,CubicSpline,Lanczos,Average, иMode.Аргумент
max_errorможно использовать для указания максимальной ошибки в пикселях входных данных, разрешённой при приближении преобразования. По умолчанию — 0.0 для точных вычислений.Для пользователей, знакомых с
GDAL, эта функция имеет аналогичную функциональность утилите командной строкиgdalwarp.Например, функция warp может использоваться для агрегирования растра в два раза большего размера пикселей, чем у исходного растра:
>>> 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)[source] -
Преобразует этот растр в другую систему пространственных координат (
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[source] -
Возвращает строку с кратким описанием растра. Это эквивалентно команде 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[source] -
Представление этого растра в формате
bytes. ВозвращаетNoneдля растров, которые не хранятся в виртуальной файловой системе GDAL.
-
is_vsi_based[source] -
Логическое значение, указывающее, хранится ли этот растр в виртуальной файловой системе 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-службы (Persistent Auxiliary Metadata), статистика может быть кэширована в вспомогательном файле. В некоторых случаях эта метаданные могут не синхронизироваться со значениями пикселей или возвращаться значения из предыдущего вызова, которые не отражают значение аргумента
approximate. В таких случаях используйте аргументrefreshдля получения обновлённых значений и сохранения их в кэше.Для пустых полос (где все значения пикселей — «нет данных»), все статистические данные возвращаются как
None.Статистику также можно получить напрямую, обратившись к свойствам
min,max,meanиstd.
-
min -
Минимальное значение пикселя полосы (без учёта значения «нет данных»).
-
max -
Максимальное значение пикселя полосы (без учёта значения «нет данных»).
-
mean -
Среднее значение всех значений пикселей полосы (без учёта значения «нет данных»).
-
std -
Стандартное отклонение всех значений пикселей полосы (без учёта значения «нет данных»).
-
nodata_value -
Значение «нет данных» для полосы — это обычно специальное маркерное значение, используемое для обозначения пикселей, которые не являются действительными данными. Такие пиксели, как правило, не отображаются и не участвуют в аналитических операциях.
Чтобы удалить существующее значение «нет данных», установите это свойство в
None.
-
datatype(as_string=False) -
Тип данных, содержащихся в полосе, в виде целого числа от 0 (Неизвестно) до 14. Если
as_stringравноTrue, тип данных возвращается как строка. Посмотрите столбец «GDAL Pixel Type» в таблице значений типа типов данных для возможных значений.
-
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.
Новый растр создается, когда в конструктор GDALRaster передается dict. Словарь содержит определяющие параметры нового растра, такие как начало координат, размер или система пространственных координат. Словарь также может содержать пиксельные данные и информацию о формате нового растра. В результате, растр может быть файловым или основанным на памяти, в зависимости от указанного драйвера.
Нет стандарта описания растровых данных в словаре или формате 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, ... }, ... } ... )
Словарь band_input
Ключ bands в словаре ds_input — это список словарей band_input. Каждый словарь band_input может содержать пиксельные значения и значение «нет данных», которые будут установлены для полос нового растра. Массив данных может иметь полный размер нового растра или быть меньше. Для массивов, меньших полного растра, ключи size, shape, и offset управляют пиксельными значениями. Соответствующие ключи передаются методу data(). Их функциональность такая же, как установка данных полосы с помощью этого метода. Следующая таблица описывает ключи, которые можно использовать.
| Ключ | Значение по умолчанию | Использование |
|---|---|---|
nodata_value | None | Сопоставляется с атрибутом nodata_value |
data | То же, что и nodata_value или 0
| Передается методу data() |
size | Размер растра | Передается методу data() |
shape | То же, что и размер | Передается методу data() |
offset | (0, 0) | Передается методу data() |
Использование виртуальной файловой системы GDAL
GDAL может обращаться к файлам, хранящимся в файловой системе, но также поддерживает виртуальные файловые системы для абстрагирования доступа к другим типам файлов, например, сжатым, зашифрованным или удаленным.
Использование виртуальной файловой системы на основе памяти
GDAL имеет внутреннюю виртуальную файловую систему на основе памяти, позволяющую рассматривать блоки памяти как файлы. Она может использоваться для чтения и записи объектов GDALRaster в двоичные буферы файлов.
Это полезно в веб-контекстах, где растры могут быть получены в виде буфера из удаленного хранилища или возвращены из представления без записи на диск.
Объекты GDALRaster создаются в виртуальной файловой системе, когда в качестве входных данных предоставляется объект bytes, или когда путь к файлу начинается с /vsimem/.
Входные данные, предоставленные как bytes, должны представлять собой полное двоичное представление файла. Например:
# Read a raster as a file object from a remote source.
>>> from urllib.request import urlopen
>>> dat = urlopen("https://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 по виртуальным файловым системам https://gdal.org/user/virtual_file_systems.html.
Сжатые растры
Вместо разархивирования файла и создания экземпляра полученного растра, 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 по виртуальным файловым системам https://gdal.org/user/virtual_file_systems.html).
Настройки
GDAL_LIBRARY_PATH
Строка, определяющая расположение библиотеки GDAL. Обычно эта настройка используется только в случае, если библиотека GDAL находится в нестандартном расположении (например, /home/john/lib/libgdal.so).
Исключения
-
exception GDALException[source] -
Основное исключение GDAL, указывающее на ошибку, связанную с GDAL.
-
exception SRSException[source] -
Исключение, которое возникает при возникновении ошибки при построении или использовании объекта системы пространственных ссылок.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.1/ref/contrib/gis/gdal/