Hi all, I encountering a problem I have never had to deal with before. I am trying to use the identify widget to return attributes from multiple layers when clicked on. The issue is that it sometimes returns duplicates. Not sure why.
Here is my code:
1) The Identify params are called in the map.on load
map.on("load", function () {
//coordinates on load
map.on("mouse-move", showCoordinates);
map.on("mouse-drag", showCoordinates);
map.on("extent-change", showScale);
//Show coordinates in bottom left corner of map
function showCoordinates(evt) {
//the map is in web mercator but display coordinates in geographic (lat, long)
var mp = webMercatorUtils.webMercatorToGeographic(evt.mapPoint);
//display mouse coordinates
dom.byId("info").innerHTML = 'X, Y: ' + mp.x.toFixed(3) + ", " + mp.y.toFixed(3);
}
function showScale() {
var currentScale = map.getScale();
dom.byId("scaleVis").innerHTML = 'Scale 1:' + currentScale.toFixed(0);
}
var currentScale = map.getScale();
dom.byId("scaleVis").innerHTML = 'Scale 1:' + currentScale.toFixed(0);
var visible = [];
dynaLayer1.on('visible-layers-change', function (e, index) {
visible.length = 0;
console.log('The layer(s) changed: ', e.visibleLayers.join(', '));
visible.push(e.visibleLayers)
});
//create identify tasks and setup parameters
identifyTask = new IdentifyTask(dynaLayer1.url);
identifyParams = new IdentifyParameters();
identifyParams.tolerance = 3;
identifyParams.returnGeometry = true;
identifyParams.layerIds = visible;
identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_VISIBLE;
identifyParams.width = map.width;
identifyParams.height = map.height;
//Create Home button
initialExtent = map.extent;
dojo.create("div", {
className: "esriSimpleSliderHomeButton",
title: 'Zoom to Full Extent',
onclick: function () {
if (initialExtent === undefined) {
initialExtent = map.extent;
}
map.setExtent(initialExtent);
}
}, dojo.query(".esriSimpleSliderIncrementButton")[0], "after");
var GraphicsTHP = new GraphicsLayer();
GraphicsTHP.id = 'graphicsTHP';
// Add the graphic and Layers here
map.addLayers([dynaLayer2, dynaLayer1, GraphicsTHP]);
dynaLayer2.hide();
});//End of on load stuff here2) My function that executes the identify
function executeIdentifyTask(event) {
$("#dialog").dialog("close");
identifyParams.geometry = event.mapPoint;
identifyParams.mapExtent = map.extent;
var deferred = identifyTask
.execute(identifyParams)
.addCallback(function (response) {
// response is an array of identify result objects
// Let's return an array of features.
return arrayUtils.map(response, function (result, index) {
var feature = result.feature;
var layerName = result.layerName;
feature.attributes.layerName = layerName;
if (layerName === 'Timber Harvest Plans') {
var THPs1 = new InfoTemplate("Timber Harvest Plans",
"<b>County: </b>${County}<br/>" +
"<b>HarvestDoc_Num: </b>${HarvestDoc_Num}<br/>" +
"<b>Silviculture: </b>${Silviculture}<br/>" +
"<b>Silviculture2: </b>${Silviculture2}<br/>" +
"<b>HarvestDoc_Num: </b>${HarvestDoc_Num}<br/>" +
"<b>Yarding: </b>${Yarding}<br/>" +
"<b>Status_of_Plan: </b>${Status_of_Plan}<br/>" +
"<b>Timber_Owner: </b>${Timber_Owner}<br/>" +
"<b>Landowner: </b>${Landowner}<br/>" +
"<b>Acres: </b>${Acres}<br/>"
);
feature.setInfoTemplate(THPs1);
}
else if (layerName === 'Public Land Survey System - Township, Range, & Section') {
var test = new InfoTemplate("PLSS",
"<b>SECTION: </b>${SECTION}<br/>" +
"<b>MERIDIAN: </b>${CDFPWSNAME}<br/>" +
"<b>TOWNSHIP: </b>${TOWNSHIP}<br/>" +
"<b>RANGE: </b>${RANGE}<br/>" +
"<b>MERIDIAN: </b>${MERIDIAN}<br/>"
);
feature.setInfoTemplate(test);
}
else if (layerName === 'Emergency Notices (King Fire, 2014)') {
var THPs2 = new InfoTemplate("Emergency Notices",
"<b>Acres: </b>${Acres}<br/>" +
"<b>OWNER: </b>${OWNER}<br/>" +
"<b>STATUS: </b>${STATUS}<br/>" +
"<b>EMERGENCYNUM: </b>${EMERGENCYNUM}<br/>" +
"<b>Treatment: </b>${Treatment}<br/>"
);
feature.setInfoTemplate(THPs2);
}
else if (layerName === 'Coastal Anadromy Zone (NOAA NMFS)') {
var NOAA = new InfoTemplate("Coastal Anadromy Zone",
"<b>Area Type: </b>${Area Type}<br/>");
feature.setInfoTemplate(NOAA);
}
else if (layerName === 'Calwater - Planning Watersheds') {
var Calwater = new InfoTemplate("Planning Watersheds",
"<b>CALWNUM: </b>${CALWNUM}<br/>" +
"<b>CDFPWSNAME: </b>${CDFPWSNAME}<br/>" +
"<b>Coho_ESU_Status: </b>${Coho_ESU_Status}<br/>" +
"<b>Chinook_ESU_Status: </b>${Chinook_ESU_Status}<br/>" +
"<b>Steelhead_DPS_Status: </b>${Steelhead_DPS_Status}<br/>" +
"<b>Coho_Restorability: </b>${Coho_Restorability}<br/>" +
"<b>Steelhead_Restorability: </b>${Steelhead_Restorability}<br/>" +
"<b>UpStream_ASP: </b>${UpStream_ASP}<br/>" +
"<b>Coastal_Anadromy_Zone_FPRs: </b>${Coastal_Anadromy_Zone_FPRs}<br/>" +
"<b>Status_303d_2010: </b>${Status_303d_2010}<br/>" +
"<b>County: </b>${County}<br/>" +
"<b>Acres: </b>${Acres}<br/>");
feature.setInfoTemplate(Calwater);
}
else if (layerName === 'Special Treatment Areas') {
var Calwater3 = new InfoTemplate("Special Treatment Areas",
"<b>Area_Type: </b>${Area_Type}<br/>" +
"<b>Area_Name: </b>${Area_Name}<br/>" +
"<b>County: </b>${County}<br/>" +
"<b>Quad_Name: </b>${Quad_Name}<br/>"
);
feature.setInfoTemplate(Calwater3);
}
else if (layerName === 'Coastal Zone Boundary') {
var Calwater4 = new InfoTemplate("Coastal Zone Boundary",
"<b>AREA_TYPE: </b>${AREA_TYPE}<br/>" +
"<b>CODE_SOURCE: </b>${CODE_SOURCE}<br/>"
);
feature.setInfoTemplate(Calwater4);
}
else if (layerName === '303(d) Channels, 2010') {
var Calwater8 = new InfoTemplate("303(d) Channel 2010",
"<b>TDCKEY: </b>${TDCKEY}<br/>" +
"<b>RF3RCHID: </b>${RF3RCHID}<br/>" +
"<b>PNAME: </b>${PNAME}<br/>" +
"<b>PNMCD: </b>${PNMCD}<br/>" +
"<b>RFORGFLAG: </b>${RFORGFLAG}<br/>" +
"<b>UPDATE2: </b>${UPDATE2}<br/>" +
"<b>UPDTCD2: </b>${UPDTCD2}<br/>" +
"<b>UPDTSRC2: </b>${UPDTSRC2}<br/>" +
"<b>FILLER: </b>${FILLER}<br/>" +
"<b>WBID: </b>${WBID}<br/>" +
"<b>WBNAME: </b>${WBNAME}<br/>" +
"<b>REGION: </b>${REGION}<br/>" +
"<b>REGION_NM: </b>${REGION_NM}<br/>" +
"<b>WBTYPE: </b>${WBTYPE}<br/>" +
"<b>WBTYPE_NM: </b>${WBTYPE_NM}<br/>"
);
feature.setInfoTemplate(Calwater8);
}
else if (layerName === '303(d) Waterbodies, 2010') {
var Calwater9 = new InfoTemplate("303(d) Waterbody 2010",
"<b>WATER: </b>${WATER}<br/>" +
"<b>NAME: </b>${NAME}<br/>" +
"<b>WRCBLAKES: </b>${WRCBLAKES}<br/>" +
"<b>GNIS_ID: </b>${GNIS_ID}<br/>" +
"<b>IFDKEY: </b>${IFDKEY}<br/>" +
"<b>WBID: </b>${WBID}<br/>" +
"<b>WBNAME: </b>${WBNAME}<br/>" +
"<b>REGION: </b>${REGION}<br/>" +
"<b>REGION_NM: </b>${REGION_NM}<br/>" +
"<b>WBID: </b>${WBID}<br/>" +
"<b>WBTYPE: </b>${WBTYPE}<br/>" +
"<b>WBTYPE_NM: </b>${WBTYPE_NM}<br/>"
);
feature.setInfoTemplate(Calwater9);
}
else if (layerName === 'Rainfall 1900 â 1960 (USGS)') {
var Calwater5 = new InfoTemplate("Rainfall 1900 â 1960",
"<b>Mean Annual Rainfall (inches): </b>${Mean Annual Rainfall (inches)}<br/>"
);
feature.setInfoTemplate(Calwater5);
}
else if (layerName === 'Coho Status') {
var Calwater6 = new InfoTemplate("Coho Status",
"<b>ESU/DPS: </b>${ESU/DPS}<br/>" +
"<b>Status: </b>${Status}<br/>" +
"<b>Class: </b>${Class}<br/>"
);
feature.setInfoTemplate(Calwater6);
}
else if (layerName === 'Chinook Status') {
var Calwater10 = new InfoTemplate("Chinook Status",
"<b>ESU/DPS: </b>${ESU/DPS}<br/>" +
"<b>Status: </b>${Status}<br/>" +
"<b>Class: </b>${Class}<br/>"
);
feature.setInfoTemplate(Calwater10);
}
else if (layerName === 'Steelhead Status') {
var Calwater16 = new InfoTemplate("Steelhead Status",
"<b>ESU/DPS: </b>${ESU/DPS}<br/>" +
"<b>Status: </b>${Status}<br/>" +
"<b>Class: </b>${Class}<br/>"
);
feature.setInfoTemplate(Calwater16);
}
else if (layerName === 'Forest Districts') {
var Calwater20 = new InfoTemplate("Forest Districts",
"<b>Name: </b>${Name}<br/>"
);
feature.setInfoTemplate(Calwater20);
}
else if (layerName === 'CA County Boundaries') {
var Calwater8 = new InfoTemplate("County Boundary",
"<b>County Name: </b>${County Name}<br/>"
);
feature.setInfoTemplate(Calwater8);
}
return feature;
});
});
// InfoWindow expects an array of features from each deferred
// object that you pass. If the response from the task execution
// above is not an array of features, then you need to add a callback
// like the one above to post-process the response and return an
// array of features.
map.infoWindow.setFeatures([deferred]);
map.infoWindow.show(event.mapPoint);
}Any idea is welcome.
Thanks,
Alex