Грабим WMS сервера с помощью GDAL
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 12 апр 2015, 19:44
- Репутация: 1
Re: Грабим WMS сервера с помощью GDAL
Денис, на скриншоте три попытки:
Первая - попытка получить в объединённый выходной растр целую строку из 32 шт 1024х1024 тайлов. Вторая - попытка получить полстроки (16 тайлов). И лишь третья попытка получилась удачной, в ней мы получили самый первый тайл из строки. Считаю, что проблема тут скорей всего не в GDAL, а на стороне WMS-сервера. Вероятно, он обрубает слишком частые запросы тайлов. И в связи с этим получать с данного сервера целые строки нужного участка карты, и вместе с тем упростить скрипт к сожалению не получается. С получением же отдельных тайлов один за другим никаких проблем не наблюдается.
Первая - попытка получить в объединённый выходной растр целую строку из 32 шт 1024х1024 тайлов. Вторая - попытка получить полстроки (16 тайлов). И лишь третья попытка получилась удачной, в ней мы получили самый первый тайл из строки. Считаю, что проблема тут скорей всего не в GDAL, а на стороне WMS-сервера. Вероятно, он обрубает слишком частые запросы тайлов. И в связи с этим получать с данного сервера целые строки нужного участка карты, и вместе с тем упростить скрипт к сожалению не получается. С получением же отдельных тайлов один за другим никаких проблем не наблюдается.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Грабим WMS сервера с помощью GDAL
что говорит ?
Код: Выделить всё
gdalinfo --version
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 12 апр 2015, 19:44
- Репутация: 1
Re: Грабим WMS сервера с помощью GDAL
Максим,
GDAL 1.7.0b2, FWTools 2.4.7, released 2010/01/19.
GDAL 1.7.0b2, FWTools 2.4.7, released 2010/01/19.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Грабим WMS сервера с помощью GDAL
обновите GDAL, не используйте FWTools, используйте OSGeo4W
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 12 апр 2015, 19:44
- Репутация: 1
Re: Грабим WMS сервера с помощью GDAL
Максим, благодарю вас! Обновил сборку и получилось взять сразу целую строку из 32 тайлов в общий выходной растр:
Отлично, что скрипт упрощается. Алгоритм работы скрипта теперь видится таким:
Запускается счётчик цифрового имени выходного файла от 1 до максимального количества строк +1. Считываются начальные значения севера и юга для строки из ogc_wms.xml. Выполняется команда взятия строки с переменной в имени выходного файла. Вычисляются значения севера и юга для следующей строки, которые записываются в ogc_wms.xml. Переход к счётчику. Если счётчиком достигнуто максимальное количество строк +1, то происходит остановка. Теперь бы это реализовать, т.к. строк больше 30 (если не сдвигать, то ровно 30).
Отлично, что скрипт упрощается. Алгоритм работы скрипта теперь видится таким:
Запускается счётчик цифрового имени выходного файла от 1 до максимального количества строк +1. Считываются начальные значения севера и юга для строки из ogc_wms.xml. Выполняется команда взятия строки с переменной в имени выходного файла. Вычисляются значения севера и юга для следующей строки, которые записываются в ogc_wms.xml. Переход к счётчику. Если счётчиком достигнуто максимальное количество строк +1, то происходит остановка. Теперь бы это реализовать, т.к. строк больше 30 (если не сдвигать, то ровно 30).
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Грабим WMS сервера с помощью GDAL
Может я чего-то не понял, зачем куда-то что-то сдвигать, почему бы не запросить сразу весь охват?
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 12 апр 2015, 19:44
- Репутация: 1
Re: Грабим WMS сервера с помощью GDAL
Денис, дело в том, что WMS-сервер в каждый отданный фрагмент (тайл) рисует свой ватермарк, местами заметно портящий карту. Сервер не может отдавать фрагменты больше 1024х1024. Соответственно, если брать весь охват целиком, то количество таких ватермарков на растре будет равно общему количеству этих фрагментов в общем растре. Т.к. ватермарк расположен постоянно в одном и том же месте отданного сервером фрагмента, и если каждую последующую строку взять с поправкой на позицию ватермарка, то при окончательной склейке фрагментов ватермарки в каждой строке будет скрыты последующей строкой. Останутся лишь ватермарки внизу самой последней строки, и их легко обрезать при окончательной склейке строк.
UPD: Максимальный размер отдаваемых сервером тайлов оказывается 2048х2048.
UPD: Максимальный размер отдаваемых сервером тайлов оказывается 2048х2048.
Последний раз редактировалось Landser 18 апр 2015, 02:38, всего редактировалось 1 раз.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Грабим WMS сервера с помощью GDAL
А можно адрес этого сервера, если это конечно не во внутренней сети?
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 12 апр 2015, 19:44
- Репутация: 1
Re: Грабим WMS сервера с помощью GDAL
Отправил в ЛС.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Грабим WMS сервера с помощью GDAL
Посмотрю, как доберусь до нормального интернета.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 12 апр 2015, 19:44
- Репутация: 1
Re: Грабим WMS сервера с помощью GDAL
Denis Rykov писал(а):Посмотрю, как доберусь до нормального интернета.
[ Сообщение с мобильного устройства ]
Да с сервером-то никаких проблем и нет. Кроме ватермарка в каждый отданный тайл. Что успешно решается введением поправки на последующую строку и проверено лично в ручном режиме правкой севера и юга в ogc_wms.xml. Получил несколько строчек, открыл полученные geotiff (Привязка идеальная, следовательно идеальный нахлёст строк друг на друга. Ватермарки всех строк кроме самой нижней скрыты нахлёстом. ) в Global Mapper, нижнюю подрезал и экспортнул в общий растр. Большие участки карты естественно руками не осилить.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Грабим WMS сервера с помощью GDAL
То что вы называете тайл - это на самом деле фрагмент, запрашиваемый GDAL-ом, и то что он у вас получился 1024 - это потому что такие настройки идут по дефолту, измените размер до 2048 и получите в два раза меньше watermark-ов, увеличить это значение до большего в вашем случае не удастся, так как сервер будет ругаться:
В общем случае ваша проблема может быть решена путём добавления в драйвер GDAL поддержки Meta Buffer по аналогии с тем, как это сделано в MapProxy. В качестве решения вашей конкретной задачи можно попробовать собрать свой WMS на базе внешнего и уже его использовать для склейки.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
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 12 апр 2015, 19:44
- Репутация: 1
Re: Грабим WMS сервера с помощью GDAL
Денис, благодарю, но проблема решается , имхо, несколько проще. Ведь утилита gdal_translate сама умеет запрашивать фрагменты с сервера с нужными координатами и разрешением. Задачи получить на выходе полностью объединённый растр нет. Поскольку его я легко и непринуждённо получаю с наглядным отображением в другой программе. Поэтому не вижу смысла вмешиваться в драйвер GDAL или поднимать локальный WMS для склейки. Мне нужен всего лишь скрипт, который может автоматически изменять параметры от заранее заданных значений для поочерёдного многократного запуска утилиты.
Эксперименты с разрешением фрагментов 2048х2048 и попытке взять строку из 12 в данном случае фрагментов иногда приводят к такой ошибке:
Похоже на то, что возрастает количество HTTP запросов и серверу это не нравится. При запросе отдельных фрагментов 2048х2048 ошибок не наблюдается.
Эксперименты с разрешением фрагментов 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
- SergeyRyzhkov
- Гуру
- Сообщения: 909
- Зарегистрирован: 02 июл 2014, 19:13
- Репутация: 203
- Ваше звание: GP-экотеррористы
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Грабим WMS сервера с помощью GDAL
Landser, сделайте "скрипт" в MS Excel )))
посредством формулы, которую можно скопировать в другие строки (с авторасчетом), получите строки запросов. Потом в батник и вперед...
посредством формулы, которую можно скопировать в другие строки (с авторасчетом), получите строки запросов. Потом в батник и вперед...
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 12 апр 2015, 19:44
- Репутация: 1
Re: Грабим WMS сервера с помощью GDAL
Сергей, алгоритм работы батника примерно такой:
Формулы простые:
Вычисленные значения <UpperLeftY> и <LowerRightY> записываются в ogc_wms.xml. 200 - это поправка на перекрытие ватермарка, 1024 - это высота строки в геометрах = разрешение фрагмента по Y (2048 пикселей) умноженное на масштабный коэффициент карты (5 метров на пиксель).
Проблема правильно написать нужный батник, т.к. последний раз программировал лет так 25 назад на Бейсике.
Значение <UpperLeftY> считывать не нужно. Значение <LowerRightY> считывается из ogc_wms.xml.Landser писал(а): Запускается счётчик цифрового имени выходного файла от 1 до максимального количества строк +1. Считываются начальные значения севера и юга для строки из ogc_wms.xml. Выполняется команда взятия строки с переменной в имени выходного файла. Вычисляются значения севера и юга для следующей строки, которые записываются в ogc_wms.xml. Переход к счётчику. Если счётчиком достигнуто максимальное количество строк +1, то происходит остановка.
Формулы простые:
Код: Выделить всё
<UpperLeftY>new=<LowerRightY>+200
<LowerRightY>new=<LowerRightY>+200-10240
Проблема правильно написать нужный батник, т.к. последний раз программировал лет так 25 назад на Бейсике.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость