Кодировка проекций в OpenLayers
-
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Кодировка проекций в OpenLayers
Можно ли задать в OpenLayers проекцию не в EPSG - кодировке, а как-нибудь чтобы параметры проекции были расписаны подробно?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Кодировка проекций в OpenLayers
Если подключите библиотеку 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";
лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: Кодировка проекций в OpenLayers
Как я понял это работает только для проекций список прилагается при модификации которых карта своего вида особо не меняет... А вот в экзотических проекциях (типа equidistant conic) мап-файл отобразить никак не удается... в чем может быть причина? Нужно что-то дополнительно устанавливать?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Кодировка проекций в OpenLayers
Вы пока еще путаете возможности и задачи UMN MapServer и OpenLayers. Можно очень многое, и яблоко Бонне в том числе. Почитайте все что я писал в предыдущем посте.
лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: Кодировка проекций в OpenLayers
Я осознаю свое ламерство в этом вопросе....
Но пока что у меня получается отображать карты в OpenLayers только в том случае если проекция, прописанная в мап-файле (wms_src) и в OpenLayers полностью совпадают. Если же присутствует малейшее расхождение - вместо карты висит сообщение об ошибке. Что в этом случае я делаю не так? Кроме того, мап-файл перестает отображаться даже в QGIS, если задать на выход экзотическую проекцию....
Но пока что у меня получается отображать карты в OpenLayers только в том случае если проекция, прописанная в мап-файле (wms_src) и в OpenLayers полностью совпадают. Если же присутствует малейшее расхождение - вместо карты висит сообщение об ошибке. Что в этом случае я делаю не так? Кроме того, мап-файл перестает отображаться даже в QGIS, если задать на выход экзотическую проекцию....
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Кодировка проекций в OpenLayers
По стандарту WMS у сервера можно запросить только стандартную проекцию. Для работы с экзотическими проекциями применяют такой трюк - в базу MapServer (это простой текстовый файл) добавляют новую проекцию под произвольным уникальным именем (например, epsg:6666666) и задают нужные параметры, из OpenLayers запрашивают слой в этой проекции. Этот метод работает, но что за проекция 'epsg:6666666' знает только один человек в мире.
Второй вариант. Запросить карту в стандартной проекции (скажем, epsg:4326) и уже силами OpenLayers перепроецировать ее в нужную. (Сами понимаете, что придется каждый тайл на javascript в не предназначенном для таких задач браузере на стороне клиента обрабатывать). Каковы силенки OL в этом - я не интересовался. Как минимум из epsg:4326 в epsg:900913 он конвертировал с достаточной производительностью.
В упоминаемой мною статье, первая часть посвящена UMN. Там создают проекцию Mollweide под вымышленным именем EPSG:54009. Во второй части эта же проекцию создается с помощью proj4js, а потом с сервера запрашивают карту. Т.е. реализовано мое первое предложение.
Второй вариант год назад активно исследовался на зарубежных ресурсах.
Аналогичная статья, уже про полярные проекции (часть 1 и 2). Все тоже самое.
Второй вариант. Запросить карту в стандартной проекции (скажем, epsg:4326) и уже силами OpenLayers перепроецировать ее в нужную. (Сами понимаете, что придется каждый тайл на javascript в не предназначенном для таких задач браузере на стороне клиента обрабатывать). Каковы силенки OL в этом - я не интересовался. Как минимум из epsg:4326 в epsg:900913 он конвертировал с достаточной производительностью.
В упоминаемой мною статье, первая часть посвящена UMN. Там создают проекцию Mollweide под вымышленным именем EPSG:54009. Во второй части эта же проекцию создается с помощью proj4js, а потом с сервера запрашивают карту. Т.е. реализовано мое первое предложение.
Второй вариант год назад активно исследовался на зарубежных ресурсах.
Аналогичная статья, уже про полярные проекции (часть 1 и 2). Все тоже самое.
лангольеры под окном жрали время ом-ном-ном
-
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: Кодировка проекций в OpenLayers
Спасибо, по крайней мере первый способ заработал.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Кодировка проекций в OpenLayers
Несколько часов потратил на то, чтобы понять, почему не работает proj4js, пока в одном из примеров не увидел строку:
откуда следует, что перепронецирование не работает с базовым слоем!
Код: Выделить всё
var base = new OpenLayers.Layer("",{isBaseLayer: true});
Spatial is now, more than ever, just another column- The Geometry Column.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Кодировка проекций в OpenLayers
На вопрос из письма "что делать, если сторонний сервер 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) которая тоже может помочь.
лангольеры под окном жрали время ом-ном-ном
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей