Использование Openlayers 3 и proj4js с RequireJS

У меня возникла проблема при использовании Openlayers 3 и proj4js с RequireJS.

Используя стандартный файл JavaScript и HTML, у меня есть рабочий код для отображения карты и отображения координат в EPSG:27700 с помощью элемента управления положением мыши Openlayers.

Когда я использую RequireJS (см. Код ниже), код завершается сбоем из-за того, что proj.get возвращает "undefined". Ошибка в Chrome предполагает, что Require выдает ошибку.

Я пытался использовать прокладки, но это не сработало, и я не уверен, что это правильный подход. Может кто-нибудь посоветовать мне, как заставить это работать?

require.config({
    baseUrl: './',
    paths: {
        'domReady': '../lib/domReady',
        'openlayers': '../lib/ol',
        'proj4': '../lib/proj4'
    }
});

require([
    'domReady',
    'openlayers',
    'proj4'
], function (domReady, openLayers, proj4) {

    "use strict";

    function getLayers() {
        var baseLayer = new openLayers.layer.Tile({
                source: new openLayers.source.OSM()
            });

        return [baseLayer];
    };

    domReady(function () {
        proj4.defs('EPSG:27700', '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs');

        openLayers.proj.get("EPSG:27700").setExtent([0, 0, 700000, 1300000]);

        var mousePositionControl = new openLayers.control.MousePosition({
            coordinateFormat: openLayers.coordinate.createStringXY(4),
            projection: 'EPSG:27700'
        });

        var map = new openLayers.Map({
            target: 'map',
            layers: getLayers(),
            controls: [mousePositionControl],
            view: new openLayers.View({
                projection: 'EPSG:27700',
                center: [300000, 500000],
                resolutions: [4500, 3200, 2400, 1600, 800, 400, 200, 100, 50, 25, 10, 5, 2.5, 1, 0.5, 0.25, 0.125, 0.0625],
                zoom: 3,
                minResolution: 25,
                maxResolution: 800
            })
        });
    });
});

1 ответ

Решение

Вы должны сначала сказать OpenLayers, как найти proj4.js:

openLayers.proj.setProj4(proj4);

Приведенный выше фрагмент требует OpenLayers >= v3.13.0 и предполагает установку, подобную фрагменту кода в вопросе.

Другие вопросы по тегам