Страница 1 из 2

Определить bbox для WMS сервиса

Добавлено: 20 мар 2017, 11:44
kasik
Здравствуйте уважаемые форумчане!

Стоит такая задача: нужно просто картинкой отобразить один из растровых тейловых слоев и на нем один или несколько векторных объектов(по определенному фильтру слоя).
Использую geoserver, для хранения геоданных и leaflet js на клиенте для их отображения.

Одно из решение "красивых" решений это использовать WMS с несколькими слоями и фильтрами для векторных.

Все круто, но нужно указать bbox, причем мне нужно что бы как раз вписать отфильтрованные геообъекты в размер картинки(и что бы хотя бы какую то "рамку" оставить, что бы не впритык в картинке было, то есть удалить немного), который имеет разный размер(то есть задается и высота и ширина)?
Таким образом входные данные такие:
- размерность картинки
- bounding box геообъектов
На выходе нужно получить необходимый bbox для WMS сервиса.
Вроде бы не так и сложно и все инструменты есть в самом leaflet, но как конкретно определить необходимый bbox, исходя из пропорции картинки и еще "удалить" вписанные геообъекты.

Спасибо за любую помощь

PS: И конечно самый красивый вариант был бы использовать процессинг WPS - то есть на вход посылать слои и фильтры для них и размерность картинки, а он бы мне возвращал уже заданную картинку. Но там надо делать запрос составным и нет описания боле мене подробного по всем его функциям, а так методом тыка ен очень весело, да еще в добавок когда в построителе начинаешь делать составные процессы они заполняются не тем что ты настроил, а какой то пустышкой. Поэтому эксперименты с составными вобще все в ручную через какой нить клиент типа curl или прямо из вэб-приложения. Поэтому про него придется забыть, но если у кого то был опыт его использования в подобном плане, то был бы очень раз помощи.

Re: Определить bbox для WMS сервиса

Добавлено: 20 мар 2017, 15:13
kasik
Или это получается нетривиальная задача?

Хотя бы какая последовательность действий должна быть...

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 11:06
kasik
Может какие пояснения нужны, может описал сумбурно, сам просто новичок относительно в этой теме. Ну не может быть что никто из знатоков даже сказать нечего?)

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 11:20
freeExec
Покажите на картниках, что у вас получилось, и что вы хотите. bbox высчитывается автоматически, а вы пытаетесь чего-то вручную.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 13:39
kasik
Вот пример.

Никакой речи об автоматике не говорится в документации, по крайней мере. И эти параметры считаются обязательными.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 14:04
freeExec
Что-то всё равно не понятно в чём затык. Берёте свои объекты, вычисляете для них охватываемый bbox (Util.extend должен помочь) и отправляете его в запрос.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 15:17
kasik
А вы уверены что это будет кореллироваться с размерностью требуемой картинки? Размер мне нужно задавать свой.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 15:30
freeExec
Я вообще не уверен чего вы хотите. И причем тут размер картинки, он от масштаба зависит и dpi желаемого.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 15:44
kasik
Я могу задавать размер картинки и он у меня может варьироваться, соответственно, мой bbox может быть деформирован, то есть или по вертикали сжат/растянут или по горизонтали. То есть мне нужно соблюсти пропорции по заданной размерности картинки, что бы туда уместился заданный bbox.

Например мне верхний пример нужно уже получить для картинки 320х240

и получили растянутую по Х картинку, соответственно, уже не подходит данный bbox, и его нужно как то преобразовать, то есть вписать уже в заданные размеры картинки.

Вот такая как раз задача и стоит: Определить новый bbox из заданного по геообъектам и размерности картинки.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 16:16
freeExec
Теперь понятно, тут вам надо углубиться в проекции, чтобы перевести пиксели в метры. На пальцах тут не расскажешь, лучше посмотрите как делает это leaflet.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 16:54
Denis Rykov
Если использовать EPSG:3857, то всё довольно просто:
  • Определяете охват (bbox) искомой территории (в единицах измерение проекции, то есть в метрах)
  • Отношение сторон охвата и выходного изображения должны совпадать (поскольку 3857)
  • Передаёте вычисленный bbox, width и height сервису и получаете картинку
Пример квадратного изображения (можете проверить, что ширина bbox-а относится к его высоте как 1:1): пример.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 17:09
kasik
Ну вот хотелось бы как раз примерный алгоритм этих преобразований. Просто в голове много разного сумбура и я не могу это все структурировать. Поэтому и хотелось бы услышать мнение другое.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 17:22
kasik
Denis Rykov писал(а):Если использовать EPSG:3857, то ...
И получается на конкретном примере как получить картинку 320х240 с сохранением пропорций?

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 17:23
Denis Rykov
Нужно отталкиваться от охвата, а не от размера картинки.

Re: Определить bbox для WMS сервиса

Добавлено: 22 мар 2017, 17:38
freeExec
Одну сторону картинки задаёшь, а вторую высчитываешь из пропорции.
Высота картинки = Длинна картинки * Высота Ббокс / Ширина Ббокс, вроде так.