[Решено] Сохранение тайлов в хранилище GWC по запросу.

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
t[0]p
Интересующийся
Сообщения: 29
Зарегистрирован: 15 ноя 2014, 14:35
Репутация: 3

[Решено] Сохранение тайлов в хранилище GWC по запросу.

Сообщение t[0]p » 18 авг 2017, 07:12

Доброго времени суток!

Хочу настроить GeoWebCache так, что бы он сохранял тайлы, которые уже однажды сгенерировал при просмотре изображения, но что то не могу. Всё это нужно для того что бы не резать на тайлы все 22 уровня. Это делается, на сколько я понял, с помощью прямой интеграции WMS в настройках GWC на GeoServere, либо добавлением в запрос к карте /gwc/service/ (примеры запросов ниже). Согласно доке выполнил все шаги (ниже шаги из доки) и думаю что всё должно работать, а не работает...

-Включил прямую интеграцию WMS
-tiled=true включил в запрос
-Запрашиваю только 1 слой
-Кеширования для слоя включил
-Высота и ширина запрашиваемого изображения та же что и в настройках слоя (не совсем понял где в настройках слоя есть ограничения по его размеру, но в запросе использую дефолтные значения)
-В запросе используя одну из доступных сеток
-При запросе используется охват указанный в настройках слоя
-A parameter is included for which there is a corresponding Parameter Filter (что то про фильтры, которые я не использую, так что не придавал значения этому пункту).

В итоге получается такая вот строка запроса, которую вставляю в браузер:

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

http://localhost:8080/geoserver/worckspace/wms?tiled=true&service=WMS&version=1.1.0&
request=GetMap&layers=worckspace:layer&styles=&
bbox=74.999975,55.333347,89.5,61.33341899999999&width=768&height=330&srs=EPSG:4326&
format=image/png
или так (разница в форматах только)

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

http://localhost:8080/geoserver/worckspace/wms?tiled=true&service=WMS&version=1.1.0&
request=GetMap&layers=worckspace:layer&styles=&
bbox=74.999975,55.333347,89.5,61.33341899999999&width=768&height=330&srs=EPSG:4326&
format=application/openlayers
В итоге отображается картинка png или окно для просмотра слоя с помощью openlayers, но сохраняться ни чего не сохраняется. Что не так понять не могу. Подскажите пожалуйста!


Пробовал без прямой интеграции - тоже не работает. Выключал интеграцию, добавлял в запрос /gwc/service/ и получал такую ошибку:

"400: Requested horizontal resolution: 0.056640722656249975 , best match: 0.0439453125 exceeds 10% threshold. Perhaps the client is configured with an incorrect set of scales (resolutions), or the DPI setting is off compared to the one in GWC ?"

Строка выглядела вот так:

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

http://localhost:8080/geoserver/gwc/service/wms?service=WMS&version=1.1.0&request=GetMap&layers=worckspace:layer&styles=&bbox=74.999975,55.333347,89.5,61.33341899999999&width=768&height=330&srs=EPSG:4326&format=image/png
Последний раз редактировалось t[0]p 12 сен 2017, 09:02, всего редактировалось 4 раза.

Александр Мурый
Гуру
Сообщения: 4976
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 693
Ваше звание: званий не имею
Откуда: Москва

Re: GeoWebCache. Прямая интеграция WMS.

Сообщение Александр Мурый » 18 авг 2017, 10:08

