Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
60 righe
1.5 KiB
60 righe
1.5 KiB
2 anni fa
|
'use strict';
|
||
|
|
||
|
/* global cw, shp */
|
||
|
L.Shapefile = L.GeoJSON.extend({
|
||
|
options: {
|
||
|
importUrl: 'shp.js'
|
||
|
},
|
||
|
|
||
|
initialize: function(file, options) {
|
||
|
L.Util.setOptions(this, options);
|
||
|
if (typeof cw !== 'undefined') {
|
||
|
/*eslint-disable no-new-func*/
|
||
|
if (!options.isArrayBuffer) {
|
||
|
this.worker = cw(new Function('data', 'cb', 'importScripts("' + this.options.importUrl + '");shp(data).then(cb);'));
|
||
|
} else {
|
||
|
this.worker = cw(new Function('data', 'importScripts("' + this.options.importUrl + '"); return shp.parseZip(data);'));
|
||
|
}
|
||
|
/*eslint-enable no-new-func*/
|
||
|
}
|
||
|
L.GeoJSON.prototype.initialize.call(this, {
|
||
|
features: []
|
||
|
}, options);
|
||
|
this.addFileData(file);
|
||
|
},
|
||
|
|
||
|
addFileData: function(file) {
|
||
|
var self = this;
|
||
|
this.fire('data:loading');
|
||
|
if (typeof file !== 'string' && !('byteLength' in file)) {
|
||
|
var data = this.addData(file);
|
||
|
this.fire('data:loaded');
|
||
|
return data;
|
||
|
}
|
||
|
if (!this.worker) {
|
||
|
shp(file).then(function(data) {
|
||
|
self.addData(data);
|
||
|
self.fire('data:loaded');
|
||
|
});
|
||
|
return this;
|
||
|
}
|
||
|
var promise;
|
||
|
if (this.options.isArrayBufer) {
|
||
|
promise = this.worker.data(file, [file]);
|
||
|
} else {
|
||
|
promise = this.worker.data(cw.makeUrl(file));
|
||
|
}
|
||
|
|
||
|
promise.then(function(data) {
|
||
|
self.addData(data);
|
||
|
self.fire('data:loaded');
|
||
|
self.worker.close();
|
||
|
});
|
||
|
return this;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
L.shapefile = function(a, b, c) {
|
||
|
return new L.Shapefile(a, b, c);
|
||
|
};
|