|
@@ -31,6 +31,8 @@ class LayerList extends BaseWidget {
|
|
|
|
|
|
};
|
|
|
private pipe_layer_template: string = "<li class=\"<%=list_group_item_class%>\"><label for=\"<%=layerindex%>-checkbox\"><%=layername%></label><input type=\"checkbox\" id=\"<%=layerindex%>-checkbox\" data-source-layer-index=\"<%=layerindex%>\" data-source-check-group=\"<%=checkgroup%>\" class=\"pull-right <%=list_group_check_item_class%>\"></li>";
|
|
|
+ /** 当前使用的基础图层集合 */
|
|
|
+ private current_baselayers = [];
|
|
|
|
|
|
startup() {
|
|
|
this.map = this.AppX.runtimeConfig.map;
|
|
@@ -46,6 +48,7 @@ class LayerList extends BaseWidget {
|
|
|
|
|
|
private onPanelInit() {
|
|
|
this.initEvent();
|
|
|
+ this.current_baselayers = this.AppX.appConfig.companyId == '1' ? this.config.baselayers2 : this.config.baselayers;
|
|
|
this.beginGetLayerInfors();
|
|
|
};
|
|
|
private initEvent() {
|
|
@@ -189,70 +192,189 @@ class LayerList extends BaseWidget {
|
|
|
if (url.substring(url.lastIndexOf("/") + 1, url.length) != "MapServer") {
|
|
|
BaseUrl = url.substring(0, url.lastIndexOf("/"));
|
|
|
}
|
|
|
- else{
|
|
|
+ else {
|
|
|
BaseUrl = url;
|
|
|
}
|
|
|
- if(!BaseUrl){
|
|
|
- BaseUrl=url;
|
|
|
+ if (!BaseUrl) {
|
|
|
+ BaseUrl = url;
|
|
|
}
|
|
|
}
|
|
|
if (url.substring(url.lastIndexOf("/") + 1, url.length) != "MapServer") {
|
|
|
var id = parseInt(url.substring(url.lastIndexOf("/") + 1, url.length));
|
|
|
- if(id===id){
|
|
|
+ if (id === id) {
|
|
|
sublayerid.push(id);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
if (layer) {
|
|
|
- this.updateLayerVisibility(BaseUrl, sublayerid, layer.type, checked);
|
|
|
- if(BaseUrl=="tian_online_vector"||BaseUrl=="tian_online_raster"){
|
|
|
- this.updateLayerVisibility(BaseUrl+"_l", sublayerid, layer.type, checked);
|
|
|
+ this.updateLayerVisibility(BaseUrl, sublayerid, layer.type, checked, dataIdx);
|
|
|
+ if (BaseUrl == "tian_online_vector" || BaseUrl == "tian_online_raster") {
|
|
|
+ this.updateLayerVisibility(BaseUrl + "_l", sublayerid, layer.type, checked);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
//影像图层和地形图层互斥
|
|
|
if (checked == true) {
|
|
|
var nodes = this.treeObj.getNodes()
|
|
|
if (layer.id == "raster") {
|
|
|
- var node = nodes.filter(function (item) { return item.layerid == "terrain" })[0]
|
|
|
- if (node != null) {
|
|
|
- node.checked = false;
|
|
|
- this.treeObj.updateNode(node, false)
|
|
|
- var layerinfo = JSON.parse(node.layerinfo)
|
|
|
- this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false)
|
|
|
- }
|
|
|
+ // var node = nodes.filter(function (item) { return item.layerid == "terrain" })[0]
|
|
|
+ // if (node != null) {
|
|
|
+ // node.checked = false;
|
|
|
+ // this.treeObj.updateNode(node, false)
|
|
|
+ // var layerinfo = JSON.parse(node.layerinfo)
|
|
|
+ // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false)
|
|
|
+ // }
|
|
|
+
|
|
|
+ // var hideLayerIds = ["terrain", "tian_online_vector", "tian_online_raster"];
|
|
|
+ // $.each(hideLayerIds, function (index, layerIdItem) {
|
|
|
+ // var node = nodes.filter(function (item) { return item.layerid == layerIdItem })[0]
|
|
|
+ // if (node != null) {
|
|
|
+ // node.checked = false;
|
|
|
+ // this.treeObj.updateNode(node, false)
|
|
|
+ // var layerinfo = JSON.parse(node.layerinfo)
|
|
|
+ // // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // // this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layerinfo.type, false);
|
|
|
+
|
|
|
+ // if (layerIdItem.indexOf('tian_online_') > -1) {
|
|
|
+ // var layer = this.findLayerInMap(layerinfo.url);
|
|
|
+ // if (layer) {
|
|
|
+ // this.map.removeLayer(layer);//删除隐藏的图层
|
|
|
+ // }
|
|
|
+
|
|
|
+ // layer = this.findLayerInMap(layerinfo.url + "_l");
|
|
|
+ // if (layer) {
|
|
|
+ // this.map.removeLayer(layer);//删除隐藏的图层
|
|
|
+ // }
|
|
|
+ // } else{
|
|
|
+ // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }.bind(this));
|
|
|
+ this.hideLayers(['terrain', 'tian_online_vector', 'tian_online_raster'], sublayerid);
|
|
|
}
|
|
|
else if (layer.id == "terrain") {
|
|
|
- var node = nodes.filter(function (item) { return item.layerid == "raster" })[0]
|
|
|
- if (node != null) {
|
|
|
- node.checked = false;
|
|
|
- this.treeObj.updateNode(node, false)
|
|
|
- var layerinfo = JSON.parse(node.layerinfo)
|
|
|
- this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
- }
|
|
|
- }else if(layer.id=="tian_online_raster"){
|
|
|
- var node = nodes.filter(function (item) { return item.layerid == "tian_online_vector" })[0]
|
|
|
- if (node != null) {
|
|
|
- node.checked = false;
|
|
|
- this.treeObj.updateNode(node, false)
|
|
|
- var layerinfo = JSON.parse(node.layerinfo)
|
|
|
- this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
- this.updateLayerVisibility(layerinfo.url+"_l", sublayerid, layer.type, false);
|
|
|
- }
|
|
|
+ // var node = nodes.filter(function (item) { return item.layerid == "raster" })[0]
|
|
|
+ // if (node != null) {
|
|
|
+ // node.checked = false;
|
|
|
+ // this.treeObj.updateNode(node, false)
|
|
|
+ // var layerinfo = JSON.parse(node.layerinfo)
|
|
|
+ // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // }
|
|
|
|
|
|
- }else if(layer.id=="tian_online_vector"){
|
|
|
- var node = nodes.filter(function (item) { return item.layerid == "tian_online_raster" })[0]
|
|
|
- if (node != null) {
|
|
|
- node.checked = false;
|
|
|
- this.treeObj.updateNode(node, false)
|
|
|
- var layerinfo = JSON.parse(node.layerinfo)
|
|
|
- this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
- this.updateLayerVisibility(layerinfo.url+"_l", sublayerid, layer.type, false);
|
|
|
- }
|
|
|
+ // var hideLayerIds = ["raster", "tian_online_vector", "tian_online_raster"];
|
|
|
+ // $.each(hideLayerIds, function (index, layerIdItem) {
|
|
|
+ // var node = nodes.filter(function (item) { return item.layerid == layerIdItem })[0]
|
|
|
+ // if (node != null) {
|
|
|
+ // node.checked = false;
|
|
|
+ // this.treeObj.updateNode(node, false)
|
|
|
+ // var layerinfo = JSON.parse(node.layerinfo)
|
|
|
+ // // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // // this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layerinfo.type, false);
|
|
|
+
|
|
|
+ // if (layerIdItem.indexOf('tian_online_') > -1) {
|
|
|
+ // var layer = this.findLayerInMap(layerinfo.url);
|
|
|
+ // if (layer) {
|
|
|
+ // this.map.removeLayer(layer);//删除隐藏的图层
|
|
|
+ // }
|
|
|
+
|
|
|
+ // layer = this.findLayerInMap(layerinfo.url + "_l");
|
|
|
+ // if (layer) {
|
|
|
+ // this.map.removeLayer(layer);//删除隐藏的图层
|
|
|
+ // }
|
|
|
+ // } else{
|
|
|
+ // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }.bind(this));
|
|
|
+ this.hideLayers(['raster', 'tian_online_vector', 'tian_online_raster'], sublayerid);
|
|
|
+ } else if (layer.id == "tian_online_raster") {
|
|
|
+ // var node = nodes.filter(function (item) { return item.layerid == "tian_online_vector" })[0]
|
|
|
+ // if (node != null) {
|
|
|
+ // node.checked = false;
|
|
|
+ // this.treeObj.updateNode(node, false)
|
|
|
+ // var layerinfo = JSON.parse(node.layerinfo)
|
|
|
+ // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layer.type, false);
|
|
|
+ // }
|
|
|
+
|
|
|
+ // var hideLayerIds = ["raster", "terrain", "tian_online_vector"];
|
|
|
+ // $.each(hideLayerIds, function (index, layerIdItem) {
|
|
|
+ // var node = nodes.filter(function (item) { return item.layerid == layerIdItem })[0]
|
|
|
+ // if (node != null) {
|
|
|
+ // node.checked = false;
|
|
|
+ // this.treeObj.updateNode(node, false)
|
|
|
+ // var layerinfo = JSON.parse(node.layerinfo)
|
|
|
+ // // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // // this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layerinfo.type, false);
|
|
|
+
|
|
|
+ // if (layerIdItem.indexOf('tian_online_') > -1) {
|
|
|
+ // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layerinfo.type, false);
|
|
|
+ // } else {
|
|
|
+ // var layer = this.findLayerInMap(layerinfo.url);
|
|
|
+ // if (layer) {
|
|
|
+ // this.map.removeLayer(layer);//删除隐藏的图层
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }.bind(this));
|
|
|
+ this.hideLayers(['raster', 'terrain', 'tian_online_vector'], sublayerid);
|
|
|
+ } else if (layer.id == "tian_online_vector") {
|
|
|
+ // var node = nodes.filter(function (item) { return item.layerid == "tian_online_raster" })[0]
|
|
|
+ // if (node != null) {
|
|
|
+ // node.checked = false;
|
|
|
+ // this.treeObj.updateNode(node, false)
|
|
|
+ // var layerinfo = JSON.parse(node.layerinfo)
|
|
|
+ // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layer.type, false);
|
|
|
+ // }
|
|
|
+
|
|
|
+ // var hideLayerIds = ["raster", "terrain", "tian_online_raster"];
|
|
|
+ // $.each(hideLayerIds, function (index, layerIdItem) {
|
|
|
+ // var node = nodes.filter(function (item) { return item.layerid == layerIdItem })[0]
|
|
|
+ // if (node != null) {
|
|
|
+ // node.checked = false;
|
|
|
+ // this.treeObj.updateNode(node, false)
|
|
|
+ // var layerinfo = JSON.parse(node.layerinfo)
|
|
|
+ // // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // // this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layerinfo.type, false);
|
|
|
+
|
|
|
+ // if (layerIdItem.indexOf('tian_online_') > -1) {
|
|
|
+ // this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ // this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layerinfo.type, false);
|
|
|
+ // } else {
|
|
|
+ // var layer = this.findLayerInMap(layerinfo.url);
|
|
|
+ // if (layer) {
|
|
|
+ // this.map.removeLayer(layer);//删除隐藏的图层
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }.bind(this));
|
|
|
+ this.hideLayers(['raster', 'terrain', 'tian_online_raster'], sublayerid);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
+ /**
|
|
|
+ * @function 隐藏指定Id的图层
|
|
|
+ * @param layerIds
|
|
|
+ */
|
|
|
+ private hideLayers(layerIds: any[], sublayerid: any[]) {
|
|
|
+ var nodes = this.treeObj.getNodes()
|
|
|
+ var nodes2 = nodes.filter(function (item) { return layerIds.indexOf(item.layerid) > -1 });
|
|
|
+ if (nodes2 != null) {
|
|
|
+ $.each(nodes2, function (index, node2) {
|
|
|
+ node2.checked = false;
|
|
|
+ this.treeObj.updateNode(node2, false);
|
|
|
+ var layerinfo = JSON.parse(node2.layerinfo);
|
|
|
+ this.updateLayerVisibility(layerinfo.url, [], layerinfo.type, false);
|
|
|
+ if (layerinfo.id.indexOf("tian_online") > -1) {//在线天地图服务图层的特殊处理
|
|
|
+ this.updateLayerVisibility(layerinfo.url + "_l", sublayerid, layerinfo.type, false);
|
|
|
+ }
|
|
|
+ }.bind(this));
|
|
|
+ }
|
|
|
+ }
|
|
|
private onLayerClick(event, treeId, treeNode) {
|
|
|
if (treeNode.isParent) {
|
|
|
this.treeObj.expandNode(treeNode, null, false, true, true);
|
|
@@ -262,8 +384,16 @@ class LayerList extends BaseWidget {
|
|
|
}
|
|
|
|
|
|
};
|
|
|
- private updateLayerVisibility(url, sublayerid, type, visible) {
|
|
|
- if (this.map&&url) {
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param url
|
|
|
+ * @param sublayerid
|
|
|
+ * @param type
|
|
|
+ * @param visible
|
|
|
+ * @param layerId
|
|
|
+ */
|
|
|
+ private updateLayerVisibility(url, sublayerid, type, visible, layerId = '') {
|
|
|
+ if (this.map && url) {
|
|
|
var layer = this.findLayerInMap(url);
|
|
|
if (layer != null) {
|
|
|
if (sublayerid === undefined || sublayerid.length == 0)
|
|
@@ -277,29 +407,32 @@ class LayerList extends BaseWidget {
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- if(url=="tian_online_raster"){//处理在线天地图影像图
|
|
|
+ if (visible == false) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (url == "tian_online_raster") {//处理在线天地图影像图
|
|
|
var tdbaselayer1 = new TDTImgLayer();
|
|
|
- tdbaselayer1.id="tian_online_raster";
|
|
|
- tdbaselayer1.visible =true;
|
|
|
- this.map.addLayer(tdbaselayer1,0);//最底层
|
|
|
+ tdbaselayer1.id = "tian_online_raster";
|
|
|
+ tdbaselayer1.visible = true;
|
|
|
+ this.map.addLayer(tdbaselayer1, 0);//最底层
|
|
|
var tdanolayer = new TDTImgAnnoLayer();
|
|
|
- tdanolayer.id="tian_online_raster_l";
|
|
|
- tdanolayer.visible =true;
|
|
|
- this.map.addLayer(tdanolayer,1);//第二层
|
|
|
- }else if(url=="tian_online_vector"){//处理在线天地图矢量图
|
|
|
+ tdanolayer.id = "tian_online_raster_l";
|
|
|
+ tdanolayer.visible = true;
|
|
|
+ this.map.addLayer(tdanolayer, 1);//第二层
|
|
|
+ } else if (url == "tian_online_vector") {//处理在线天地图矢量图
|
|
|
var tdbaselayer = new TDTLayer();
|
|
|
- tdbaselayer.id="tian_online_vector";
|
|
|
- tdbaselayer.visible =true;
|
|
|
- this.map.addLayer(tdbaselayer,0);//最底层
|
|
|
+ tdbaselayer.id = "tian_online_vector";
|
|
|
+ tdbaselayer.visible = true;
|
|
|
+ this.map.addLayer(tdbaselayer, 0);//最底层
|
|
|
var tdanolayer = new TDTAnnoLayer();
|
|
|
- tdanolayer.id="tian_online_vector_l";
|
|
|
- tdanolayer.visible =true;
|
|
|
- this.map.addLayer(tdanolayer,1);//第二层
|
|
|
- }else if (url.substring(url.lastIndexOf("/") + 1, url.length) != "MapServer") {
|
|
|
+ tdanolayer.id = "tian_online_vector_l";
|
|
|
+ tdanolayer.visible = true;
|
|
|
+ this.map.addLayer(tdanolayer, 1);//第二层
|
|
|
+ } else if (url.substring(url.lastIndexOf("/") + 1, url.length) != "MapServer") {
|
|
|
var baseUrl = url.substring(0, url.lastIndexOf("/"));
|
|
|
var id = url.substring(url.lastIndexOf("/") + 1, url.length);
|
|
|
sublayerid = [];
|
|
|
- if(parseInt(id)===parseInt(id)){
|
|
|
+ if (parseInt(id) === parseInt(id)) {
|
|
|
sublayerid.push(parseInt(id));
|
|
|
}
|
|
|
this.updateLayerVisibility(baseUrl, sublayerid, type, visible);
|
|
@@ -308,6 +441,7 @@ class LayerList extends BaseWidget {
|
|
|
else {
|
|
|
if (type == "tiled") {
|
|
|
layer = new ArcGISTiledMapServiceLayer(url, { className: "tileLayer" });
|
|
|
+ layer.id = layerId.indexOf('_') > -1 ? layerId : (layerId + "_0");
|
|
|
if (this.isBaseLayer(url))
|
|
|
this.map.addLayer(layer, 0);
|
|
|
else
|
|
@@ -325,7 +459,6 @@ class LayerList extends BaseWidget {
|
|
|
layer.setVisibleLayers([sublayerid]);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
};
|
|
@@ -492,8 +625,9 @@ class LayerList extends BaseWidget {
|
|
|
|
|
|
private getBaseLayers() {
|
|
|
var layers = [];
|
|
|
- for (var i = 0; i < this.config.baselayers.length; i++) {
|
|
|
- var layername = this.config.baselayers[i];
|
|
|
+
|
|
|
+ for (var i = 0; i < this.current_baselayers.length; i++) {
|
|
|
+ var layername = this.current_baselayers[i];
|
|
|
if (this.AppX.appConfig.gisResource[layername] &&
|
|
|
this.AppX.appConfig.gisResource[layername].config.length > 0) {
|
|
|
var config = this.AppX.appConfig.gisResource[layername].config[0];
|
|
@@ -516,24 +650,24 @@ class LayerList extends BaseWidget {
|
|
|
return layers;
|
|
|
};
|
|
|
private findLayerInMap(url) {
|
|
|
- let layer=null;
|
|
|
+ let layer = null;
|
|
|
for (var i = 0; i < this.map.layerIds.length; i++) {
|
|
|
const templayer = this.map.getLayer(this.map.layerIds[i]);
|
|
|
- if (templayer.url && templayer.url == url){
|
|
|
- layer=templayer;
|
|
|
+ if (templayer.url && templayer.url == url) {
|
|
|
+ layer = templayer;
|
|
|
return layer;
|
|
|
}
|
|
|
}
|
|
|
- if(!layer){
|
|
|
- layer=this.map.getLayer(url);
|
|
|
+ if (!layer) {
|
|
|
+ layer = this.map.getLayer(url);
|
|
|
return layer;
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
private isBaseLayer(url) {
|
|
|
var isBase = false;
|
|
|
- for (var i = 0; i < this.config.baselayers.length; i++) {
|
|
|
- var layername = this.config.baselayers[i];
|
|
|
+ for (var i = 0; i < this.current_baselayers.length; i++) {
|
|
|
+ var layername = this.current_baselayers[i];
|
|
|
if (this.AppX.appConfig.gisResource[layername] &&
|
|
|
this.AppX.appConfig.gisResource[layername].config.length > 0) {
|
|
|
var config = this.AppX.appConfig.gisResource[layername].config[0];
|