Растры

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

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

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

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

raster = axipy.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')

Операции с растрами

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

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

Регистрация

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

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

from axipy import CoordSystem, Unit
from axipy.da.raster import register, GCP
from PySide2.QtGui import QTransform

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

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

from axipy import CoordSystem
from axipy.da.raster import register, GCP

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)

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

Операция трансформации axipy.da.raster.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)

См.также

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