Skip to content

Commit

Permalink
Merge pull request #747 from cmv/feature/new-group-folders-for-dynami…
Browse files Browse the repository at this point in the history
…c-map-services

New group folders for dynamic map services
  • Loading branch information
green3g authored Feb 6, 2018
2 parents 8fcf63f + 1ac6226 commit 528bb91
Show file tree
Hide file tree
Showing 10 changed files with 437 additions and 153 deletions.
8 changes: 7 additions & 1 deletion viewer/js/config/viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,9 @@ define([
],
*/

// ignore the visibility of group layers in dynamic layers? default = true
//ignoreDynamicGroupVisibility: false,

// operationalLayers: Array of Layers to load on top of the basemap: valid 'type' options: 'dynamic', 'tiled', 'feature'.
// The 'options' object is passed as the layers options for constructor. Title will be used in the legend only. id's must be unique and have no spaces.
// 3 'mode' options: MODE_SNAPSHOT = 0, MODE_ONDEMAND = 1, MODE_SELECTION = 2
Expand Down Expand Up @@ -223,14 +226,17 @@ define([
opacity: 1.0,
visible: true,
imageParameters: buildImageParameters({
layerIds: [0, 2, 4, 5, 8, 10, 12, 21],
// include only sub layer ids.
// group layers omitted
layerIds: [2, 4, 5, 8, 12, 21],
layerOption: 'show'
})
},
identifyLayerInfos: {
layerIds: [2, 4, 5, 8, 12, 21]
},
layerControlLayerInfos: {
// group layers included to maintain folder hierarchy, not visibility.
layerIds: [0, 2, 4, 5, 8, 9, 10, 12, 21]
},
legendLayerInfos: {
Expand Down
24 changes: 13 additions & 11 deletions viewer/js/gis/dijit/Identify.js
Original file line number Diff line number Diff line change
Expand Up @@ -380,17 +380,18 @@ define([
layerIds = [ref.layerId];
}
} else if (ref.layerInfos) {
layerIds = this.getLayerInfos(ref, selectedIds);
layerIds = this.getLayerInfos(layer, selectedIds);
}
}
}
return layerIds;
},

getLayerInfos: function (ref, selectedIds) {
var layerIds = [];
getLayerInfos: function (layer, selectedIds) {
var layerIds = [],
ref = layer.ref;
array.forEach(ref.layerInfos, lang.hitch(this, function (layerInfo) {
if (!this.includeSubLayer(layerInfo, ref, selectedIds)) {
if (!this.includeSubLayer(layerInfo, layer, selectedIds)) {
return;
}
layerIds.push(layerInfo.id);
Expand Down Expand Up @@ -629,7 +630,7 @@ define([
}
} else { // dynamic layer
array.forEach(ref.layerInfos, lang.hitch(this, function (layerInfo) {
if (!this.includeSubLayer(layerInfo, ref, selectedIds)) {
if (!this.includeSubLayer(layerInfo, layer, selectedIds)) {
return;
}
identifyItems.push({
Expand Down Expand Up @@ -666,13 +667,14 @@ define([
this.identifyLayerDijit.set('value', id);
},

includeSubLayer: function (layerInfo, ref, selectedIds) {
includeSubLayer: function (layerInfo, layer, selectedIds) {
// exclude group layers
if (layerInfo.subLayerIds !== null) {
return false;
}

if (this.isDefaultLayerVisibility(ref) && !this.checkVisibilityRecursive(ref, layerInfo.id)) {
var ref = layer.ref;
if (this.isDefaultLayerVisibility(ref) && !this.checkVisibilityRecursive(layer, layerInfo.id)) {
return false;
} else if (array.indexOf(ref.visibleLayers, layerInfo.id) < 0) {
return false;
Expand Down Expand Up @@ -707,18 +709,18 @@ define([
* this only needs to be done if the layers visibleLayers array is
* set to the default visibleLayers. After setVisibleLayers
* is called the first time group layers are NOT included.
* @param {esri/layers/DynamicMapServiceLayer} layer The layer reference
* @param {object} layer layerInfo reference
* @param {Integer} id The sublayer id to check for visibility
* @return {Boolean} Whether or not the sublayer is visible based on its parent(s) visibility
*/
checkVisibilityRecursive: function (layer, id) {
var layerInfos = array.filter(layer.layerInfos, function (layerInfo) {
var ref = layer.ref;
var layerInfos = array.filter(ref.layerInfos, function (layerInfo) {
return (layerInfo.id === id);
});
if (layerInfos.length > 0) {
var info = layerInfos[0];
if (layer.visibleLayers.indexOf(id) !== -1 &&
(info.parentLayerId === -1 || this.checkVisibilityRecursive(layer, info.parentLayerId))) {
if ((ref.visibleLayers.indexOf(id) !== -1) && (layer.layerInfo.ignoreDynamicGroupVisibility || info.parentLayerId === -1 || this.checkVisibilityRecursive(layer, info.parentLayerId))) {
return true;
}
}
Expand Down
10 changes: 7 additions & 3 deletions viewer/js/gis/dijit/LayerControl.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ define([
indeterminate: 'fa-minus fa-fw fa-border layerControlIcon-Indeterminate',
update: 'fa-refresh layerControlIcon-Update',
menu: 'fa-bars layerControlIcon-Menu',
folder: 'fa-folder-o fa-fw layerControlIcon-Folder',
folderOpen: 'fa-folder-open-o fa-fw layerControlIcon-Folder layerControlIcon-FolderOpen'
folder: 'fa-folder fa-fw layerControlIcon-Folder',
folderOpen: 'fa-folder-open fa-fw layerControlIcon-Folder layerControlIcon-FolderOpen'
},
separated: false,
overlayReorder: false,
Expand Down Expand Up @@ -203,6 +203,10 @@ define([
}
}

// re-initialize the groupedLayerInfos once
// the grouped layers have been added.
this._groupedLayerInfos = {};

this._checkReorder();
}));
},
Expand Down Expand Up @@ -259,7 +263,7 @@ define([
noTransparency: null,
swipe: null,
expanded: false,
sublayers: true,
sublayers: true, // used by dynamic layers only
layerGroup: null,
menu: this.menu[layerInfo.type],
subLayerMenu: this.subLayerMenu[layerInfo.type]
Expand Down
Loading

0 comments on commit 528bb91

Please sign in to comment.