@mapgis/webclient-es6-mapboxgl
Version:
124 lines (113 loc) • 3.87 kB
JavaScript
import mapboxgl from '@mapgis/mapbox-gl';
/**
* @function mapboxgl.Zondy.MapExtend
* @description 扩展了 mapboxgl.Map 对图层相关的操作。
* @private
*/
export var MapExtend = function () {
mapboxgl.Map.prototype.overlayLayersManager = {};
// mapboxgl.Map.prototype.addLayerBak = mapboxgl.Map.prototype.addLayerBak;
mapboxgl.Map.prototype.addLayer = function (layer, before) {
if (layer.source || layer.type === 'custom' || layer.type === "background") {
this.addLayerBak(layer, before);
return this;
}
if (this.overlayLayersManager[layer.id] || this.style._layers[layer.id]) {
this.fire('error', {
error: new Error('A layer with this id already exists.')
});
return;
}
// addLayer(layer, this);
this._addLayer(layer, this);
this.overlayLayersManager[layer.id] = layer;
return this;
};
mapboxgl.Map.prototype.getLayer = function (id) {
if (this.overlayLayersManager[id]) {
return this.overlayLayersManager[id];
}
return this.style.getLayer(id);
};
mapboxgl.Map.prototype.moveLayer = function (id, beforeId) {
if (this.overlayLayersManager[id]) {
moveLayer(id, beforeId);
return this;
}
if (this.style._layers[id]) {
this.style.moveLayer(id, beforeId);
this._update(true);
return this;
}
};
mapboxgl.Map.prototype.removeLayer = function (id) {
if (this.overlayLayersManager[id]) {
removeLayer(this.overlayLayersManager[id]);
delete this.overlayLayersManager[id];
return this;
}
this.style.removeLayer(id);
this._update(true);
return this;
};
//目前扩展的overlayer,只支持显示或隐藏图层操作
mapboxgl.Map.prototype.setLayoutProperty = function (layerID, name, value) {
if (this.overlayLayersManager[layerID]) {
if (name === "visibility") {
if (value === "visible") {
value = true;
} else {
value = false;
}
setVisibility(this.overlayLayersManager[layerID], value);
this.style.fire('data', {dataType: 'style'});
}
return this;
}
this.style.setLayoutProperty(layerID, name, value);
this._update(true);
return this;
};
function addLayer(layer, map) {
layer.onAdd && layer.onAdd(map);
}
/**
* @function mapboxgl.Zondy.MapExtend.prototype.removeFromMap
* @description 移除事件。
*/
function removeLayer(layer) {
layer.removeFromMap && layer.removeFromMap();
}
/**
* @function mapboxgl.Zondy.MapExtend.prototype.setVisibility
* @description 设置图层可见性,设置图层的隐藏,显示,重绘的相应的可见标记。
* @param {boolean} [visibility] - 是否显示图层(当前地图的 resolution 在最大最小 resolution 之间)。
*/
function setVisibility(layer, visibility) {
layer.setVisibility && layer.setVisibility(visibility);
}
/**
* @function mapboxgl.Zondy.MapExtend.prototype.moveTo
* @description 将图层移动到某个图层之前。
* @param {string} layerID -待插入的图层 ID。
* @param {boolean} [beforeLayerID] - 是否将本图层插入到图层 id 为 layerID 的图层之前(如果为 false 则将本图层插入到图层 id 为 layerID 的图层之后)。
*/
function moveLayer(layerID, beforeLayerID) {
var layer = document.getElementById(layerID);
// var beforeLayer;
if (beforeLayerID) {
var beforeLayer = document.getElementById(beforeLayerID);
if (!beforeLayer) {
mapboxgl.Evented.prototype.fire("error", {
error: new Error(`Layer with id "${beforeLayerID}" does not exist on this document.`)
});
}
}
if (layer && beforeLayer) {
beforeLayer.parentNode.insertBefore(layer, beforeLayer);
} else {
//当没有传入beforeLayerID ,则默认将图层移动到最上面
layer.parentNode.appendChild(layer);
}
}
}();