61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
/**
|
||
* @typedef {import('./ref-manager.js').RefManager} RefManager
|
||
*/
|
||
|
||
/**
|
||
* Контроль за одним интерактивным целевым слоем.
|
||
*
|
||
* @class SingleLayerManager
|
||
* @property {ol.layer.Vector} layer - тот самый single слой
|
||
*/
|
||
class SingleLayerManager {
|
||
/**
|
||
* @param {ol.layer.Vector } layer - ol-слой
|
||
*/
|
||
constructor (layer) {
|
||
recovery(self => {
|
||
/** Инъекция слоя */
|
||
if(layer instanceof ol.layer.Vector || layer instanceof ol.layer.VectorImage)
|
||
self.layer = layer
|
||
else
|
||
throw new Error("Несоответствующий тип у слоя-аргумента")
|
||
}, (...e) => {
|
||
console.log("Ошибка инициализии SingleLayerManager");
|
||
e.forEach(er => {throw er});
|
||
})(this)
|
||
}
|
||
|
||
/**
|
||
* Меняет источник целевого слоя.
|
||
* @method
|
||
* @param {object} json - необработанный json
|
||
*/
|
||
set = recovery(
|
||
json => {
|
||
const features = new ol.format.GeoJSON().readFeatures(json, {
|
||
featureProjection: 'EPSG:3857'
|
||
})
|
||
this.layer.getSource().clear()
|
||
this.layer.getSource().addFeatures(features)
|
||
},
|
||
(...e) => {
|
||
console.log("Ошибка изменения слоя (singleLayerManager.set)");
|
||
e.forEach(er => {throw er});
|
||
}
|
||
)
|
||
|
||
/**
|
||
* Очистка и удаление самого менеджера
|
||
* @method
|
||
*/
|
||
exit = recovery(
|
||
() => {
|
||
this.layer = null
|
||
},
|
||
(...e) => {
|
||
console.log("Ошибка изменения слоя (singleLayerManager.set)");
|
||
e.forEach(er => {throw er});
|
||
}
|
||
)
|
||
|
||
} |