Страница 1 из 1
Кодировка проекций в OpenLayers
Добавлено: 02 сен 2010, 14:55
dravig
Можно ли задать в OpenLayers проекцию не в EPSG - кодировке, а как-нибудь чтобы параметры проекции были расписаны подробно?
Re: Кодировка проекций в OpenLayers
Добавлено: 02 сен 2010, 16:20
Mavka
Если подключите библиотеку
proj4js, то в OpenLayers включится расширенная обработка проекций (см. файл Projection.js). Там
конструкции вида:
Код: Выделить всё
Proj4js.defs["EPSG:27563"]="+title=LAMB sud france +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=0
+k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0
+pm=paris +units=m";
Еще посмотрите
здесь последний пункт.
Re: Кодировка проекций в OpenLayers
Добавлено: 03 сен 2010, 11:53
dravig
Как я понял это работает только для проекций
список прилагается при модификации которых карта своего вида особо не меняет... А вот в экзотических проекциях (типа equidistant conic) мап-файл отобразить никак не удается... в чем может быть причина? Нужно что-то дополнительно устанавливать?
Re: Кодировка проекций в OpenLayers
Добавлено: 03 сен 2010, 16:39
Mavka
Вы пока еще путаете возможности и задачи UMN MapServer и OpenLayers. Можно очень многое, и
яблоко Бонне в том числе. Почитайте все что я писал в предыдущем посте.
Re: Кодировка проекций в OpenLayers
Добавлено: 04 сен 2010, 23:15
dravig
Я осознаю свое ламерство в этом вопросе....
Но пока что у меня получается отображать карты в OpenLayers только в том случае если проекция, прописанная в мап-файле (wms_src) и в OpenLayers полностью совпадают. Если же присутствует малейшее расхождение - вместо карты висит сообщение об ошибке. Что в этом случае я делаю не так? Кроме того, мап-файл перестает отображаться даже в QGIS, если задать на выход экзотическую проекцию....
Re: Кодировка проекций в OpenLayers
Добавлено: 05 сен 2010, 13:07
Mavka
По стандарту WMS у сервера можно запросить только стандартную проекцию. Для работы с экзотическими проекциями применяют такой трюк - в базу MapServer (это простой текстовый файл) добавляют новую проекцию под произвольным уникальным именем (например, epsg:6666666) и задают нужные параметры, из OpenLayers запрашивают слой в этой проекции. Этот метод работает, но что за проекция 'epsg:6666666' знает только один человек в мире.
Второй вариант. Запросить карту в стандартной проекции (скажем, epsg:4326) и уже силами OpenLayers перепроецировать ее в нужную. (Сами понимаете, что придется каждый тайл на javascript в не предназначенном для таких задач браузере на стороне клиента обрабатывать). Каковы силенки OL в этом - я не интересовался. Как минимум из epsg:4326 в epsg:900913 он конвертировал с достаточной производительностью.
В упоминаемой мною статье,
первая часть посвящена UMN. Там создают проекцию Mollweide под вымышленным именем EPSG:54009. Во
второй части эта же проекцию создается с помощью proj4js, а потом с сервера запрашивают карту. Т.е. реализовано мое первое предложение.
Второй вариант год назад активно исследовался на зарубежных ресурсах.
Аналогичная статья, уже про полярные проекции (часть
1 и
2). Все тоже самое.
Re: Кодировка проекций в OpenLayers
Добавлено: 07 сен 2010, 11:05
dravig
Спасибо, по крайней мере первый способ заработал.
Re: Кодировка проекций в OpenLayers
Добавлено: 08 окт 2010, 20:16
Denis Rykov
Несколько часов потратил на то, чтобы понять, почему не работает proj4js, пока в одном из примеров не увидел строку:
Код: Выделить всё
var base = new OpenLayers.Layer("",{isBaseLayer: true});
откуда следует, что
перепронецирование не работает с базовым слоем!
Re: Кодировка проекций в OpenLayers
Добавлено: 04 дек 2010, 23:43
Mavka
На вопрос из письма "что делать, если сторонний сервер WMS не предоставляет нужную проекцию".
- Экспериментальные работы по перепроецированию растров в OpenLayers проводились в прошлом году. Например (было еще 2-3 похожих). Для этого брали proj4js и порт gdalwarp для js. И на сколько я помню все это делалось только в Canvas (html5). Дальнейший поиск по "gdalwarp-js" показывает что сейчас над этим работает camptocamp.
- Преобразование epsg:4326 в epsg:900913 в OpenLayers раньше имелось встроенное (reproject: true). (Подозреваю, что они просто игрались с bbox, т.к. перепроецирование заключается в банальном вытягивании тайлов по высоте.) Сейчас делают по другому, но код посмотреть можно.
- Некоторые WMS-кэши умеют сами перепроецировать. Пишу с чужого компьютера и конкретное название не скажу. Т.е. вы из OpenLayers запрашиваете кэш, а он обращается на сторонний сервер.
- Есть такая вещь как "WMS cascading" (1, 2) которая тоже может помочь.