Solved! Go to Solution.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Dynamic Layer</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" /> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css"> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css" /> <script type="text/javascript">dojoConfig = { parseOnLoad: true };</script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script> <style> html, body, #mapDiv, .map.container { padding:0; margin:0; height:100%; } </style> <script type="text/javascript"> dojo.require("esri.map"); dojo.require("esri.layers.FeatureLayer"); var map, featureLayer; function init() { esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"); var initialExtent = new esri.geometry.Extent({ "xmin": -167.3, "ymin": -69.59, "xmax": 160.32, "ymax": 71.91, "spatialReference": { "wkid": 4326 } }); map = new esri.Map("mapDiv", { wrapAround180: true, extent: esri.geometry.geographicToWebMercator(initialExtent) }); dojo.connect(map, 'onLoad', initOperationalLayer); //Add the World Imagery service as a basemap to the map var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"); map.addLayer(basemap); } function initOperationalLayer(map) { var content = "<b>Name</b>: ${NAME}" + "<br /><b>Area</b>: ${ss6.gdb.Lakes.AREA:NumberFormat(places:0)}"; var infoTemplate = new esri.InfoTemplate("Dynamic Layer", content); //define the layer's data source from a table var dataSource = new esri.layers.TableDataSource(); dataSource.workspaceId = "MyDatabaseWorkspaceIDSSR2"; dataSource.dataSourceName = "ss6.gdb.Lakes"; var layerSource = new esri.layers.LayerDataSource(); layerSource.dataSource = dataSource; //create a new feature layer based on the table data source featureLayer = new esri.layers.FeatureLayer('http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/dynamicLayer', { mode: esri.layers.FeatureLayer.MODE_ONDEMAND, outFields: ["*"], infoTemplate: infoTemplate, source: layerSource }); dojo.connect(featureLayer, "onLoad", function (layer) { //project the extent if the map's spatial reference is different that the layer's extent. var gs = esri.config.defaults.geometryService; var extent = layer.fullExtent; if (extent.spatialReference.wkid === map.spatialReference.wkid) { map.setExtent(extent); } else { gs.project([extent], map.spatialReference).then(function (results) { map.setExtent(results[0]); }); } }); var renderer = new esri.renderer.SimpleRenderer( new esri.symbol.SimpleFillSymbol("solid", null, new dojo.Color([255, 0, 255, 0.75]) // fuschia lakes! )); featureLayer.setRenderer(renderer); map.addLayer(featureLayer); map.infoWindow.resize(150, 105); dojo.connect(window, 'resize', map, map.resize); } dojo.addOnLoad(init); function removeFeatureLayer() { map.removeLayer(featureLayer); } function removeFeatureLayer2() { console.log(">>>>>>>>>>>>>>> GL count: " + map.graphicsLayerIds.length); for (var j = 0, jl = map.graphicsLayerIds.length; j < jl; j++) { var currentGraphicsLayer = map.getLayer(map.graphicsLayerIds); //console.log("Graphics Layer ID: " + currentGraphicsLayer.id); map.removeLayer(currentGraphicsLayer); } } </script> </head> <body class='claro'> <div id="mapDiv"></div> <input type="button" value="Remove Feature Layer" style="position:absolute;bottom:40px;left:10px;" onclick="removeFeatureLayer()" /> <input type="button" value="Remove Feature Layer 2" style="position:absolute;bottom:10px;left:10px;" onclick="removeFeatureLayer2()" /> </body> </html>
function createFL(layerid) { hvaFeatureLayer = new esri.layers.FeatureLayer("<mapserver url>/" + layerid, { mode: esri.layers.FeatureLayer.MODE_ONDEMAND, outFields: ["*"] }); hvaFeatureLayer.setRenderer(getRenderer("Stoplight")); //custom green, yellow, red indicators AddLayersToMap(); }
function AddLayersToMap() { //if current graphics layer exists, call graphics layer function to get layer and remove it if (map.graphicsLayerIds.length >= 1) { getMapGraphicsLayers(); } map.addLayer(hvaFeatureLayer); dojo.connect(hvaFeatureLayer, "onUpdateStart", function () { hvaFeatureLayer.id = hvaFeatureLayer.name; }); //event listener for when user clicks on map dojo.connect(map, "onClick", executeSelectQueryTask); dojo.connect(hvaFeatureLayer, "onMouseOver", function (evt) { var t = "${LPHA_TRIBE_NAME}"; var content = esri.substitute(evt.graphic.attributes, t); dialog.setContent(content); dojo.style(dialog.domNode, "opacity", 1); dijit.popup.open({ popup: dialog, x: evt.pageX, y: evt.pageY }); }); //close the dialog when the mouse leaves the highlight graphic dojo.connect(map, "onLoad", function () { map.graphics.enableMouseEvents(); dojo.connect(map.graphics, "onMouseOut", closeDialog); }); }
function getMapGraphicsLayers() { console.log(">>>>>>>>>>>>>>> GL count: " + map.graphicsLayerIds.length); for (var j = 0, jl = map.graphicsLayerIds.length; j < jl; j++) { var currentGraphicsLayer = map.getLayer(map.graphicsLayerIds); //console.log("Graphics Layer ID: " + currentGraphicsLayer.id); map.removeLayer(currentGraphicsLayer); } }
function changeHaz(value) { //if (hvaFeatureLayer){ // map.removeLayer(hvaFeatureLayer); //} //alert(value.substring(0,value.length-1)); layerid = getIdFromMapService($.trim(value)); createFL(layerid); }
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Dynamic Layer</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" /> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css"> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css" /> <script type="text/javascript">dojoConfig = { parseOnLoad: true };</script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script> <style> html, body, #mapDiv, .map.container { padding:0; margin:0; height:100%; } </style> <script type="text/javascript"> dojo.require("esri.map"); dojo.require("esri.layers.FeatureLayer"); var map, featureLayer; function init() { esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"); var initialExtent = new esri.geometry.Extent({ "xmin": -167.3, "ymin": -69.59, "xmax": 160.32, "ymax": 71.91, "spatialReference": { "wkid": 4326 } }); map = new esri.Map("mapDiv", { wrapAround180: true, extent: esri.geometry.geographicToWebMercator(initialExtent) }); dojo.connect(map, 'onLoad', initOperationalLayer); //Add the World Imagery service as a basemap to the map var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"); map.addLayer(basemap); } function initOperationalLayer(map) { var content = "<b>Name</b>: ${NAME}" + "<br /><b>Area</b>: ${ss6.gdb.Lakes.AREA:NumberFormat(places:0)}"; var infoTemplate = new esri.InfoTemplate("Dynamic Layer", content); //define the layer's data source from a table var dataSource = new esri.layers.TableDataSource(); dataSource.workspaceId = "MyDatabaseWorkspaceIDSSR2"; dataSource.dataSourceName = "ss6.gdb.Lakes"; var layerSource = new esri.layers.LayerDataSource(); layerSource.dataSource = dataSource; //create a new feature layer based on the table data source featureLayer = new esri.layers.FeatureLayer('http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/dynamicLayer', { mode: esri.layers.FeatureLayer.MODE_ONDEMAND, outFields: ["*"], infoTemplate: infoTemplate, source: layerSource }); dojo.connect(featureLayer, "onLoad", function (layer) { //project the extent if the map's spatial reference is different that the layer's extent. var gs = esri.config.defaults.geometryService; var extent = layer.fullExtent; if (extent.spatialReference.wkid === map.spatialReference.wkid) { map.setExtent(extent); } else { gs.project([extent], map.spatialReference).then(function (results) { map.setExtent(results[0]); }); } }); var renderer = new esri.renderer.SimpleRenderer( new esri.symbol.SimpleFillSymbol("solid", null, new dojo.Color([255, 0, 255, 0.75]) // fuschia lakes! )); featureLayer.setRenderer(renderer); map.addLayer(featureLayer); map.infoWindow.resize(150, 105); dojo.connect(window, 'resize', map, map.resize); } dojo.addOnLoad(init); function removeFeatureLayer() { map.removeLayer(featureLayer); } function removeFeatureLayer2() { console.log(">>>>>>>>>>>>>>> GL count: " + map.graphicsLayerIds.length); for (var j = 0, jl = map.graphicsLayerIds.length; j < jl; j++) { var currentGraphicsLayer = map.getLayer(map.graphicsLayerIds); //console.log("Graphics Layer ID: " + currentGraphicsLayer.id); map.removeLayer(currentGraphicsLayer); } } </script> </head> <body class='claro'> <div id="mapDiv"></div> <input type="button" value="Remove Feature Layer" style="position:absolute;bottom:40px;left:10px;" onclick="removeFeatureLayer()" /> <input type="button" value="Remove Feature Layer 2" style="position:absolute;bottom:10px;left:10px;" onclick="removeFeatureLayer2()" /> </body> </html>
Haven't had time to think this through fully though...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Dynamic Layer</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" /> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css"> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css" /> <script type="text/javascript">dojoConfig = { parseOnLoad: true };</script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script> <style> html, body, #mapDiv, .map.container { padding:0; margin:0; height:100%; } </style> <script type="text/javascript"> dojo.require("esri.map"); dojo.require("esri.layers.FeatureLayer"); var map, featureLayer; function init() { esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"); var initialExtent = new esri.geometry.Extent({ "xmin": -167.3, "ymin": -69.59, "xmax": 160.32, "ymax": 71.91, "spatialReference": { "wkid": 4326 } }); map = new esri.Map("mapDiv", { wrapAround180: true, extent: esri.geometry.geographicToWebMercator(initialExtent) }); dojo.connect(map, 'onLoad', initOperationalLayer); //Add the World Imagery service as a basemap to the map var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"); map.addLayer(basemap); } function initOperationalLayer() { var content = "<b>Name</b>: ${NAME}" + "<br /><b>Area</b>: ${ss6.gdb.Lakes.AREA:NumberFormat(places:0)}"; var infoTemplate = new esri.InfoTemplate("Dynamic Layer", content); //define the layer's data source from a table var dataSource = new esri.layers.TableDataSource(); dataSource.workspaceId = "MyDatabaseWorkspaceIDSSR2"; dataSource.dataSourceName = "ss6.gdb.Lakes"; var layerSource = new esri.layers.LayerDataSource(); layerSource.dataSource = dataSource; //create a new feature layer based on the table data source featureLayer = new esri.layers.FeatureLayer('http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/dynamicLayer', { mode: esri.layers.FeatureLayer.MODE_ONDEMAND, outFields: ["*"], infoTemplate: infoTemplate, source: layerSource }); dojo.connect(featureLayer, "onLoad", function (layer) { //project the extent if the map's spatial reference is different that the layer's extent. var gs = esri.config.defaults.geometryService; var extent = layer.fullExtent; if (extent.spatialReference.wkid === map.spatialReference.wkid) { map.setExtent(extent); } else { gs.project([extent], map.spatialReference).then(function (results) { map.setExtent(results[0]); }); } }); var renderer = new esri.renderer.SimpleRenderer( new esri.symbol.SimpleFillSymbol("solid", null, new dojo.Color([255, 0, 255, 0.75]) // fuschia lakes! )); featureLayer.setRenderer(renderer); map.addLayer(featureLayer); map.infoWindow.resize(150, 105); dojo.connect(window, 'resize', map, map.resize); } dojo.addOnLoad(init); function removeFeatureLayer() { initOperationalLayer(); //Simulates the new layer call in your code map.removeLayer(featureLayer); } function removeFeatureLayer2() { initOperationalLayer(); //Simulates the new layer call in your code console.log(">>>>>>>>>>>>>>> GL count: " + map.graphicsLayerIds.length); for (var j = 0, jl = map.graphicsLayerIds.length; j < jl; j++) { var currentGraphicsLayer = map.getLayer(map.graphicsLayerIds); //console.log("Graphics Layer ID: " + currentGraphicsLayer.id); map.removeLayer(currentGraphicsLayer); } } </script> </head> <body class='claro'> <div id="mapDiv"></div> <input type="button" value="Remove Feature Layer" style="position:absolute;bottom:40px;left:10px;" onclick="removeFeatureLayer()" /> <input type="button" value="Remove Feature Layer 2" style="position:absolute;bottom:10px;left:10px;" onclick="removeFeatureLayer2()" /> </body> </html>
I think you may have indirectly changed the referenced layer
// dojo.connect(hvaFeatureLayer, "onUpdateStart", function () { // hvaFeatureLayer.id = hvaFeatureLayer.name; // });