Я работаю над проектом вьюера карт и до этого использовал openlayers 2. Теперь мне нужно использовать OpenLayers 3, и приложение для просмотра карт должно поддерживать множество различных проекций, потому что у меня есть слои wms и wfs из разных источников и проекций. Я нашел примеры, в которых используются openlayers2 и proj4js. Но я не смог найти явного примера использования ol3 и proj4js. Что вы предлагаете?
Как использовать OpenLayers 3 с Proj4js
Ответы (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
Потратил 2 дня, пытаясь выяснить, почему proj4.defs не устанавливает мою собственную проекцию. Я собирался сдаться, и случайный поиск последней канавы привел меня сюда, и что вы знаете… setProj4 (...) был кровавым решением. НИ ОДИН ИЗ СТАРЫХ ДОКУМЕНТОВ не упоминает об этом :-(
- person shawty; 21.08.2017
PPS: это текущая версия OL4, которая находится в NPM на дату написания этого комментария, поэтому она остается прежней, даже с тех пор, как OL3
- person shawty; 21.08.2017
Просмотр / использование этого оператора if помогли мне решить проблему, хотя это не было напрямую связано с моей проблемой.
- person loctrice; 24.08.2017
С openlayers 4 и typescript я не могу получить ссылку ни на объект ol, ни на ol.proj, у кого-нибудь это работает?
- person chrismarx; 24.05.2018
Ой, я нахожусь на бета-версии OL5, где похоже, что они либо избавились от setProj4, либо еще не реализовали его, но вы можете вызвать регистр вручную, и он снова работает: openlayers.org/en/beta/apidoc/module-ol_proj_proj4.html
- person chrismarx; 24.05.2018
@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
Для получения дополнительной справочной информации вы также можете прочитать ahocevar .net / 2014/07/10 / proj4js-2-2-x-with-ol3.html.
- person ahocevar; 22.03.2015