Spec-Zone.ru › Django 5.1

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 используется внутри для обертывания драйвера OGR DataSource.

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).

END_OF_DOCUMENT_MARKER
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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API