Грабим WMS сервера с помощью GDAL

Landser
Интересующийся
Сообщения: 23
Зарегистрирован: 12 апр 2015, 19:44
Репутация: 1

Re: Грабим WMS сервера с помощью GDAL

Сообщение Landser » 17 апр 2015, 17:59

Денис, на скриншоте три попытки:
Изображение
Первая - попытка получить в объединённый выходной растр целую строку из 32 шт 1024х1024 тайлов. Вторая - попытка получить полстроки (16 тайлов). И лишь третья попытка получилась удачной, в ней мы получили самый первый тайл из строки. Считаю, что проблема тут скорей всего не в GDAL, а на стороне WMS-сервера. Вероятно, он обрубает слишком частые запросы тайлов. И в связи с этим получать с данного сервера целые строки нужного участка карты, и вместе с тем упростить скрипт к сожалению не получается. С получением же отдельных тайлов один за другим никаких проблем не наблюдается.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Грабим WMS сервера с помощью GDAL

Сообщение Максим Дубинин » 17 апр 2015, 19:41

что говорит

Код: Выделить всё

gdalinfo --version
?
пристегивайтесь, турбулентность прямо по курсу

Landser
Интересующийся
Сообщения: 23
Зарегистрирован: 12 апр 2015, 19:44
Репутация: 1

Re: Грабим WMS сервера с помощью GDAL

Сообщение Landser » 17 апр 2015, 19:58

Максим,
GDAL 1.7.0b2, FWTools 2.4.7, released 2010/01/19.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Грабим WMS сервера с помощью GDAL

Сообщение Максим Дубинин » 17 апр 2015, 20:14

обновите GDAL, не используйте FWTools, используйте OSGeo4W
пристегивайтесь, турбулентность прямо по курсу

Landser
Интересующийся
Сообщения: 23
Зарегистрирован: 12 апр 2015, 19:44
Репутация: 1

Re: Грабим WMS сервера с помощью GDAL

Сообщение Landser » 17 апр 2015, 21:14

Максим, благодарю вас! Обновил сборку и получилось взять сразу целую строку из 32 тайлов в общий выходной растр:
Изображение
Отлично, что скрипт упрощается. Алгоритм работы скрипта теперь видится таким:
Запускается счётчик цифрового имени выходного файла от 1 до максимального количества строк +1. Считываются начальные значения севера и юга для строки из ogc_wms.xml. Выполняется команда взятия строки с переменной в имени выходного файла. Вычисляются значения севера и юга для следующей строки, которые записываются в ogc_wms.xml. Переход к счётчику. Если счётчиком достигнуто максимальное количество строк +1, то происходит остановка. Теперь бы это реализовать, т.к. строк больше 30 (если не сдвигать, то ровно 30). :roll:

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Грабим WMS сервера с помощью GDAL

Сообщение Denis Rykov » 18 апр 2015, 01:22

Может я чего-то не понял, зачем куда-то что-то сдвигать, почему бы не запросить сразу весь охват?

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

Landser
Интересующийся
Сообщения: 23
Зарегистрирован: 12 апр 2015, 19:44
Репутация: 1

Re: Грабим WMS сервера с помощью GDAL

Сообщение Landser » 18 апр 2015, 01:39

Денис, дело в том, что WMS-сервер в каждый отданный фрагмент (тайл) рисует свой ватермарк, местами заметно портящий карту. Сервер не может отдавать фрагменты больше 1024х1024. Соответственно, если брать весь охват целиком, то количество таких ватермарков на растре будет равно общему количеству этих фрагментов в общем растре. Т.к. ватермарк расположен постоянно в одном и том же месте отданного сервером фрагмента, и если каждую последующую строку взять с поправкой на позицию ватермарка, то при окончательной склейке фрагментов ватермарки в каждой строке будет скрыты последующей строкой. Останутся лишь ватермарки внизу самой последней строки, и их легко обрезать при окончательной склейке строк.

UPD: Максимальный размер отдаваемых сервером тайлов оказывается 2048х2048.
Последний раз редактировалось Landser 18 апр 2015, 02:38, всего редактировалось 1 раз.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Грабим WMS сервера с помощью GDAL

Сообщение Denis Rykov » 18 апр 2015, 02:01

А можно адрес этого сервера, если это конечно не во внутренней сети?

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

Landser
Интересующийся
Сообщения: 23
Зарегистрирован: 12 апр 2015, 19:44
Репутация: 1

Re: Грабим WMS сервера с помощью GDAL

Сообщение Landser » 18 апр 2015, 02:19

Отправил в ЛС.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Грабим WMS сервера с помощью GDAL

Сообщение Denis Rykov » 18 апр 2015, 02:21

Посмотрю, как доберусь до нормального интернета.

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

Landser
Интересующийся
Сообщения: 23
Зарегистрирован: 12 апр 2015, 19:44
Репутация: 1

Re: Грабим WMS сервера с помощью GDAL

Сообщение Landser » 18 апр 2015, 02:31

Denis Rykov писал(а):Посмотрю, как доберусь до нормального интернета.

[ Сообщение с мобильного устройства ]

