Кодировка проекций в OpenLayers

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
dravig
Участник
Сообщения: 54
Зарегистрирован: 18 мар 2010, 16:58
Репутация: 0

Кодировка проекций в OpenLayers

Сообщение dravig »

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

Re: Кодировка проекций в OpenLayers

Сообщение 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"; 
Еще посмотрите здесь последний пункт.
лангольеры под окном жрали время ом-ном-ном
dravig
Участник
Сообщения: 54
Зарегистрирован: 18 мар 2010, 16:58
Репутация: 0

Re: Кодировка проекций в OpenLayers

Сообщение dravig »

Как я понял это работает только для проекций список прилагается при модификации которых карта своего вида особо не меняет... А вот в экзотических проекциях (типа equidistant conic) мап-файл отобразить никак не удается... в чем может быть причина? Нужно что-то дополнительно устанавливать?
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Кодировка проекций в OpenLayers

Сообщение Mavka »

Вы пока еще путаете возможности и задачи UMN MapServer и OpenLayers. Можно очень многое, и яблоко Бонне в том числе. Почитайте все что я писал в предыдущем посте.
лангольеры под окном жрали время ом-ном-ном
dravig
Участник
Сообщения: 54
Зарегистрирован: 18 мар 2010, 16:58
Репутация: 0

Re: Кодировка проекций в OpenLayers

Сообщение dravig »

Я осознаю свое ламерство в этом вопросе....
Но пока что у меня получается отображать карты в OpenLayers только в том случае если проекция, прописанная в мап-файле (wms_src) и в OpenLayers полностью совпадают. Если же присутствует малейшее расхождение - вместо карты висит сообщение об ошибке. Что в этом случае я делаю не так? Кроме того, мап-файл перестает отображаться даже в QGIS, если задать на выход экзотическую проекцию....
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Кодировка проекций в OpenLayers

Сообщение Mavka »

По стандарту WMS у сервера можно запросить только стандартную проекцию. Для работы с экзотическими проекциями применяют такой трюк - в базу MapServer (это простой текстовый файл) добавляют новую проекцию под произвольным уникальным именем (например, epsg:6666666) и задают нужные параметры, из OpenLayers запрашивают слой в этой проекции. Этот метод работает, но что за проекция 'epsg:6666666' знает только один человек в мире.

Второй вариант. Запросить карту в стандартной проекции (скажем, epsg:4326) и уже силами OpenLayers перепроецировать ее в нужную. (Сами понимаете, что придется каждый тайл на javascript в не предназначенном для таких задач браузере на стороне клиента обрабатывать). Каковы силенки OL в этом - я не интересовался. Как минимум из epsg:4326 в epsg:900913 он конвертировал с достаточной производительностью.

В упоминаемой мною статье, первая часть посвящена UMN. Там создают проекцию Mollweide под вымышленным именем EPSG:54009. Во второй части эта же проекцию создается с помощью proj4js, а потом с сервера запрашивают карту. Т.е. реализовано мое первое предложение.

Второй вариант год назад активно исследовался на зарубежных ресурсах.

Аналогичная статья, уже про полярные проекции (часть 1 и 2). Все тоже самое.
лангольеры под окном жрали время ом-ном-ном
dravig
Участник
Сообщения: 54
Зарегистрирован: 18 мар 2010, 16:58
Репутация: 0

Re: Кодировка проекций в OpenLayers

Сообщение dravig »

Спасибо, по крайней мере первый способ заработал.
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Кодировка проекций в OpenLayers

Сообщение Denis Rykov »

Несколько часов потратил на то, чтобы понять, почему не работает 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

Сообщение Mavka »

На вопрос из письма "что делать, если сторонний сервер WMS не предоставляет нужную проекцию".
  1. Экспериментальные работы по перепроецированию растров в OpenLayers проводились в прошлом году. Например (было еще 2-3 похожих). Для этого брали proj4js и порт gdalwarp для js. И на сколько я помню все это делалось только в Canvas (html5). Дальнейший поиск по "gdalwarp-js" показывает что сейчас над этим работает camptocamp.
  2. Преобразование epsg:4326 в epsg:900913 в OpenLayers раньше имелось встроенное (reproject: true). (Подозреваю, что они просто игрались с bbox, т.к. перепроецирование заключается в банальном вытягивании тайлов по высоте.) Сейчас делают по другому, но код посмотреть можно.
  3. Некоторые WMS-кэши умеют сами перепроецировать. Пишу с чужого компьютера и конкретное название не скажу. Т.е. вы из OpenLayers запрашиваете кэш, а он обращается на сторонний сервер.
  4. Есть такая вещь как "WMS cascading" (1, 2) которая тоже может помочь.
лангольеры под окном жрали время ом-ном-ном
Ответить

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя