Растры

Растровое изображение – это цифровое представление рисунка, фотографии или иного графического материала в виде набора точек растра.

Класс Raster представляет растровый объект данных.

Примечание

Для выполнения примеров:

from axipy import provider_manager, Layer, Map, view_manager, Raster, raster

Открытие растров, расположенных в файловой системе

Для открытия растровых файлов используйте функцию openfile() объекта provider_manager.

raster = provider_manager.openfile('path/to/raster.tab')

Открытие из СУБД

Так-же поддерживается открытие данных из СУБД PostgreSQL и Oracle. Данный функционал реализован через передачу строки в формате библиотеки GDAL. Пример открытия растра из БД PostgreSQL и показа его на карте:

raster = provider_manager.gdal.open("PG:host=server_name dbname='test' user='postgres' password='postgres' schema='public' table=table_name")
raster_layer = Layer.create(raster)
print(raster_layer)
map = Map([ raster_layer ])
mapview = view_manager.create_mapview(map)

Пример открытия растра из БД Oracle:

raster = provider_manager.gdal.open("GeoRaster:user/password@XE,GDAL_RDT,1")

где user/password@XE - строка соединения с БД, GDAL_RDT,1 - источник, который необходимо открыть. Подробнее см gdalinfo.

Открытие данных, расположенных на WEB-ресурсах

Пример открытия тайлового сервера TMS. При этом передается шаблон URL:

raster = provider_manager.tms.open('https://maps.axioma-gis.ru/osm/{LEVEL}/{ROW}/{COL}.png')

Пример открытия WMTS:

raster = provider_manager.wmts.open('https://basemap.at/wmts/1.0.0/WMTSCapabilities.xml', 'geolandbasemap')

Регистрация растра

Растры по определению имеют пространственную привязку - координатную систему coordsystem и точки привязки get_gcps(). Таким образом:

Изображение + Пространственная привязка = Растр

Для того, чтобы «привязать» растр (задать изображению пространственную привязку), можно воспользоваться функцией register() модуля raster.

Например так можно привязать растр, используя эквивалентную матрицу преобразования (QTransform по умолчанию). Т.е. точка на изображении (x, y) в пикселях будет привязана к точке в пространстве (x, y) в единицах Системы Координат.

from PySide2.QtGui import QTransform

matrix = QTransform()
coordsystem = CoordSystem.from_units(Unit.m)
register(imagefile, matrix, coordsystem)

Чтобы привязать растр по-другому, можно передать другую матрицу трансформации (аффинное преобразование). Предварительно ее придется узнать или посчитать. Для расчета матрицы преобразования достаточно 3 точек привязки GCP. Обычно по углам изображения. Функция register() также может это сделать.

gcps = [
    GCP((0, 0), (0, 1000)),
    GCP((100, 0), (1000, 1000)),
    GCP((0, 100), (0, 0)),
]
coordsystem = CoordSystem.from_string('prj:NonEarth 0,7')
register(imagefile, gcps, coordsystem, True)

Трансформация растра

Операция трансформации transform() растрового файла требуется для устранения или компенсации искажений, возникающих при создании растра. Требуется, когда аффинного преобразования недостаточно.

Пример использования
coordsystem = CoordSystem.from_epsg(4326)
gcps = [
    GCP((0, 0), (0, 0)),
    GCP((200, 0), (30, 30)),
    GCP((200, 200), (60, 0)),
]
transform(rasterfile, outputfile, gcps, coordsystem)

См.также

Руководство пользователя ГИС Аксиома раздел «Растровые изображения»