2016-02-19 2 views
2

У меня возникает проблема при использовании 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 
      }) 
     }); 
    }); 
}); 
+0

Увидеть * фактическую * трассировку стека будет полезной, но не проблема, что OpenLayers и ваш код видят разные экземпляры Proj4? То есть, когда вы изменяете переменную 'proj4',' openLayers.proj' не влияет. Вы можете использовать отладчик для сравнения графиков объектов. – kryger

ответ

1

Вы должны сказать OpenLayers как найти proj4.js первый:

openLayers.proj.setProj4(proj4); 

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

Смежные вопросы