# Растры

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

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

Примечание

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

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

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

Для открытия растровых файлов используйте функцию `axipy.ProviderManager.openfile()` объекта `axipy.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='password' schema='public' table=table_name")
    raster_layer = Layer.create(raster)
    print(raster_layer)
    map = Map([ raster_layer ])
    mapview = view_manager.create_mapview(map)

Во избежании хранения строки соединения в открытом виде, некоторые ключи можно передать как дополнительные параметры:

    raster = axipy.provider_manager.gdal.open("PG:host=server_name dbname='test' user='postgres' schema='public' table='table_name'", open_data = {'PASSWORD':'password'})

Пример открытия растра из БД 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.Raster.coordsystem` и точки привязки `axipy.Raster.get_gcps()`. Таким образом:

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

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

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

    from PySide2.QtGui import QTransform

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

Чтобы привязать растр по-другому, можно передать другую матрицу трансформации (аффинное преобразование). Предварительно ее придется узнать или посчитать. Для расчета матрицы преобразования достаточно 3 точек привязки `axipy.GCP`. Обычно по углам изображения. Функция `axipy.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)

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

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

См.также

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