Да с сервером-то никаких проблем и нет. Кроме ватермарка в каждый отданный тайл. Что успешно решается введением поправки на последующую строку и проверено лично в ручном режиме правкой севера и юга в ogc_wms.xml. Получил несколько строчек, открыл полученные geotiff (Привязка идеальная, следовательно идеальный нахлёст строк друг на друга. Ватермарки всех строк кроме самой нижней скрыты нахлёстом. ) в Global Mapper, нижнюю подрезал и экспортнул в общий растр. Большие участки карты естественно руками не осилить. :)

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Грабим WMS сервера с помощью GDAL

Сообщение Denis Rykov » 19 апр 2015, 09:23

То что вы называете тайл - это на самом деле фрагмент, запрашиваемый GDAL-ом, и то что он у вас получился 1024 - это потому что такие настройки идут по дефолту, измените размер до 2048 и получите в два раза меньше watermark-ов, увеличить это значение до большего в вашем случае не удастся, так как сервер будет ругаться:
ERROR 1: GDALWMS: The server returned exception: msWMSLoadGetMapParams(): WMS server error. Image size out of range, WIDTH and HEIGHT must be between 1 and 2048 pixels
В общем случае ваша проблема может быть решена путём добавления в драйвер GDAL поддержки Meta Buffer по аналогии с тем, как это сделано в MapProxy. В качестве решения вашей конкретной задачи можно попробовать собрать свой WMS на базе внешнего и уже его использовать для склейки.
Spatial is now, more than ever, just another column- The Geometry Column.

Landser
Интересующийся
Сообщения: 23
Зарегистрирован: 12 апр 2015, 19:44
Репутация: 1

Re: Грабим WMS сервера с помощью GDAL

Сообщение Landser » 20 апр 2015, 22:57

Денис, благодарю, но проблема решается , имхо, несколько проще. Ведь утилита gdal_translate сама умеет запрашивать фрагменты с сервера с нужными координатами и разрешением. Задачи получить на выходе полностью объединённый растр нет. Поскольку его я легко и непринуждённо получаю с наглядным отображением в другой программе. Поэтому не вижу смысла вмешиваться в драйвер GDAL или поднимать локальный WMS для склейки. Мне нужен всего лишь скрипт, который может автоматически изменять параметры от заранее заданных значений для поочерёдного многократного запуска утилиты.
Эксперименты с разрешением фрагментов 2048х2048 и попытке взять строку из 12 в данном случае фрагментов иногда приводят к такой ошибке:

Код: Выделить всё

C:\OSGeo4W64>gdal_translate -srcwin 0 0 24576 2048 -of GTIFF ogc_wms.xml d:\temp
\29.tif
Input file size is 47104, 2048
0ERROR 1: GDALWMS: Unable to download block 4, 0.
  URL: http://.................................
  HTTP status code: 0, error: Failed connect to ........ :80; Connection
refused.
ERROR 1: ogc_wms.xml, band 1: IReadBlock failed at X offset 0, Y offset 0
ERROR 1: GetBlockRef failed at X block offset 0, Y block offset 0
Похоже на то, что возрастает количество HTTP запросов и серверу это не нравится. При запросе отдельных фрагментов 2048х2048 ошибок не наблюдается.

Аватара пользователя
SergeyRyzhkov
Гуру
Сообщения: 909
Зарегистрирован: 02 июл 2014, 19:13
Репутация: 203
Ваше звание: GP-экотеррористы
Откуда: Санкт-Петербург
Контактная информация:

Re: Грабим WMS сервера с помощью GDAL

Сообщение SergeyRyzhkov » 21 апр 2015, 09:29

Landser, сделайте "скрипт" в MS Excel :))))
посредством формулы, которую можно скопировать в другие строки (с авторасчетом), получите строки запросов. Потом в батник и вперед...

Landser
Интересующийся
Сообщения: 23
Зарегистрирован: 12 апр 2015, 19:44
Репутация: 1

Re: Грабим WMS сервера с помощью GDAL

Сообщение Landser » 21 апр 2015, 21:26

Сергей, алгоритм работы батника примерно такой:
Landser писал(а): Запускается счётчик цифрового имени выходного файла от 1 до максимального количества строк +1. Считываются начальные значения севера и юга для строки из ogc_wms.xml. Выполняется команда взятия строки с переменной в имени выходного файла. Вычисляются значения севера и юга для следующей строки, которые записываются в ogc_wms.xml. Переход к счётчику. Если счётчиком достигнуто максимальное количество строк +1, то происходит остановка.
Значение <UpperLeftY> считывать не нужно. Значение <LowerRightY> считывается из ogc_wms.xml.
Формулы простые:

Код: Выделить всё

<UpperLeftY>new=<LowerRightY>+200
 <LowerRightY>new=<LowerRightY>+200-10240
Вычисленные значения <UpperLeftY> и <LowerRightY> записываются в ogc_wms.xml. 200 - это поправка на перекрытие ватермарка, 1024 - это высота строки в геометрах = разрешение фрагмента по Y (2048 пикселей) умноженное на масштабный коэффициент карты (5 метров на пиксель).
Проблема правильно написать нужный батник, т.к. последний раз программировал лет так 25 назад на Бейсике. :roll:

Ответить

Вернуться в «GDAL/OGR»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость