Привязка растра по точкам (как в QGIS)
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 25 янв 2018, 20:08
- Репутация: 0
- Откуда: Новочеркасск
Привязка растра по точкам (как в QGIS)
Здравствуйте. Задача в следующая, необходимо в web-приложении (php) сделать привязку растровых изображений к карте, на подобии того, как это реализовано в QGIS http://gis-lab.info/qa/georef-qgis.html, т.е. пользователь выбирает несколько точек на загруженном изображении, затем несколько точек им соответствующих на карте и нажимает привязать. Изображение должно (возможно дифформироваться) отобразится на карте привязанным за эти точки. Подскажите возможно ли это сделать средствами MapServer-а или тут нужно будет прибегнуть к помощи библиотеки GDAL http://gis-lab.info/qa/georef-gdal.html? Если да, то что у неё (GDAL) будет на выходе geotif, который сразу можно кидать на растровый слой или же будет сгенерино новое изображение в том же формате + world файл? Как вообще это делается? Куда смотреть? В какую сторону копать? Может кто то делал, подскажите.
- antonv
- Активный участник
- Сообщения: 229
- Зарегистрирован: 29 ноя 2016, 10:44
- Репутация: 114
- Откуда: Санкт-Петербург
Re: Привязка растра по точкам (как в QGIS)
У меня была похожая задача, решить которую требовалось совсем топорно. Нужно было сделать так, чтобы после загрузки пользователем на сервер geotiff-растра, его превьюшка отобразилась бы на мини-карте.
Сделано было так: мини-карта создана при помощи leaflet.js, на ней какая-то растровая подложка для красоты. Пользователь аплоадит свой geotiff, библиотека GDAL конвертирует растр в какой-то совсем легковесный (geotiff-то весит ого-го, но для превьюшки его можно как угодно пережать) png или jpg, не помню, попутно меняя проекцию файла на проекцию, соответствующую мини-карте в leaflet.js. В leaflet можно накладывать прямоугольный растровый оверлей по координатам углов, а для этого необходимо, чтобы превьюшка в проекции мини-карты оказалась прямоугольной (а не раскореженной трапецией - ведь пользователь может загружать картинку в любой проекции). А дальше тем же самым GDAL вытаскиваем координаты двух углов, отправляем назад клиенту превьюшку с этими координатами, кладём на карту leaflet. Гонять лишний раз geotiff туда-сюда точно не стоит.
Применительно к вашей задаче остается вначале передать на сервер пары координат для точек привязки, и запустить сам процесс привязки. Поправьте, если не прав, но сделать это можно функцией gdal_warp
Это если топорно и без MapServer, только gdal, PHP и JS
Сделано было так: мини-карта создана при помощи leaflet.js, на ней какая-то растровая подложка для красоты. Пользователь аплоадит свой geotiff, библиотека GDAL конвертирует растр в какой-то совсем легковесный (geotiff-то весит ого-го, но для превьюшки его можно как угодно пережать) png или jpg, не помню, попутно меняя проекцию файла на проекцию, соответствующую мини-карте в leaflet.js. В leaflet можно накладывать прямоугольный растровый оверлей по координатам углов, а для этого необходимо, чтобы превьюшка в проекции мини-карты оказалась прямоугольной (а не раскореженной трапецией - ведь пользователь может загружать картинку в любой проекции). А дальше тем же самым GDAL вытаскиваем координаты двух углов, отправляем назад клиенту превьюшку с этими координатами, кладём на карту leaflet. Гонять лишний раз geotiff туда-сюда точно не стоит.
Применительно к вашей задаче остается вначале передать на сервер пары координат для точек привязки, и запустить сам процесс привязки. Поправьте, если не прав, но сделать это можно функцией gdal_warp
Это если топорно и без MapServer, только gdal, PHP и JS
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 25 янв 2018, 20:08
- Репутация: 0
- Откуда: Новочеркасск
Re: Привязка растра по точкам (как в QGIS)
Да, вы правы скорее всего вы правы, надо использовать как в статье http://gis-lab.info/qa/georef-gdal.html сначала gdal_translate, затем gdal_warp, но вот только что использовать в качестве аргументов -s_srs и -t_srs? Что только не пробовал, пишет "ERROR: 1 failed to compute gcp transform. transform is not solvable" Пробовал и просто Как я понимаю, описаные в примере +datum=Pulkovo_1942" - это какие то пресеты QGIS, а что делать, когда GDAL голая из MS4W ? Вообще, как я понял, в моём случае (да и в примере тоже) функцией gdal_translate, я связал координаты изображения с географическими координатами, поэтому мне остается всего лишь произвести преобразование растра посредством gdal_warp без преобразования системы координат, т.е. просто , но увы и этот код выкидывает ошибку!.. Что я делаю не так?
Код: Выделить всё
gdalwarp.exe output.tif result.tif
Код: Выделить всё
gdalwarp.exe output.tif result.tif
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: Привязка растра по точкам (как в QGIS)
Код: Выделить всё
+datum=Pulkovo_1942
- antonv
- Активный участник
- Сообщения: 229
- Зарегистрирован: 29 ноя 2016, 10:44
- Репутация: 114
- Откуда: Санкт-Петербург
Re: Привязка растра по точкам (как в QGIS)
Попробуйте всё-таки явно указать параметры -s_srs и -t_srs - они должны быть одинаковы и указывать ту систему координат, в которую пользователь хочет привязать растр. То есть если пары координат точек привязки вы указываете как "-gcp X_в_пикс_исходного_изображения Y_в_пикс_исходного_изображения Lon Lat" - то в -s_srs и -t_srs надо указать СК для Lon и Lat.
На гис-лабе есть статья о том, как в PROJ4 указать параметры. Они не зависят от того, установлен ли у вас QGIS, GDAL их должен их осилить.
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 25 янв 2018, 20:08
- Репутация: 0
- Откуда: Новочеркасск
Re: Привязка растра по точкам (как в QGIS)
Спасибо, большое! Немного разобрался, буду пробовать. Единственное, что не до конца понятно, это где будет хранится информация о привязке, если я запущу ф-ию gdal_translate для .jpeg или .png и на выходе укажу тоже .jpeg или .png ? А потом для получившегося файла (допустим это будет output.jpeg) запущу gdal_warp... откуда он узнает про те координаты, что я вводил в функции gdal_translate?..
- antonv
- Активный участник
- Сообщения: 229
- Зарегистрирован: 29 ноя 2016, 10:44
- Репутация: 114
- Откуда: Санкт-Петербург
Re: Привязка растра по точкам (как в QGIS)
При помощи gdalinfo можно узнать координаты углов изображения (того geotiff'а, который был привязан в нужную СК), а потом положить .jpg или .png по этим координатам куда нужно (leaflet.js, например, нужны координаты двух углов прямоугольника)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 37 гостей