t[0 писал(а):В итоге отображается картинка png или окно для просмотра слоя с помощью openlayers, но сохраняться ни чего не сохраняется.
А что именно вы хотите сохранить? WMS работает, получается, так? Слой отображается с нужным стилем?
Редактор материалов, модератор форума

Аватара пользователя
t[0]p
Интересующийся
Сообщения: 29
Зарегистрирован: 15 ноя 2014, 14:35
Репутация: 3

Re: Сохранение тайлов в хранилище GWC по запросу.

Сообщение t[0]p » 18 авг 2017, 11:28

Александр Мурый писал(а):
18 авг 2017, 10:08
А что именно вы хотите сохранить?
Кажется самое главное в вопросе то и не описал...

Хочу сохранять тайлы в хранилище тайловое GeoServer'а, что бы потом при повторном просмотре этого же места на карте GeoServer не генерировал заново этот тайл а открывал уже сохранённый. Это всё хочу для того, что бы не нарезать на тайлы все 22 уровня. Нарезать только первые 10 например, а остальные сами со временем сгенерируются... Вот что хочу. Вроде как это можно делать либо прямой интеграцией WMS (хотя сомнения меня по этому поводу терзать начинают) либо добавлением /gwc/service/ в запрос к слою. Не могу добиться результата...

kuzkok
Интересующийся
Сообщения: 30
Зарегистрирован: 21 янв 2011, 08:31
Проекты: 1
Репутация: 7
Откуда: Пермь

Re: Сохранение тайлов в хранилище GWC по запросу.

Сообщение kuzkok » 25 авг 2017, 08:38

Для того чтобы кэш генерировался на лету есть несколько условий:
1. В запросах должен быть указан параметр tiled=true или запрос напрямую к /gwc сервису (с этим вы разобрались)
2. В запросах должны использоваться те же размеры тайлов что и в настройках сервиса, пример в leaflet и в openlayers. Можно проверить обратившись напрямую к gwc - он сругается если сетка не совпадает(400: The requested tile dimensions 512x512 do not match those of the grid set (256x256))
3. Должна быть настроена геосетка (GridSet) - по умолчанию в геосервере заданы EPSG:900913 и EPSG:4326, 3857 - нет, её надо заводить ручками - можно полностью сдублировать 900913, если у вас используется другая СК то нужна геосетка для неё.
4. Превью слоя в геосервере использует однотайловое изображение, откройте превью в из демо страницы gwc

Аватара пользователя
t[0]p
Интересующийся
Сообщения: 29
Зарегистрирован: 15 ноя 2014, 14:35
Репутация: 3

Re: Сохранение тайлов в хранилище GWC по запросу.

Сообщение t[0]p » 05 сен 2017, 12:29

kuzkok, спасибо за ответ. Я разобрался в чем причина подобной ошибки, сейчас всё настроено и работает как часы. Я чуть подробнее распишу всё и добавлю самого главного. Всё очень просто, но с первого взгляда не разберёшься че-к-чему. Я во всяком случае не смог.
kuzkok писал(а):
25 авг 2017, 08:38
256x256
Непонятно для меня было (в самом первом сообщении как раз писал об этом в одном из пунктов) то, что "256х256" - это параметры HEIGHT/WIDTH именно в самом запросе URL'овском:

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

http://localhost:8080/geoserver/worckspace/wms?tiled=true&service=WMS&version=1.1.0&
request=GetMap&layers=worckspace:layer&styles=&
bbox=74.999975,55.333347,89.5,61.33341899999999&width=256&height=256&srs=EPSG:4326&
format=application/openlayers
Но это не сама соль. Ошибка указывала на несоответствие размера пикселя для каждого масштабного уровня сетки координат. Самое непонятное было откуда вообще берутся эти значения (те которые неверные, из-за которых ошибка), и как от этого избавляться - где брать нужные значения? или как выравнивать одну сетку к другой? есть какие то стандартные настройки (галочки)? и т.д.
Так вот, если взять охват моего слоя и провести следующие нехитрые вычисления:
1) 74,999975 - 89,5 = -14,500025 (ширина изображения/тайла)
2) 55,333347 - 61,333418999 = -6,000071999 (высота изображения)
3) 14,500025/256 = 0,0546884765625 (размер пикселя)
4) 6,0000719/256 = 0,02343778124609375 (размер пикселя)

становится ясна откуда взялись эти странные цифры в ошибке (цифры получились разные потому что ошибка получена с другими значениями охвата, отличными от тех что в расчете моём).
Остаётся вопрос - как от этого избавляться...
kuzkok писал(а):
25 авг 2017, 08:38
надо заводить ручками - можно полностью сдублировать 900913, если у вас используется другая СК то нужна геосетка для неё.
Именно так, но для того что бы не делать повторных сеток (миллион 3857 для каждого слоя, из-за того, что у всех слоёв разный охват) я подогнал под эти значения (дефолтной сетки) свой охват. Радует что мне нужна была сетка EPSG:3857, и к счастью таковая имелась в виде EPSG:900913. Указав в приложении ссылку на эту сетку (&srs=EPSG:900913&) - приложение поняло что мне от него нада, и руками 3857 заводить не пришлось (не смотрите на то что в расчетах 4326, а тут говорю про 3857 - цифры сохранились только для 4326). Но в целом - да, если нужно будет работать с СК42 или еще чем-то более экзотическим - подгонять ручками. (искать ширину имеющегося охвата, делить на 256, и делить/умножать на 2 для каждого следующего масштабного уровня).

Вроде всё так просто и очевидно, но заставило потупить полтора дня ...

Ответить

Вернуться в «Веб-картография»