I ran a quick test and was able to add and remove basemap layers at 3.1. Here's my test case: function switchMap(basemap){ //remove the existing basemap layer var layer = map.getLayer('basemap'); map.removeLayer(layer); var layerUrl; switch(basemap){ case 'topo': layerUrl = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer'; break; case 'imagery': layerUrl = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'; break; } var basemap = new esri.layers.ArcGISTiledMapServiceLayer(layerUrl,{id:'basemap'}); map.addLayer(basemap,0); }
function switchMap(basemap){ //remove the existing basemap layer var layer = map.getLayer('basemap'); map.removeLayer(layer); var layerUrl; switch(basemap){ case 'topo': layerUrl = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer'; break; case 'imagery': layerUrl = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'; break; } var basemap = new esri.layers.ArcGISTiledMapServiceLayer(layerUrl,{id:'basemap'}); map.addLayer(basemap,0); }
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" /> <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/> <title></title> <link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.1/js/dojo/dijit/themes/nihilo/nihilo.css"> <style type="text/css"> html, body { height: 100%; width: 100%; margin: 0; padding: 0; } body{ background-color: #fff; overflow:hidden; font-family: sans-serif; } label { display: inline-block; padding: 5px 5px 0 5px; font-weight: 400; font-size: 12pt; } #header { padding-top: 4px; padding-right: 15px; color: #444; font-size:16pt; text-align:right;font-weight:bold; height:55px; background: #fff; border-bottom: 1px solid #444; } #subheader { font-size:small; color: #444; text-align:right; padding-right:20px; } #header, #subheader { text-shadow: 1px 1px 1px #cee1f0; filter: dropshadow(color=#cee1f0, offx=1, offy=1); } #rightPane{ margin: 0; padding: 10px; background-color: #fff; color: #421b14; width: 180px; } .ds { background: #000; overflow: hidden; position: absolute; z-index: 2; } #ds-h div { width: 100%; } #ds-l div, #ds-r div { height: 100%; } #ds-r div { right: 0; } #ds .o1 { filter: alpha(opacity=10); opacity: .1; } #ds .o2 { filter: alpha(opacity=8); opacity: .08; } #ds .o3 { filter: alpha(opacity=6); opacity: .06; } #ds .o4 { filter: alpha(opacity=4); opacity: .04; } #ds .o5 { filter: alpha(opacity=2); opacity: .02; } #ds .h1 { height: 1px; } #ds .h2 { height: 2px; } #ds .h3 { height: 3px; } #ds .h4 { height: 4px; } #ds .h5 { height: 5px; } #ds .v1 { width: 1px; } #ds .v2 { width: 2px; } #ds .v3 { width: 3px; } #ds .v4 { width: 4px; } #ds .v5 { width: 5px; } /* make all dijit buttons the same width */ .dijitButton .dijitButtonNode, #drawingWrapper { width: 160px; } </style> <script>var dojoConfig = { parseOnLoad: true };</script> <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.1"></script> <script> dojo.require("dijit.layout.BorderContainer"); dojo.require("dijit.layout.ContentPane"); dojo.require("dijit.form.Button"); dojo.require("dijit.form.CheckBox"); dojo.require("esri.map"); dojo.require("esri.toolbars.draw"); dojo.require("esri.dijit.Print"); var app = {}; app.map = null, app.toolbar = null, app.circle = false, app.symbols = null, app.printer = null; function init() { esri.config.defaults.io.proxyUrl = "/arcgisserver/apis/javascript/proxy/proxy.ashx"; var initialExtent = new esri.geometry.Extent({"xmin":-10399332,"ymin":3440549,"xmax":-9801289,"ymax":3705938,"spatialReference":{"wkid":102100}}); app.map = new esri.Map("map", { extent: initialExtent, wrapAround180: true }); dojo.connect(app.map, 'onLoad', function() { dojo.connect(dijit.byId('map'), 'resize', app.map, app.map.resize); app.toolbar = new esri.toolbars.Draw(app.map); dojo.connect(app.toolbar, "onDrawEnd", addToMap); }); // print dijit app.printer = new esri.dijit.Print({ map: app.map, url: "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export Web Map Task" }, dojo.byId("printButton")); app.printer.startup(); var url = "http://services.arcgisonline.com/ArcGIS/rest/services/Ocean_Basemap/MapServer"; var tiledLayer = new esri.layers.ArcGISTiledMapServiceLayer(url, { "id": "Ocean" }); app.map.addLayer(tiledLayer); //--Testing----Testing----Testing---------------------------------------------------------- // Save that layer!! We need to save the layer object so we can remove and re-add it later app.tiledLayer = tiledLayer; //--Testing----Testing----Testing---------------------------------------------------------- // add census boundary dyn map svc var dynUrl = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer"; var dynLayer = new esri.layers.ArcGISDynamicMapServiceLayer(dynUrl, { "id": "Boundaries" }); app.map.addLayer(dynLayer); // create a check box dojo.forEach(["Boundaries", "Ocean"], function(id) { new dijit.form.CheckBox({ id: "cb_" + id, name: "cb_" + id, checked: true, onChange: function(bool) { bool ? app.map.getLayer(this.id.split('_')[1]).show() : app.map.getLayer(this.id.split('_')[1]).hide(); } }, dojo.create('input', { id: 'lyr_' + id })).placeAt(dojo.byId('layerToggle')); // create a label for the check box var label = dojo.create('label', { "for": "cb_" + id, "innerHTML": id }); dojo.place(label, dojo.byId('layerToggle')); dojo.place(dojo.create('br'), dojo.byId('layerToggle')); }); // set up symbols for the various geometry types app.symbols = {}; var es = esri.symbol; var dc = dojo.Color; // find the divs for buttons dojo.forEach(dojo.query(".drawing"), function(btn) { var button = new dijit.form.Button({ label: btn.innerHTML, onClick: function() { activateTool(this.id); }, style: { "width": "100%", "margin": "3px auto", "textAlign": "center" } }, btn); }); } //--Testing----Testing----Testing------------------------------------------------------------ // Make the Base Layer Go Away //--Testing----Testing----Testing------------------------------------------------------------ function activateTool(type) { //--Testing----Testing----Testing---------------------------------------------------------- // Hijack drawing tool to activate our disappearing base map layer issue app.map.removeLayer(app.tiledLayer) app.map.addLayer(app.tiledLayer) //--Testing----Testing----Testing---------------------------------------------------------- } function addToMap(geom) { } dojo.ready(init); </script> </head> <body class="nihilo"> <div id="mainWindow" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design:'headline',gutters:false" style="width: 100%; height: 100%; margin: 0;"> <div id="header" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'"> Print Dijit: Hijacked application to show Disappearing Base Layer Issue <div id="subheader">Requires ArcGIS Server 10.1</div> </div> <div id="map" class="shadow" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'"> <!-- drop shadow divs --> <div id="ds"> <div id="ds-h"> <div class="ds h1 o1"></div> <div class="ds h2 o2"></div> <div class="ds h3 o3"></div> <div class="ds h4 o4"></div> <div class="ds h5 o5"></div> </div> <div id="ds-r"> <div class="ds v1 o1"></div> <div class="ds v2 o2"></div> <div class="ds v3 o3"></div> <div class="ds v4 o4"></div> <div class="ds v5 o5"></div> </div> </div> <!-- end drop shadow divs --> </div> <div id="rightPane" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'right'"> <div id="printButton"></div> <hr /> <div id="drawingWrapper"> Make the baselayer go away: <!-- Testing----Testing----Testing----------------------------------------------------------> <div id="test" class="drawing">Click Me</div> <!-- Testing----Testing----Testing----------------------------------------------------------> </div> <hr /> <div id="layerToggle"> Toggle Layers: <br /> <!-- checkbox and labels inserted programmatically --> </div> </div> </div> </body> </html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <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>Terrain basemap with custom data</title> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.1/js/dojo/dijit/themes/claro/claro.css"> <style> html, body { height: 100%; width: 100%; margin: 0; padding: 0; } #map{padding:0;} </style> <script type="text/javascript">var djConfig = {parseOnLoad: true};</script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.1"></script> <script type="text/javascript"> dojo.require("dijit.layout.BorderContainer"); dojo.require("dijit.layout.ContentPane"); dojo.require("esri.map"); var map; function init() { var initExtent = new esri.geometry.Extent({"xmin":-14094630.358433869,"ymin":3325662.059679695,"xmax":-7558958.691939897,"ymax":5991785.606265934,"spatialReference":{"wkid":102100}}); map = new esri.Map("map",{ extent:initExtent }); //Add the terrain service to the map. View the ArcGIS Online site for services http://arcgisonline/home/search.html?t=content&f=typekeywords:service var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer",{id:'basemap'}); map.addLayer(basemap); var operationalLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer", {"opacity":0.5}); map.addLayer(operationalLayer); dojo.connect(map, 'onLoad', function(theMap) { //resize the map when the browser resizes dojo.connect(dijit.byId('map'), 'resize', map,map.resize); }); } function switchMap(basemap){ //remove the existing basemap layer var layer = map.getLayer('basemap'); map.removeLayer(layer); var layerUrl; switch(basemap){ case 'topo': layerUrl = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer'; break; case 'imagery': layerUrl = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'; break; } var basemap = new esri.layers.ArcGISTiledMapServiceLayer(layerUrl,{id:'basemap'}); map.addLayer(basemap,0); } dojo.addOnLoad(init); </script> </head> <body class="claro"> <div dojotype="dijit.layout.BorderContainer" design="headline" gutters="false" style="width: 100%; height: 100%; margin: 0;"> <div dojotype='dijit.layout.ContentPane' region='top' style='height:20px;'> <input type='button' value='Topo' onclick='switchMap("topo");'/> <input type='button' value ='Imagery' onclick='switchMap("imagery");'/> </div> <div id="map" dojotype="dijit.layout.ContentPane" region="center" style="overflow:hidden;"> </div> </div> </body> </html>
map.removeLayer(layermanager.currentbaselayer.layer); map.addLayer(layermanager.currentbaselayer.layer);
You could simply add a Tiled layer to the map using map.addLayer(tiledLayer), then remove it using map.removeLayer(tiledLayer).
What's the best way to add/remove basemaps without using the Gallery dijit?
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.