ГДАЛ 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 — это оболочка для объекта источника данных OGR, которая поддерживает чтение данных из различных форматов геопространственных файлов и источников данных, поддерживаемых OGR, с использованием согласованного интерфейса. Каждый источник данных представлен объектом DataSource, который содержит один или несколько слоев данных. Каждый слой, представленный объектом Layer, содержит некоторое количество географических объектов (Feature), информацию о типе объектов, содержащихся в этом слое (например, точки, полигоны и т. д.), а также имена и типы любых дополнительных полей (Field) данных, которые могут быть связаны с каждым объектом в этом слое.
- class DataSource(ds_input, encoding='utf-8')¶
Конструктору DataSource требуется только один параметр: путь к файлу, который вы хотите прочитать. Однако OGR также поддерживает множество более сложных источников данных, включая базы данных, доступ к которым можно получить, передав специальную строку имени вместо пути. Для получения дополнительной информации см. документацию `OGR Vector Formats`__. Свойство
nameэкземпляраDataSourceдает OGR-имя базового источника данных, который он использует.Необязательный параметр encoding позволяет указать нестандартную кодировку строк в источнике. Обычно это полезно, когда вы получаете исключения DjangoUnicodeDecodeError при чтении значений полей.
После того, как вы создали свой DataSource, вы можете узнать, сколько слоев данных он содержит, обратившись к свойству
layer_countили (что эквивалентно) с помощью функции len()``. Информацию о доступе к самим слоям данных см. в следующем разделе:>>> from django.contrib.gis.gdal import DataSource >>> ds = DataSource("/path/to/your/cities.shp") >>> ds.name '/path/to/your/cities.shp' >>> ds.layer_count # This file only contains one layer 1
- layer_count¶
Возвращает количество слоев в источнике данных.
- name¶
Возвращает имя источника данных.
Слой¶
- class Layer¶
Layer— это оболочка слоя данных в объектеDataSource. Вы никогда не создаете объект Layer напрямую. Вместо этого вы извлекаете их из объектаDataSource, который по сути является стандартным контейнером Python для объектовLayer. Например, вы можете получить доступ к определенному слою по его индексу (например,ds[0]для доступа к первому слою) или вы можете перебрать все слои в контейнере в циклеfor. Сам «Слой» действует как контейнер для геометрических объектов.Обычно все объекты в данном слое имеют один и тот же тип геометрии. Свойство
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
Пример выходных данных взят из источника данных городов, загруженного выше, который, очевидно, содержит один слой, называемый «города», который содержит три точечных объекта. Для простоты в примерах ниже предполагается, что вы сохранили этот слой в переменной 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. Если установлено значение, отличное от «Нет», при итерации по слою будут возвращены только объекты, пересекающие фильтр:>>> 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'.
Особенность¶
- class Feature¶
Featureоборачивает функцию OGR. Вы никогда не создаете объект Feature напрямую. Вместо этого вы извлекаете их из объектаLayer. Каждый объект состоит из геометрии и набора полей, содержащих дополнительные свойства. Геометрия поля доступна через его свойство geom, которое возвращает объектOGRGeometry.Функцияведет себя как стандартный контейнер 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
Поле¶
- 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))
Водитель¶
- class Driver(dr_input)¶
Класс Driver используется внутри для оболочки драйвера OGR
DataSource.- 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,буфером, содержащим данные WKB, или объектомOGRGeomType. Эти объекты также возвращаются из атрибутаFeature.geomпри чтении векторных данных изLayer(который, в свою очередь, является частьюDataSource).- classmethod from_gml(gml_string)¶
Создает
OGRGeometryиз заданной строки GML.- classmethod from_bbox(bbox)¶
Создает
Polygonиз заданной ограничивающей рамки (четверки).- __len__()¶
Возвращает количество точек в
LineString, количество колец вPolygonили количество геометрических фигур вGeometryCollection. Не применимо к другим типам геометрии.- __iter__()¶
Выполняет итерацию по точкам в
LineString, кольцам вPolygonили геометрии вGeometryCollection. Не применимо к другим типам геометрии.- __getitem__()¶
Возвращает точку по указанному индексу для
LineString, внутреннее кольцо по указанному индексу дляPolygonили геометрию по указанному индексу вGeometryCollection. Не применимо к другим типам геометрии.- dimension¶
Возвращает количество скоординированных размеров геометрии, т. е. 0 для точек, 1 для линий и т. д.:
>>> polygon.dimension 2
- is_3d¶
Логическое значение, указывающее, имеет ли эта геометрия координаты Z.
- set_3d(value)¶
Метод, который добавляет или удаляет размер координаты Z.
>>> p = OGRGeometry("POINT (1 2 3)") >>> p.is_3d True >>> p.set_3d(False) >>> p.wkt "POINT (1 2)"
- is_measured¶
Логическое значение, указывающее, имеет ли эта геометрия координаты M.
- set_measured(value)¶
Метод добавления или удаления размера координаты M.
>>> p = OGRGeometry("POINT (1 2)") >>> p.is_measured False >>> p.set_measured(True) >>> p.wkt "POINT M (1 2 0)"
- geom_count¶
Возвращает количество элементов в этой геометрии:
>>> polygon.geom_count 1
- has_curve¶
New in Django 5.2.Логическое значение, указывающее, является ли данная геометрия геометрией кривой или содержит ее.
- get_linear_geometry()¶
New in Django 5.2.Возвращает линейную версию геометрии. Если преобразование невозможно выполнить, возвращается исходная геометрия.
- get_curve_geometry()¶
New in Django 5.2.Возвращает изогнутую версию геометрии. Если преобразование невозможно выполнить, возвращается исходная геометрия.
- 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¶
Возвращает оболочку этой геометрии как кортеж из четырех элементов, а не как объект
Envelope:>>> point.extent (0.0, 0.0, 5.0, 5.0)
- srs¶
Это свойство управляет пространственной привязкой для этой геометрии или «Нет», если ей не назначена никакая система пространственной привязки. Если оно назначено, доступ к этому свойству возвращает объект
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¶
Возвращает
буфер, содержащий 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.- centroid¶
Возвращает
Point, представляющий центр тяжести этой геометрии.- 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¶
Возвращает координату 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¶
Возвращает список M координат в этой строке или
None, если в строке нет M координат:>>> OGRGeometry("LINESTRING(0 1 2 10, 1 2 3 11, 2 3 4 12)").m [10.0, 11.0, 12.0]
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 Geometry:
>>> gt1.name 'Polygon'
- num¶
Возвращает число, соответствующее типу геометрии OGR:
>>> gt1.num 3
- django¶
Возвращает тип поля Django (подкласс GeometryField), который будет использоваться для хранения этого типа OGR, или None, если соответствующий тип Django отсутствует:
>>> gt1.django 'PolygonField'
Конверт¶
- class Envelope(*args)¶
Представляет структуру OGR Envelope, содержащую минимальные и максимальные координаты X, Y для ограничивающей рамки прямоугольника. Именование переменных совместимо со структурой OGR Envelope C.
- min_x¶
Значение минимальной координаты X.
- min_y¶
Значение максимальной координаты X.
- max_x¶
Значение минимальной координаты Y.
- max_y¶
Значение максимальной координаты Y.
- ur¶
Верхняя правая координата в виде кортежа.
- ll¶
Нижняя левая координата в виде кортежа.
- tuple¶
Кортеж, представляющий конверт.
- wkt¶
Строка, представляющая этот конверт в виде многоугольника в формате WKT.
- expand_to_include(*args)¶
Объекты системы координат¶
Пространственная ссылка¶
- class SpatialReference(srs_input)¶
Объекты пространственной привязки инициализируются по заданному
srs_input, который может быть одним из следующих:Хорошо известный текст OGC (WKT) (строка)
Код EPSG (целое или строковое)
PROJ-строка
Сокращенная строка для известных стандартов (
'WGS84','WGS72','NAD27','NAD83')
Например:
>>> wgs84 = SpatialReference("WGS84") # shorthand string >>> wgs84 = SpatialReference(4326) # EPSG code >>> wgs84 = SpatialReference("EPSG:4326") # EPSG string >>> proj = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs " >>> wgs84 = SpatialReference(proj) # PROJ string >>> wgs84 = SpatialReference( ... """GEOGCS["WGS 84", ... DATUM["WGS_1984", ... SPHEROID["WGS 84",6378137,298.257223563, ... AUTHORITY["EPSG","7030"]], ... AUTHORITY["EPSG","6326"]], ... PRIMEM["Greenwich",0, ... AUTHORITY["EPSG","8901"]], ... UNIT["degree",0.01745329251994328, ... AUTHORITY["EPSG","9122"]], ... AUTHORITY["EPSG","4326"]]""" ... ) # OGC WKT
- __getitem__(target)¶
Возвращает значение заданного узла атрибута строки,
None, если узел не существует. В качестве параметра также можно использовать кортеж (цель, дочерний элемент), где дочерний элемент — это индекс атрибута в WKT. Например:>>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]' >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326 >>> print(srs["GEOGCS"]) WGS 84 >>> print(srs["DATUM"]) WGS_1984 >>> print(srs["AUTHORITY"]) EPSG >>> print(srs["AUTHORITY", 1]) # The authority value 4326 >>> print(srs["TOWGS84", 4]) # the fourth value in this wkt 0 >>> print(srs["UNIT|AUTHORITY"]) # For the units authority, have to use the pipe symbol. EPSG >>> print(srs["UNIT|AUTHORITY", 1]) # The authority value for the units 9122
- attr_value(target, index=0)¶
Значение атрибута для данного целевого узла (например, PROJCS). Ключевое слово index указывает индекс дочернего узла, который нужно вернуть.
- auth_name(target)¶
Возвращает имя органа для заданного целевого узла строки.
- auth_code(target)¶
Возвращает код авторизации для заданного целевого узла строки.
- clone()¶
Возвращает клон этого объекта пространственной привязки.
- identify_epsg()¶
Этот метод проверяет WKT этой SpatialReference и добавит авторитетные узлы EPSG, к которым применим идентификатор EPSG.
- from_esri()¶
Преобразует эту SpatialReference из формата ESRI в EPSG.
- to_esri()¶
Преобразует эту SpatialReference в формат ESRI.
- validate()¶
Проверяет, действительна ли данная пространственная привязка; в противном случае будет выдано исключение.
- import_epsg(epsg)¶
Импортируйте пространственную привязку из кода EPSG.
- import_proj(proj)¶
Импортируйте пространственную привязку из строки PROJ.
- 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 представлено тремя полосами: одна для красного, одна для зеленого и одна для синего.
Примечание
Для растровых данных нет разницы между экземпляром растра и его источником данных. В отличие от объектов Geometry, объекты GDALRaster всегда являются источником данных. Временные растры могут быть созданы в памяти с помощью соответствующего драйвера, но они будут того же класса, что и файловые источники растров.
- class GDALRaster(ds_input, write=False)¶
Конструктор GDALRaster принимает два параметра. Первый параметр определяет источник растра, а второй параметр определяет, следует ли открывать растр в режиме записи. Для вновь создаваемых растров второй параметр игнорируется, и новый растр всегда создается в режиме записи.
Первый параметр может принимать три формы: строку или
Path, представляющую путь к файлу (файловая система или виртуальная файловая система GDAL), словарь со значениями, определяющими новый растр, или байтовый объект, представляющий растровый файл.Если входными данными является путь к файлу, растр открывается оттуда. Если входные данные представляют собой необработанные данные в словаре, параметры «ширина», «высота» и «srid» являются обязательными. Если входные данные представляют собой байтовый объект, он будет открыт с использованием виртуальной файловой системы GDAL.
Подробное описание того, как создавать растры с использованием словарного ввода, см. в разделе Создание растров из данных. Подробное описание создания растров в виртуальной файловой системе см. в разделе Использование виртуальной файловой системы GDAL.
В следующем примере показано, как можно создавать растры из разных входных источников (с использованием примеров данных из тестов GeoDjango; см. также раздел Пример данных).
>>> from django.contrib.gis.gdal import GDALRaster >>> rst = GDALRaster("/path/to/your/raster.tif", write=False) >>> rst.name '/path/to/your/raster.tif' >>> rst.width, rst.height # This file has 163 x 174 pixels (163, 174) >>> rst = GDALRaster( ... { # Creates an in-memory raster ... "srid": 4326, ... "width": 4, ... "height": 4, ... "datatype": 1, ... "bands": [ ... { ... "data": (2, 3), ... "offset": (1, 1), ... "size": (2, 2), ... "shape": (2, 1), ... "nodata_value": 5, ... } ... ], ... } ... ) >>> rst.srs.srid 4326 >>> rst.width, rst.height (4, 4) >>> rst.bands[0].data() array([[5, 5, 5, 5], [5, 2, 3, 5], [5, 2, 3, 5], [5, 5, 5, 5]], dtype=uint8) >>> rst_file = open("/path/to/your/raster.tif", "rb") >>> rst_bytes = rst_file.read() >>> rst = GDALRaster(rst_bytes) >>> rst.is_vsi_based True >>> rst.name # Stored in a random path in the vsimem filesystem. '/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'
- name¶
Имя источника, эквивалентное пути к входному файлу, или имени, указанному при создании экземпляра.
>>> GDALRaster({"width": 10, "height": 10, "name": "myraster", "srid": 4326}).name 'myraster'
- driver¶
Имя драйвера GDAL, используемого для обработки входного файла. Для GDALRaster, созданных из файла, тип драйвера определяется автоматически. По умолчанию растры создаются в памяти (MEM), но при необходимости их можно изменить. Например, используйте GTiff для файла GeoTiff. Список типов файлов см. также в списке `Растровые форматы GDAL`__.
Растр в памяти создается с помощью следующего примера:
>>> GDALRaster({"width": 10, "height": 10, "srid": 4326}).driver.name 'MEM'
Растр GeoTiff на основе файла создается с помощью следующего примера:
>>> import tempfile >>> rstfile = tempfile.NamedTemporaryFile(suffix=".tif") >>> rst = GDALRaster( ... { ... "driver": "GTiff", ... "name": rstfile.name, ... "srid": 4326, ... "width": 255, ... "height": 255, ... "nr_of_bands": 1, ... } ... ) >>> rst.name '/tmp/tmp7x9H4J.tif' # The exact filename will be different on your computer >>> rst.driver.name 'GTiff'
- width¶
Ширина источника в пикселях (ось X).
>>> GDALRaster({"width": 10, "height": 20, "srid": 4326}).width 10
- height¶
Высота источника в пикселях (ось Y).
>>> GDALRaster({"width": 10, "height": 20, "srid": 4326}).height 20
- srs¶
Пространственная система привязки растра в виде экземпляра
SpatialReference. SRS можно изменить, установив для него другойSpatialReferenceили предоставив любой ввод, который принимается конструкторомSpatialReference.>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.srs.srid 4326 >>> rst.srs = 3086 >>> rst.srs.srid 3086
- srid¶
Идентификатор пространственной системы привязки (SRID) растра. Это свойство является ярлыком для получения или установки SRID через атрибут
srs.>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.srid 4326 >>> rst.srid = 3086 >>> rst.srid 3086 >>> rst.srs.srid # This is equivalent 3086
- geotransform¶
Матрица аффинного преобразования, используемая для пространственной привязки источника, в виде кортежа из шести коэффициентов, которые отображают координаты пикселей/линий в пространство с географической привязкой, используя следующее соотношение:
Xgeo = GT(0) + Xpixel * GT(1) + Yline * GT(2) Ygeo = GT(3) + Xpixel * GT(4) + Yline * GT(5)
Те же значения можно получить, обратившись к свойствам
origin(индексы 0 и 3),scale(индексы 1 и 5) иskew(индексы 2 и 4).По умолчанию используется
[0.0, 1.0, 0.0, 0.0, 0.0, -1.0].>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.geotransform [0.0, 1.0, 0.0, 0.0, 0.0, -1.0]
- origin¶
Координаты верхнего левого начала растра в пространственной системе координат источника в виде точечного объекта с элементами
xиy.>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.origin [0.0, 0.0] >>> rst.origin.x = 1 >>> rst.origin [1.0, 0.0]
- scale¶
Ширина и высота пикселя, используемые для пространственной привязки растра в виде точечного объекта с элементами
xиy. См.geotransformдля получения дополнительной информации.>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.scale [1.0, -1.0] >>> rst.scale.x = 2 >>> rst.scale [2.0, -1.0]
- skew¶
Коэффициенты наклона, используемые для пространственной привязки растра как точечного объекта с элементами
xиy. В случае изображений, расположенных на севере вверх, оба этих коэффициента равны «0».>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.skew [0.0, 0.0] >>> rst.skew.x = 3 >>> rst.skew [3.0, 0.0]
- extent¶
Экстент (граничные значения) источника растра в виде 4-х кортежей
(xmin, ymin, xmax, ymax)в пространственной системе координат источника.>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.extent (0.0, -20.0, 10.0, 0.0) >>> rst.origin.x = 100 >>> rst.extent (100.0, -20.0, 110.0, 0.0)
- bands¶
Список всех полос источника в виде экземпляров
GDALBand.>>> rst = GDALRaster( ... { ... "width": 1, ... "height": 2, ... "srid": 4326, ... "bands": [{"data": [0, 1]}, {"data": [2, 3]}], ... } ... ) >>> len(rst.bands) 2 >>> rst.bands[1].data() array([[ 2., 3.]], dtype=float32)
- warp(ds_input, resampling='NearestNeighbour', max_error=0.0)¶
Возвращает искаженную версию этого растра.
Параметры деформации можно указать с помощью аргумента ds_input. Использование ds_input аналогично соответствующему аргументу конструктора класса. Это словарь с характеристиками целевого растра. Допустимые значения ключей словаря: ширина, высота, SRID, начало координат, масштаб, наклон, тип данных, драйвер и имя (имя файла).
По умолчанию функции деформации сохраняют большинство параметров равными значениям исходного исходного растра, поэтому необходимо указать только те параметры, которые следует изменить. Обратите внимание, что сюда входит и драйвер, поэтому для файловых растров функция деформации создаст новый растр на диске.
Единственный параметр, который задается иначе, чем у исходного растра, — это имя. Значением имени растра по умолчанию является имя исходного растра, к которому добавляется
'_copy' + source_driver_name. Для файловых растров рекомендуется указывать путь к файлу целевого растра.Алгоритм повторной выборки, используемый для деформации, можно указать с помощью аргумента
resampling. По умолчанию установлено значение «NearestNeighbor», а другими допустимыми значениями являются «Билинейный», «Кубический», «Кубический сплайн», «Ланцос», «Средний» и «Режим».Аргумент max_error можно использовать для указания максимальной ошибки, измеренной во входных пикселях, которая допускается при аппроксимации преобразования. Значение по умолчанию — 0,0 для точных вычислений.
Для пользователей, знакомых с GDAL, эта функция аналогична утилите командной строки gdalwarp.
Например, функцию деформации можно использовать для агрегирования растра до двойного его исходного пиксельного масштаба:
>>> rst = GDALRaster( ... { ... "width": 6, ... "height": 6, ... "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}], ... } ... ) >>> target = rst.warp({"scale": [200, -200], "width": 3, "height": 3}) >>> target.bands[0].data() array([[ 7., 9., 11.], [ 19., 21., 23.], [ 31., 33., 35.]], dtype=float32)
- transform(srs, driver=None, name=None, resampling='NearestNeighbour', max_error=0.0)¶
Преобразует этот растр в другую систему пространственной привязки (
srs), которая может быть объектомSpatialReferenceили любым другим входным сигналом, принимаемымSpatialReference(включая строки пространственной привязки WKT и PROJ или целочисленный SRID).Он вычисляет границы и масштаб текущего растра в новой системе пространственной привязки и деформирует растр с помощью функции
warp.По умолчанию используется драйвер исходного растра, а именем растра является исходное имя, к которому добавлено
'_copy' + source_driver_name. Другой драйвер или имя можно указать с помощью аргументовdriverиname.Алгоритм передискретизации по умолчанию — NearestNeighbour, но его можно изменить с помощью аргумента resampling. Максимально допустимая ошибка по умолчанию для повторной выборки равна 0,0 и может быть изменена с помощью аргумента max_error. Подробную информацию об этих аргументах можно найти в документации
warp.>>> rst = GDALRaster( ... { ... "width": 6, ... "height": 6, ... "srid": 3086, ... "origin": [500000, 400000], ... "scale": [100, -100], ... "bands": [{"data": range(36), "nodata_value": 99}], ... } ... ) >>> target_srs = SpatialReference(4326) >>> target = rst.transform(target_srs) >>> target.origin [-82.98492744885776, 27.601924753080144]
- info¶
Возвращает строку со сводкой о растре. Это эквивалент утилиты командной строки `gdalinfo`__.
- metadata¶
Метаданные этого растра, представленные в виде вложенного словаря. Ключ первого уровня — это домен метаданных. Второй уровень содержит имена и значения элементов метаданных из каждого домена.
Чтобы установить или обновить элемент метаданных, передайте соответствующий элемент метаданных методу, используя вложенную структуру, описанную выше. Обновляются только ключи, находящиеся в указанном словаре; остальные метаданные остаются неизменными.
Чтобы удалить элемент метаданных, используйте «None» в качестве значения метаданных.
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326}) >>> rst.metadata {} >>> rst.metadata = {"DEFAULT": {"OWNER": "Django", "VERSION": "1.0"}} >>> rst.metadata {'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}} >>> rst.metadata = {"DEFAULT": {"OWNER": None, "VERSION": "2.0"}} >>> rst.metadata {'DEFAULT': {'VERSION': '2.0'}}
- vsi_buffer¶
Байтовое представление этого растра. Возвращает None для растров, которые не хранятся в виртуальной файловой системе GDAL.
- is_vsi_based¶
Логическое значение, указывающее, хранится ли этот растр в виртуальной файловой системе GDAL.
GDALBand¶
- class GDALBand¶
Экземпляры
GDALRasterне создаются явно, а скорее получаются из объектаGDALRasterчерез его атрибутbands. GDALBands содержит фактические значения пикселей растра.- description¶
Название или описание группы, если таковое имеется.
- width¶
Ширина полосы в пикселях (ось X).
- height¶
Высота полосы в пикселях (ось Y).
- pixel_count¶
Общее количество пикселей в этой полосе. Равен
ширина * высота.
- statistics(refresh=False, approximate=False)¶
Вычислите статистику по значениям пикселей этой полосы. Возвращаемое значение представляет собой кортеж со следующей структурой:
(минимум, максимум, среднее, стандартное отклонение).Если аргумент
approximateустановлен вTrue, статистика может быть вычислена на основе обзоров или подмножества фрагментов изображений.Если для аргумента
refreshустановлено значениеTrue, статистика будет рассчитываться непосредственно из данных, а кеш будет обновляться с учетом результата.Если найдено значение постоянного кэша, это значение возвращается. Для растровых форматов, использующих службы постоянных вспомогательных метаданных (PAM), статистика может кэшироваться во вспомогательном файле. В некоторых случаях эти метаданные могут не синхронизироваться со значениями пикселей или вызывать возврат значений из предыдущего вызова, которые не отражают значение аргумента
approximate. В таких случаях используйте аргумент «обновить», чтобы получить обновленные значения и сохранить их в кеше.Для пустых полос (где все значения пикселей «нет данных») вся статистика возвращается как «Нет».
Статистику также можно получить напрямую, обратившись к свойствам
min,max,meanиstd.
- min¶
Минимальное значение пикселя полосы (исключая значение «нет данных»).
- max¶
Максимальное значение пикселя полосы (исключая значение «нет данных»).
- mean¶
Среднее значение всех пикселей полосы (исключая значение «нет данных»).
- std¶
Стандартное отклонение всех значений пикселей полосы (исключая значение «нет данных»).
- nodata_value¶
Значение «нет данных» для полосы обычно представляет собой специальное значение маркера, используемое для обозначения пикселей, которые не являются допустимыми данными. Такие пиксели, как правило, не должны отображаться и не должны участвовать в операциях анализа.
Чтобы удалить существующее значение «нет данных», установите для этого свойства значение «Нет».
- datatype(as_string=False)¶
Тип данных, содержащийся в полосе, в виде целочисленной константы от 0 (неизвестно) до 14. Если as_string имеет значение True, тип данных возвращается в виде строки. Проверьте столбец «Тип пикселя GDAL» в таблице значений типов данных, чтобы узнать возможные значения.
- color_interp(as_string=False)¶
Интерпретация цвета полосы в виде целого числа от 0 до 16. Если as_string имеет значение True, тип данных возвращается в виде строки со следующими возможными значениями: GCI_Undefine, GCI_GrayIndex, GCI_PaletteIndex, GCI_RedBand, GCI_GreenBand,
GCI_BlueBand,GCI_AlphaBand,GCI_HueBand,GCI_SaturationBand,GCI_LightnessBand,GCI_CyanBand,GCI_MagentaBand,GCI_YellowBand,GCI_BlackBand,GCI_YCbCr_YBand,GCI_YCbCr_CbBandиGCI_YCbCr_CrBand.GCI_YCbCr_CrBandтакже представляетGCI_Max, поскольку оба соответствуют целому числу 16, но толькоGCI_YCbCr_CrBandвозвращается в виде строки.
- data(data=None, offset=None, size=None, shape=None)¶
Метод доступа к значениям пикселей GDALBand. Возвращает полный массив данных, если параметры не указаны. Подмножество массива пикселей можно запросить, указав смещение и размер блока в виде кортежей.
Если NumPy доступен, данные возвращаются в виде массива NumPy. По соображениям производительности настоятельно рекомендуется использовать NumPy.
Данные записываются в GDALBand, если указан параметр data. Входные данные могут быть одного из следующих типов: упакованная строка, буфер, список, массив и массив NumPy. Количество элементов во входных данных обычно должно соответствовать общему количеству пикселей в полосе или количеству пикселей для определенного блока значений пикселей, если указаны параметры offset и size.
Если количество элементов во входных данных отличается от целевого пиксельного блока, необходимо указать параметр shape. Форма представляет собой кортеж, который определяет ширину и высоту входных данных в пикселях. Затем данные реплицируются для обновления значений пикселей выбранного блока. Это полезно, например, для заполнения всей полосы одним значением.
Например:
>>> rst = GDALRaster( ... {"width": 4, "height": 4, "srid": 4326, "datatype": 1, "nr_of_bands": 1} ... ) >>> bnd = rst.bands[0] >>> bnd.data(range(16)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(offset=(1, 1), size=(2, 2)) array([[ 5, 6], [ 9, 10]], dtype=int8) >>> bnd.data(data=[-1, -2, -3, -4], offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -1, -2, 7], [ 8, -3, -4, 11], [12, 13, 14, 15]], dtype=int8) >>> bnd.data(data="\x9d\xa8\xb3\xbe", offset=(1, 1), size=(2, 2)) >>> bnd.data() array([[ 0, 1, 2, 3], [ 4, -99, -88, 7], [ 8, -77, -66, 11], [ 12, 13, 14, 15]], dtype=int8) >>> bnd.data([1], shape=(1, 1)) >>> bnd.data() array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], dtype=uint8) >>> bnd.data(range(4), shape=(1, 4)) array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], dtype=uint8)
- metadata¶
Метаданные этой группы. Функциональность идентична
GDALRaster.metadata.
Создание растров из данных¶
В этом разделе описывается, как создавать растры с нуля, используя параметр ds_input.
Новый растр создается, когда конструктору GDALRaster передается dict. Словарь содержит определяющие параметры нового растра, такие как начало координат, размер или система пространственной привязки. Словарь также может содержать данные пикселей и информацию о формате нового растра. Таким образом, результирующий растр может быть основан на файлах или памяти, в зависимости от указанного драйвера.
Не существует стандарта для описания растровых данных в словаре или формате JSON. Таким образом, определение ввода словаря в класс GDALRaster специфично для Django. Он основан на формате geojson`__, но стандарт ``geojson в настоящее время ограничен векторными форматами.
Примеры использования разных ключей при создании растров можно найти в документации соответствующих атрибутов и методов классов GDALRaster и GDALBand.
Словарь ds_input¶
Для создания растра в словаре ds_input требуется всего несколько ключей: width, height и srid. Все остальные параметры имеют значения по умолчанию (см. таблицу ниже). Список ключей, которые можно передать в словаре ds_input, тесно связан со свойствами GDALRaster, но не идентичен ему. Многие параметры напрямую сопоставлены с этими свойствами; остальные описаны ниже.
В следующей таблице описаны все ключи, которые можно установить в словаре ds_input.
Ключ |
По умолчанию |
Использование |
|---|---|---|
|
необходимый |
Сопоставляется с атрибутом |
|
необходимый |
Сопоставляется с атрибутом |
|
необходимый |
Сопоставляется с атрибутом |
|
|
Сопоставляется с атрибутом |
|
|
См. ниже |
|
|
Сопоставляется с атрибутом |
|
|
Сопоставляется с атрибутом |
|
|
Сопоставляется с атрибутом |
|
|
См. ниже |
|
|
См. ниже |
|
|
См. ниже |
|
|
См. ниже |
- name
Строка, представляющая имя растра. При создании файлового растра этот параметр должен быть путем к файлу нового растра. Если имя начинается с
/vsimem/, растр создается в виртуальной файловой системе GDAL.
- datatype
Целое число, представляющее тип данных для всех каналов. По умолчанию
6(Float32). Все каналы нового растра должны иметь один и тот же тип данных. Сопоставление значений:Значение
Тип пикселя GDAL
Описание
1
GDT_байт
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 с входными данными диапазона. Итоговые индексы полос такие же, как в приведенном списке. Определение входного словаря полосы приведено ниже. Если данные каналов не предоставлены, значения растровых каналов создаются как массив нулей, а для значения «нет данных» устанавливается значение «Нет».
- 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 может содержать значения пикселей и значение «нет данных», которое должно быть установлено на каналах нового растра. Массив данных может иметь полный размер нового растра или быть меньше. Для массивов, размер которых меньше полного растра, значениями пикселей управляют клавиши размера, формы и смещения. Соответствующие ключи передаются методу data(). Их функциональность аналогична настройке данных полосы этим методом. В следующей таблице описаны ключи, которые можно использовать.
Ключ |
По умолчанию |
Использование |
|---|---|---|
|
|
Сопоставляется с атрибутом |
|
То же, что |
Передается в метод |
|
|
Передается в метод |
|
То же, что и размер |
Передается в метод |
|
|
Передается в метод |
Использование виртуальной файловой системы GDAL¶
GDAL может получать доступ к файлам, хранящимся в файловой системе, но также поддерживает виртуальные файловые системы для абстрагирования доступа к другим типам файлов, таким как сжатые, зашифрованные или удаленные файлы.
Использование виртуальной файловой системы на основе памяти¶
GDAL имеет внутреннюю файловую систему, основанную на памяти, которая позволяет рассматривать блоки памяти как файлы. Его можно использовать для чтения и записи объектов GDALRaster в буферы двоичных файлов и из них.
Это полезно в веб-контекстах, где растры могут быть получены в виде буфера из удаленного хранилища или возвращены из представления без записи на диск.
Объекты GDALRaster создаются в виртуальной файловой системе, когда объект bytes предоставляется в качестве входных данных или когда путь к файлу начинается с /vsimem/.
Входные данные, представленные в виде байтов, должны быть полным двоичным представлением файла. Например:
# 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 возвращает байтовое представление растра.
Вот как создать растр и вернуть его в виде файла в HttpResponse:
>>> from django.http import HttpResponse
>>> rst = GDALRaster(
... {
... "name": "/vsimem/temporarymemfile",
... "driver": "tif",
... "width": 6,
... "height": 6,
... "srid": 3086,
... "origin": [500000, 400000],
... "scale": [100, -100],
... "bands": [{"data": range(36), "nodata_value": 99}],
... }
... )
>>> HttpResponse(rast.vsi_buffer, "image/tiff")
Использование других виртуальных файловых систем¶
В зависимости от локальной сборки GDAL могут поддерживаться другие виртуальные файловые системы. Вы можете использовать их, добавив к указанному пути соответствующий префикс /vsi*/. Дополнительную информацию см. в документации по виртуальным файловым системам GDAL.
Сжатые растры¶
Вместо распаковки файла и создания экземпляра результирующего растра GDAL может напрямую обращаться к сжатым файлам, используя виртуальные файловые системы /vsizip/, /vsigzip/ или /vsitar/:
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster("/vsizip/path/to/your/file.zip/path/to/raster.tif")
>>> rst = GDALRaster("/vsigzip/path/to/your/file.gz")
>>> rst = GDALRaster("/vsitar/path/to/your/file.tar/path/to/raster.tif")
Сетевые растры¶
GDAL может прозрачно поддерживать онлайн-ресурсы и поставщиков хранилищ. Пока он построен с такими возможностями.
Чтобы получить доступ к общедоступному растровому файлу без аутентификации, вы можете использовать /vsicurl/:
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster("/vsicurl/https://example.com/raster.tif")
>>> rst.name
'/vsicurl/https://example.com/raster.tif'
Для коммерческих поставщиков хранилищ (например, /vsis3/) система должна быть предварительно настроена для аутентификации и, возможно, других настроек (доступные параметры см. в ``документации по виртуальным файловым системам GDAL`_).
Настройки¶
GDAL_LIBRARY_PATH¶
Строка, указывающая расположение библиотеки GDAL. Обычно этот параметр используется только в том случае, если библиотека GDAL находится в нестандартном расположении (например, /home/john/lib/libgdal.so).
Исключения¶
- exception GDALException¶
Базовое исключение GDAL, указывающее на ошибку, связанную с GDAL.
- exception SRSException¶
Исключение, возникающее при возникновении ошибки при построении или использовании объекта системы пространственной привязки.