Сплющивание карты в MapServer
- 
				4ert
 - Новоприбывший
 - Сообщения: 10
 - Зарегистрирован: 28 окт 2010, 14:18
 - Репутация: 0
 - Откуда: Москва
 - Контактная информация:
 
Сплющивание карты в MapServer
Здравствуйте!
Необходимо в два раза уменьшить высоту выдаваемой карты (не контейнера, содержащего карту, не пропорционально все изображение, а именно, чтобы ширина осталась прежней, а высота уменьшилась вдвое).
Карта - массив векторных данных, взятый из PostGIS.
Очень хочется делать это именно MapServer'ом.
Подскажите, пожалуйста, в каком направлении копать?
			
			
									
						
										
						Необходимо в два раза уменьшить высоту выдаваемой карты (не контейнера, содержащего карту, не пропорционально все изображение, а именно, чтобы ширина осталась прежней, а высота уменьшилась вдвое).
Карта - массив векторных данных, взятый из PostGIS.
Очень хочется делать это именно MapServer'ом.
Подскажите, пожалуйста, в каком направлении копать?
- Mavka
 - Гуру
 - Сообщения: 2060
 - Зарегистрирован: 14 мар 2008, 17:36
 - Репутация: 9
 
Re: Сплющивание карты в MapServer
Легко! Можно плющить и таращить:
 
Делаете 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
Спасибо, это то, что нужно! Правда, если только речь идет о единичной загрузке при обращении к MapServer'у.
Как заставить OpenLayers отображать карту в таком же виде?
При конструировании слоя WMS передаю ему вот такие параметры:
Если посмотреть на URL'ы изображений, которые генерирует OpenLayers:
Видно, что какие-то параметры он берет (FORMAT), а какие-то игнорирует начисто...
			
			
									
						
										
						Как заставить 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
          });
Код: Выделить всё
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- Mavka
 - Гуру
 - Сообщения: 2060
 - Зарегистрирован: 14 мар 2008, 17:36
 - Репутация: 9
 
Re: Сплющивание карты в MapServer
То чего в классе нет он само-собой игнорирует. А какая задача? Вам все тайлы нужно плющить или загрузить один раз растр и просто двигать его? Если уж подменять параметры запросов к серверу, то лучше сделать враппер, я думаю.
			
			
									
						
							лангольеры под окном жрали время ом-ном-ном
			
						- 
				4ert
 - Новоприбывший
 - Сообщения: 10
 - Зарегистрирован: 28 окт 2010, 14:18
 - Репутация: 0
 - Откуда: Москва
 - Контактная информация:
 
Re: Сплющивание карты в MapServer
Собственно, стоит задача отображать карту в изометрической проекции.
Я уже поднимал эту тему здесь. В приведенном примере, однако, я не нашел объяснения, как, собственно, модифицировать саму карту. (Делать дома псевдо-трехмерными мне не надо, они будут отображаться простыми изображениями)
Я думаю, загружать один растр целиком будет довольно громоздко, так что лучше плющить тайлы (хотя тут вопрос спорный).
Не хочется изобретать велосипеды и делать что-то громоздкое. Задача, на мой взгляд, достаточно пустяковая.
Если, допустим, использовать вместо MapServer'a GeoServer, решение может быть проще?
			
			
									
						
										
						Я уже поднимал эту тему здесь. В приведенном примере, однако, я не нашел объяснения, как, собственно, модифицировать саму карту. (Делать дома псевдо-трехмерными мне не надо, они будут отображаться простыми изображениями)
Я думаю, загружать один растр целиком будет довольно громоздко, так что лучше плющить тайлы (хотя тут вопрос спорный).
Не хочется изобретать велосипеды и делать что-то громоздкое. Задача, на мой взгляд, достаточно пустяковая.
Если, допустим, использовать вместо MapServer'a GeoServer, решение может быть проще?
- Mavka
 - Гуру
 - Сообщения: 2060
 - Зарегистрирован: 14 мар 2008, 17:36
 - Репутация: 9
 
Re: Сплющивание карты в MapServer
Нет, к сожалению, ничего не понял :'(
			
			
									
						
							лангольеры под окном жрали время ом-ном-ном
			
						- 
				4ert
 - Новоприбывший
 - Сообщения: 10
 - Зарегистрирован: 28 окт 2010, 14:18
 - Репутация: 0
 - Откуда: Москва
 - Контактная информация:
 
