你怎么加载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.
});
如果您不介意冗长的话,两全其美。