Растры
Растровое изображение – это цифровое представление рисунка, фотографии или иного графического материала в виде набора точек растра.
Класс 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)
См.также
Руководство пользователя ГИС Аксиома раздел «Растровые изображения»