Re: Сплющивание карты в MapServer
Взглянем, например, вот сюда:
http://osm.kyblsoft.cz/3dmapa/?zoom=17& ... 8&layers=B
Под "картой" я понимаю "пол", на котором стоят параллелепипеды-дома. Чтобы все это вместе красиво отображалось в изометрической проекции, с "полом" тоже надо сделать определенные изменения - в простейшем случае, он должен быть "сплющен" по отношению к своему обычному состоянию примерно в два раза =)
В моем случае изометрии, домики-параллелепипеды не будут генерироваться автоматически, а будут сторонними, нарисованными "от руки" изображениями.
А карта-пол должна вести себя как обыкновенная (приближаться-отдаляться, скроллироваться), только будучи "сплющенной" в два раза.
Надеюсь, теперь стало понятно =)
			
			
									
						
										
						http://osm.kyblsoft.cz/3dmapa/?zoom=17& ... 8&layers=B
Под "картой" я понимаю "пол", на котором стоят параллелепипеды-дома. Чтобы все это вместе красиво отображалось в изометрической проекции, с "полом" тоже надо сделать определенные изменения - в простейшем случае, он должен быть "сплющен" по отношению к своему обычному состоянию примерно в два раза =)
В моем случае изометрии, домики-параллелепипеды не будут генерироваться автоматически, а будут сторонними, нарисованными "от руки" изображениями.
А карта-пол должна вести себя как обыкновенная (приближаться-отдаляться, скроллироваться), только будучи "сплющенной" в два раза.
Надеюсь, теперь стало понятно =)
- Mavka
 - Гуру
 - Сообщения: 2060
 - Зарегистрирован: 14 мар 2008, 17:36
 - Репутация: 9
 
Re: Сплющивание карты в MapServer
Не нравится мне идея так издеваться на OpenLayers... Проще всего написать враппер, который будет плющить тайлы, но в OL ведь заготолено место для полного тайла. Как он их будет принимать?
Посмотрите еще: Isometric 3D map of Czech Republic (там есть ссылки на тех. описание)
			
			
									
						
							Посмотрите еще: Isometric 3D map of Czech Republic (там есть ссылки на тех. описание)
лангольеры под окном жрали время ом-ном-ном
			
						- 
				4ert
 - Новоприбывший
 - Сообщения: 10
 - Зарегистрирован: 28 окт 2010, 14:18
 - Репутация: 0
 - Откуда: Москва
 - Контактная информация:
 
Re: Сплющивание карты в MapServer
А можно, например, MapServer'ом как-то заранее плющить карту? Стиль там применить какой? Или, например, на этапе получения данных из PostGIS?
			
			
									
						
										
						- Mavka
 - Гуру
 - Сообщения: 2060
 - Зарегистрирован: 14 мар 2008, 17:36
 - Репутация: 9
 
Re: Сплющивание карты в MapServer
У меня сейчас есть проект в работе. Вот там и размер картинки и bbox меняется во враппере. Но описать все времени нет. Смотрите в доках MapScript.
Допустим земля и здания у вас отдельно. Причем здания вы рисуете уже в изометрии с нужной ориентацией. Мне видится такой процесс:
Но зачем вам настоящая изометрия? На таких масштабах вполне подойдет косоугольная проекция. Какая разница в чем рисовать домики? Все равно они же не строго ориентированы север-юг. Вот пример у китайцев. Ну не верю я что улицы все строго ориентированы на север.
			
			
									
						
							Допустим земля и здания у вас отдельно. Причем здания вы рисуете уже в изометрии с нужной ориентацией. Мне видится такой процесс:
- Берем bbox, добавляем поля что бы прихватить кусочки соседних зданий
 - Выбираем сколько зданий в него попало
 - Просим UMN MapServer нарисовать кусочек земли под этот bbox
 - Поворачиваем тайл на 45 градусов
 - Наклеиваем на него здания (несложная геометрия по вычислению координат) и обрезаем поля
 - В итоге получаем набор тайлов, которые склеиваем и делаем ретайл что бы они стали неповернутыми
 - Наносим на карту (OpenLayers)
 
Но зачем вам настоящая изометрия? На таких масштабах вполне подойдет косоугольная проекция. Какая разница в чем рисовать домики? Все равно они же не строго ориентированы север-юг. Вот пример у китайцев. Ну не верю я что улицы все строго ориентированы на север.
лангольеры под окном жрали время ом-ном-ном
			
						Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость