Как использовать OpenLayers 3 с Proj4js

Я работаю над проектом вьюера карт и до этого использовал openlayers 2. Теперь мне нужно использовать OpenLayers 3, и приложение для просмотра карт должно поддерживать множество различных проекций, потому что у меня есть слои wms и wfs из разных источников и проекций. Я нашел примеры, в которых используются openlayers2 и proj4js. Но я не смог найти явного примера использования ol3 и proj4js. Что вы предлагаете?


person Haktan Aydın    schedule 13.03.2015    source источник


Ответы (2)


Кажется, что иногда, например, при использовании OpenLayers 3 и proj4 в Angular 2 с использованием webpack, нужно явно указать OL3, где его найти:

import * as proj4 from "proj4";
import * as ol from "openlayers";
...
ol.proj.setProj4(proj4);

Когда все в порядке, то после определения проекции ol.proj.get должен вернуть ее:

proj4.defs("EPSG:28992", "...");
if (!ol.proj.get('EPSG:28992')) {
    console.error("Failed to register projection in OpenLayers");
    ...
}
person Arjan    schedule 16.01.2017
comment
Потратил 2 дня, пытаясь выяснить, почему proj4.defs не устанавливает мою собственную проекцию. Я собирался сдаться, и случайный поиск последней канавы привел меня сюда, и что вы знаете… setProj4 (...) был кровавым решением. НИ ОДИН ИЗ СТАРЫХ ДОКУМЕНТОВ не упоминает об этом :-( - person shawty; 21.08.2017
comment
PPS: это текущая версия OL4, которая находится в NPM на дату написания этого комментария, поэтому она остается прежней, даже с тех пор, как OL3 - person shawty; 21.08.2017
comment
Просмотр / использование этого оператора if помогли мне решить проблему, хотя это не было напрямую связано с моей проблемой. - person loctrice; 24.08.2017
comment
С openlayers 4 и typescript я не могу получить ссылку ни на объект ol, ни на ol.proj, у кого-нибудь это работает? - person chrismarx; 24.05.2018
comment
Ой, я нахожусь на бета-версии OL5, где похоже, что они либо избавились от setProj4, либо еще не реализовали его, но вы можете вызвать регистр вручную, и он снова работает: openlayers.org/en/beta/apidoc/module-ol_proj_proj4.html - person chrismarx; 24.05.2018
comment
@chrismarx В ветке, в которой я пытался перейти с OL4 на использование модулей (npm install ol, а не npm install openlayers) и бета-версии OL5, я обнаружил следующее: import setProj4 from 'ol.proj.projection'. Однако я остановил эту миграцию, так как я не мог заставить работать набор текста, поэтому я, возможно, не тестировал эту конкретную часть. Кроме того, возможно, предпочтительнее будет ваш подход. - person Arjan; 24.05.2018

В этом примере показано, как использовать proj4js с ol3: http://openlayers.org/en/v3.3.0/examples/wms-image-custom-proj.html

В основном использование proj4js в OpenLayers 3 работает прозрачно. Сначала вам нужно передать определение srs в proj4js, а затем вы можете сразу использовать проекцию:

proj4.defs("EPSG:21781","+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=660.077,13.551,369.344,2.484,1.783,2.939,5.66 +units=m +no_defs");
var zurich = ol.proj.transform([8.55, 47.366667], 'EPSG:4326', 'EPSG:21781');
person Alexandre Dubé    schedule 17.03.2015
comment
Для получения дополнительной справочной информации вы также можете прочитать ahocevar .net / 2014/07/10 / proj4js-2-2-x-with-ol3.html. - person ahocevar; 22.03.2015