Как вы загружаете proj4js
?
Если вы используете стиль AMD, то вам нужно обернуть его немного как это:
require([
"//cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.3/proj4.js"
], function(proj4) {
var url = 'http://epsg.io/2193.js';
window.proj4 = proj4; // add to global scope
require([url], function() {
// now you can use proj4 with NZTM loaded in this block.
);
});
Это кажется немного волшебный для меня, потому что вы надеетесь, что proj4
всегда будет правильное имя, и вы добавляете proj4
в глобальную область, которая немного нечиста. Я был бы склонен использовать расширение .proj4
с плагином dojo/text
AMD:
require([
"//cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.3/proj4.js"
"dojo/text!http://epsg.io/2193.proj4"
], function(proj4, epsg2193) {
proj4.defs(epsg2193);
// now you can use proj4 with NZTM loaded.
});
Это означает, что вы можете загрузить оба ресурса одновременно.
К сожалению, похоже, что отсутствие заголовков Access-Control-Allow-Origin
на ответ нарушает этот подход, но вы можете посмотреть, как проксировать его через свой собственный домен, если вам нужна производительность.
Кстати, вы можете обмануть немного на первый вариант, определяя поддельный proj
объект:
var Proj4Proxy = function() {
this._defs = [];
}
Proj4Proxy.prototype.defs = function(crs) { this._defs.push(crs); };
var proj4 = new Proj4Proxy();
require([
"dojo/_base/array",
"//cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.3/proj4.js",
"//epsg.io/2193.js"
], function(array, _proj4) {
array.forEach(proj4._defs, function(crs) { _proj4.defs(crs); });
proj4 = _proj4;
// now you can use proj4 with NZTM loaded.
});
Лучший из обоих миров, если вы не возражаете многословие.
Это всегда proj4. Я попробовал ваше первое предложение, но proj4 еще не определено. Моя загрузка выглядит как 'define (['// cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.3/proj4.js'], function (proj4) { return declare ([], { _init function() { // требуется для proj4 defs идет здесь } ... Это находится в виджетах dojo, поэтому может возникнуть проблема с областью определения. – tr3v
ну, это странно. Можете ли вы добавить минимальный неудачный пример ваш вопрос? трудно догадаться, где проблема. – Hamish
Помогает ли это? http://jsfiddle.net/3amfzj1e/10/ – tr3v