Сплющивание карты в MapServer

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
4ert
Новоприбывший
Сообщения: 10
Зарегистрирован: 28 окт 2010, 14:18
Репутация: 0
Откуда: Москва
Контактная информация:

Сплющивание карты в MapServer

Сообщение 4ert »

Здравствуйте!

Необходимо в два раза уменьшить высоту выдаваемой карты (не контейнера, содержащего карту, не пропорционально все изображение, а именно, чтобы ширина осталась прежней, а высота уменьшилась вдвое).

Карта - массив векторных данных, взятый из PostGIS.

Очень хочется делать это именно MapServer'ом.

Подскажите, пожалуйста, в каком направлении копать?
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Сплющивание карты в MapServer

Сообщение Mavka »

Легко! Можно плющить и таращить:
map_2.png
map_2.png (1.8 КБ) 9770 просмотров
map_1.png
map_1.png (1.94 КБ) 9770 просмотров
Делаете WMS, запрашиваете BBOX, а ширину/высоту задаете любую:

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

http://server/mapserv.exe?SERVICE=WMS&LAYERS=world...&BBOX=-180,-90,180,90&WIDTH=200&HEIGHT=100 
лангольеры под окном жрали время ом-ном-ном
4ert
Новоприбывший
Сообщения: 10
Зарегистрирован: 28 окт 2010, 14:18
Репутация: 0
Откуда: Москва
Контактная информация:

Re: Сплющивание карты в MapServer

Сообщение 4ert »

Спасибо, это то, что нужно! Правда, если только речь идет о единичной загрузке при обращении к MapServer'у.
Как заставить OpenLayers отображать карту в таком же виде? :)

При конструировании слоя WMS передаю ему вот такие параметры:

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

var wms = new OpenLayers.Layer.WMS( "kavmin",
          "http://localhost/cgi-bin/mapserv?map=/home/prog2/www/qgis.map&",
          {
                VERSION: '1.3.0',
                REQUEST: 'GetMap',
                FORMAT: 'image/png',
                LAYERS: 'kavmin',
                STYLES: 'default',
                CRS: 'EPSG:4326',
                WIDTH: 10,
                HEIGHT: 10,
                BBOX: '1,1,1,1'

          },
          {
              encodeBBOX: true
          });
Если посмотреть на URL'ы изображений, которые генерирует OpenLayers:

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

http://localhost/cgi-bin/mapserv?map=/home/prog2/www/qgis.map&LAYERS=kavmin&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&FORMAT=image/png&SRS=EPSG:4326&BBOX=-90,0,0,90&WIDTH=256&HEIGHT=256
Видно, что какие-то параметры он берет (FORMAT), а какие-то игнорирует начисто...
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Сплющивание карты в MapServer

Сообщение Mavka »

То чего в классе нет он само-собой игнорирует. А какая задача? Вам все тайлы нужно плющить или загрузить один раз растр и просто двигать его? Если уж подменять параметры запросов к серверу, то лучше сделать враппер, я думаю.
лангольеры под окном жрали время ом-ном-ном
4ert
Новоприбывший
Сообщения: 10
Зарегистрирован: 28 окт 2010, 14:18
Репутация: 0
Откуда: Москва
Контактная информация:

Re: Сплющивание карты в MapServer

Сообщение 4ert »

Собственно, стоит задача отображать карту в изометрической проекции.

Я уже поднимал эту тему здесь. В приведенном примере, однако, я не нашел объяснения, как, собственно, модифицировать саму карту. (Делать дома псевдо-трехмерными мне не надо, они будут отображаться простыми изображениями)

Я думаю, загружать один растр целиком будет довольно громоздко, так что лучше плющить тайлы (хотя тут вопрос спорный).

Не хочется изобретать велосипеды и делать что-то громоздкое. Задача, на мой взгляд, достаточно пустяковая.

Если, допустим, использовать вместо MapServer'a GeoServer, решение может быть проще?
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Сплющивание карты в MapServer

Сообщение Mavka »

Нет, к сожалению, ничего не понял :'(
лангольеры под окном жрали время ом-ном-ном
4ert
Новоприбывший
Сообщения: 10
Зарегистрирован: 28 окт 2010, 14:18
Репутация: 0
Откуда: Москва
Контактная информация:

Re: Сплющивание карты в MapServer

Сообщение 4ert »

Взглянем, например, вот сюда:
http://osm.kyblsoft.cz/3dmapa/?zoom=17& ... 8&layers=B

Под "картой" я понимаю "пол", на котором стоят параллелепипеды-дома. Чтобы все это вместе красиво отображалось в изометрической проекции, с "полом" тоже надо сделать определенные изменения - в простейшем случае, он должен быть "сплющен" по отношению к своему обычному состоянию примерно в два раза =)

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

А карта-пол должна вести себя как обыкновенная (приближаться-отдаляться, скроллироваться), только будучи "сплющенной" в два раза.

Надеюсь, теперь стало понятно =)
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Сплющивание карты в MapServer

Сообщение Mavka »

Не нравится мне идея так издеваться на OpenLayers... Проще всего написать враппер, который будет плющить тайлы, но в OL ведь заготолено место для полного тайла. Как он их будет принимать?

Посмотрите еще: Isometric 3D map of Czech Republic (там есть ссылки на тех. описание)
лангольеры под окном жрали время ом-ном-ном
4ert
Новоприбывший
Сообщения: 10
Зарегистрирован: 28 окт 2010, 14:18
Репутация: 0
Откуда: Москва
Контактная информация:

Re: Сплющивание карты в MapServer

Сообщение 4ert »

А можно, например, MapServer'ом как-то заранее плющить карту? Стиль там применить какой? Или, например, на этапе получения данных из PostGIS?
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Сплющивание карты в MapServer

Сообщение Mavka »

У меня сейчас есть проект в работе. Вот там и размер картинки и bbox меняется во враппере. Но описать все времени нет. Смотрите в доках MapScript.

Допустим земля и здания у вас отдельно. Причем здания вы рисуете уже в изометрии с нужной ориентацией. Мне видится такой процесс:
  1. Берем bbox, добавляем поля что бы прихватить кусочки соседних зданий
  2. Выбираем сколько зданий в него попало
  3. Просим UMN MapServer нарисовать кусочек земли под этот bbox
  4. Поворачиваем тайл на 45 градусов
  5. Наклеиваем на него здания (несложная геометрия по вычислению координат) и обрезаем поля
  6. В итоге получаем набор тайлов, которые склеиваем и делаем ретайл что бы они стали неповернутыми
  7. Наносим на карту (OpenLayers)
Координаты будут относительными.

Но зачем вам настоящая изометрия? На таких масштабах вполне подойдет косоугольная проекция. Какая разница в чем рисовать домики? Все равно они же не строго ориентированы север-юг. Вот пример у китайцев. Ну не верю я что улицы все строго ориентированы на север.
лангольеры под окном жрали время ом-ном-ном
Ответить

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

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

Сейчас этот форум просматривают: Ahrefs [Bot] и 1 гость