Solved! Go to Solution.
identifyParams.layerIds = visible
function executeIdentifyTask(evt) {
identifyParams.geometry = evt.mapPoint;
identifyParams.mapExtent = map.extent; function executeIdentifyTask(evt) {
identifyParams.geometry = evt.mapPoint;
identifyParams.mapExtent = map.extent;
identifyParams.layerIds = visible <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" />
<!--The viewport meta tag is used to improve the presentation and behavior of the samples
on iOS devices-->
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
<title>Rijk van Dommel en Aa</title>
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.6/js/dojo/dijit/themes/soria/soria.css">
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.6/js/esri/dijit/css/Popup.css">
<style type="text/css">
html, body {
height: 100%; width: 100%; margin: 0; padding: 0;
}
body{
background-color:#FFF; overflow:hidden; font-family: "Trebuchet MS";
}
#map{
overflow:hidden;
padding:0;
}
#layerlist{
background-color: #FFF;
padding: 5px;
border: solid 1px #769dc0;
}
a:link {
color: #009FB4;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #009FB4;
}
a:hover {
text-decoration: underline;
color: #009FB4;
}
a:active {
text-decoration: none;
color: #009FB4;
}
#info {
color:#F00;
}
/*Opmaak Popup Window*/
.esriPopup.myTheme .sizer {
width: 400px;
}
.esriPopup.myTheme .titlePane,
.dj_ie7 .esriPopup.myTheme .titlePane .title {
background-color: #b7dafb; /*Achtergrondkleur titel*/
color:#4a4a4a; /*Textkleur titel*/
font-weight:700; /*dikte letters*/
z-index:100;
}
.esriPopup.myTheme .titlePane {
border:1px solid #769dc0; /*kleur border titel*/
z-index: 100;
}
.esriPopup.myTheme a {
color:#0095aa; /*kleur van de hyperlinks*/
z-index:100;
}
.esriPopup.myTheme .titleButton,
.esriPopup.myTheme .pointer,
.esriPopup.myTheme .outerPointer,
.esriPopup.myTheme .esriViewPopup .gallery .mediaHandle,
.esriPopup.myTheme .esriViewPopup .gallery .mediaIcon {
background-image:url(images/popup_sprite.png); /*afbeelding met de opmaak van de popup*/
z-index:100;
}
.esriPopup.myTheme .contentPane,.esriPopup.myTheme .actionsPane {
background-color:#ffffff; /*Achtergrondkleur inhoud*/
color:#000000;/*Tekstkleur inhoud*/
border-left:1px solid #769dc0;/*border links kleur inhoud*/
border-right:1px solid #769dc0;/*border rechts kleur inhoud*/
z-index:100;
}
/*.esriPopup.myTheme{
border-bottom: 1px solid #769dc0; /*border onder kleur inhoud*/
z-index:100;
}*/
</style>
<script type="text/javascript">
var djConfig = {
parseOnLoad: true
};
</script>
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.6"></script>
<script type="text/javascript">
dojo.require("dijit.dijit"); // optimize: load dijit layer
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("esri.map");
dojo.require("esri.dijit.Popup");
var layer, map, visible = [];
var identifyTask,identifyParams;
function init() {
//Popup
esri.bundle.widgets.popup.NLS_searching = "Zoeken...";
esri.bundle.widgets.popup.NLS_noInfo = "Niets gevonden";
esri.bundle.widgets.popup.NLS_nextFeature = "Volgende";
esri.bundle.widgets.popup.NLS_prevFeature = "Vorige";
esri.bundle.widgets.popup.NLS_maximize = "Maximaliseren";
esri.bundle.widgets.popup.NLS_restore = "Vorig formaat";
esri.bundle.widgets.popup.NLS_close = "Sluiten";
esri.bundle.widgets.popup.NLS_zoomTo = "Zoom in op selectie";
var initialExtent = new esri.geometry.Extent({"xmin":157741,"ymin":378600,"xmax":181240,"ymax":394100,"spatialReference":{"wkid":28992}});
//setup the popup window
var popup = new esri.dijit.Popup({
fillSymbol: new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,255,255]), 2), new dojo.Color([255,255,0,0]))
}, dojo.create("div"));
map = new esri.Map("map",{
infoWindow:popup,
extent: initialExtent,
logo: false});
dojo.addClass(map.infoWindow.domNode, "myTheme");//instellen dat de popup "myTheme" gebruikt
dojo.connect(map, 'onLoad', mapReady);
dojo.connect(map, "onLoad", function() {
map.disableDoubleClickZoom();
});
basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://atlas.sre.nl/ArcGIS/rest/services/TOPOGRAFIE/OSM_2011_ZW/MapServer");
map.addLayer(basemap);
layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://atlas.sre.nl/ArcGIS/rest/services/REGIO/lijst/MapServer", {opacity:.5});
if (layer.loaded) {
buildLayerList(layer);
}
else {
dojo.connect(layer, "onLoad", buildLayerList);
}
}
function buildLayerList(layer) {
var items = dojo.map(layer.layerInfos,function(info,index){
if (info.defaultVisibility) {
visible.push(info.id);
}
return "<input type='checkbox' class='list_item' checked='" + (info.defaultVisibility ? "checked" : "") + "' id='" + info.id + "' onclick='updateLayerVisibility();' /><label for='" + info.id + "'>" + info.name + "</label><br>";
});
dojo.byId("layer_list").innerHTML = items.join("");
layer.setVisibleLayers(visible);
map.addLayer(layer);
}
function updateLayerVisibility() {
var inputs = dojo.query(".list_item"), input;
visible = [];
dojo.forEach(inputs,function(input){
if (input.checked) {
visible.push(input.id);
}
});
//if there aren't any layers visible set the array to be -1
if(visible.length === 0){
visible.push(-1);
}
layer.setVisibleLayers(visible);
}
function mapReady(map){
dojo.connect(map,"onClick",executeIdentifyTask);
//create identify tasks and setup parameters
identifyTask = new esri.tasks.IdentifyTask("http://atlas.sre.nl/ArcGIS/rest/services/REGIO/lijst/MapServer");
identifyParams = new esri.tasks.IdentifyParameters();
identifyParams.tolerance = 10;
identifyParams.returnGeometry = true;
identifyParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_VISIBLE;
identifyParams.width = map.width;
identifyParams.height = map.height;
//resize the map when the browser resizes
dojo.connect(dijit.byId('map'), 'resize', map,map.resize);
}
function executeIdentifyTask(evt) {
identifyParams.geometry = evt.mapPoint;
identifyParams.mapExtent = map.extent;
var deferred = identifyTask.execute(identifyParams);
deferred.addCallback(function(response) {
// response is an array of identify result objects
// Let's return an array of features.
return dojo.map(response, function(result) {
var feature = result.feature;
feature.attributes.layerName = result.layerName;
if(result.layerName === 'Archeologie'){
console.log(feature.attributes.PARCELID);
var template = new esri.InfoTemplate("", "<p><strong>Monumentnummer:</strong> ${MONUMENTNR}<br><strong>Waarde:</strong> ${WAARDE}<br><strong>Type:</strong> ${COMPLEX}<br><strong>Toponiem:</strong> ${TOPONIEM}<br><strong>Begin periode:</strong> ${BEGIN_PERI}<br><strong>Eind periode:</strong> ${EIND_PERIO}</p><p><strong>Toelichting:</strong><br/>${TOELICHTING}</p>");
feature.setInfoTemplate(template);
}
else if(result.layerName === 'Monumenten'){
console.log(feature.attributes.PARCELID);
var template = new esri.InfoTemplate("", "<p><strong>Monumentstatus:</strong> ${Monumentstatus}<br/><strong>Monumentnummer:</strong> ${Monumentnummer}<br/><strong>Aanduiding:</strong> ${Aanduiding}<br><strong>Adres:</strong> ${Adres}<br><strong>Postcode:</strong> ${Postcode}<br><strong>Gemeente:</strong> ${Gemeente}<br><strong>Bouwjaar:</strong> ${Bouwjaar}<br><strong>Architect:</strong> ${Architect}</p><p><strong><a id=info href=${html} target=${target}>Meer informatie</a></strong></p>");
feature.setInfoTemplate(template);
}
else if (result.layerName === 'Rijksbeschermd stads/dorps-gezichten'){
var template = new esri.InfoTemplate("", "<p><strong>Monumentstatus:</strong> Rijksbeschemd stads/dorps-gezicht<br/><strong>Naam: </strong>${NAAM}</p><p><strong><a id=info href=${KICHLINK} target=${target}>Meer informatie</a></strong></p>");
feature.setInfoTemplate(template);
}
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(evt.mapPoint);
}
//show map on load
dojo.addOnLoad(init);
</script>
</head>
<body class="soria">
<div dojotype="dijit.layout.BorderContainer" design="headline" gutters="false"
style="width: 100%; height: 100%; margin: 0;">
<div id="map" dojotype="dijit.layout.ContentPane" region="center">
<div style="position:absolute; top: 5px; text-align: left; right:5px; z-index:50" id="layerlist">
<strong>Kaartlagen:</strong><br>
<span id="layer_list" ></span>
<br>
<span style="font-size:x-small;">Ondergrond: © <a href="http://www.openstreetmap.org" title="OpenStreetMap" target="_blank">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/" title="Creative Commons Attribution-ShareAlike" target="_blank">CC-BY-SA</a></span></div>
</div>
</div>
</body>
</html>
identifyParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_VISIBLE;. ESRI, what gives?
//lets manually set the identifyParams.layerIds
//to the layers that are currently checked in the legend widget
var lids = [];
dojo.forEach(legendLayers, function(layer){
if (layer.layer.visible === true){
lids.push(map.getLayer(layer.layer.id).layerId)
}
});
identifyParams.layerIds = lids;
I was having the same issue. identifyParams.LAYER_OPTION_VISIBLE would still identify layers that are hidden (not checked in the dijit.legend).
I *think* the LAYER_OPTION_VISIBLE pertains to the scale visibility, set in either the rest service or when the feat. layer is added to the map. So, if your at a scale within the layer visible scale range, it will identify, regardless if it's 'turned on' or not in the dijit.legend widget. I even tried adding LAYER_OPTION_VISIBLE param to the begining of the click event, so the layer visibility list would be 'more up to date' but it didn't work.
I did find that the identifyParams.layerIds does restrict the identify layers, so I simply added this to the beginning of the onClick function, prior to identifyTask.execute(identifyParams)://lets manually set the identifyParams.layerIds //to the layers that are currently checked in the legend widget var lids = []; dojo.forEach(legendLayers, function(layer){ if (layer.layer.visible === true){ lids.push(map.getLayer(layer.layer.id).layerId) } }); identifyParams.layerIds = lids;
Thanks I've added your code but it's still not working. It still identifies sublayers which are turned off in the layerlist. I thought it is something with the lids and the build layer list. But I can't really pinpoint it.
var legendLayers = []
var parcels = new esri.layers.FeatureLayer("restURL",{
mode:esri.layers.FeatureLayer.MODE_SNAPSHOT,
id: 'parcels',
outFields:["*"]
});
legendLayers.push({layer:parcels,title:"Property Boundaries"});
function updateLayerVisibility() {
var inputs = dojo.query(".list_item"), input;
visible = [];
dojo.forEach(inputs,function(input){
if (input.checked) {
visible.push(input.id);
}
});
//if there aren't any layers visible set the array to be -1
if(visible.length === 0){
visible.push(-1);
}
dynamicMapServiceLayer.setVisibleLayers(visible);
}
identifyParams.layerIds = visible