Greetings,
I'm constructing a basemap gallery drop down menu button. I've left the default World Street Map as the initial basemap, and predefined an extent. This works when loaded.
When I switch basemaps through the menu (using a different Map Service), I lose the defined extent, with the new basemap having its full extent.
Anybody know how to fix this so I maintain the defined extent despite map service/basemap changes?
Thanks,
DR
function init() { /* Set Extent and Create Map Constructor */ var extent = new esri.geometry.Extent({ "xmin": -75.35, "ymin": 41.6, "xmax": -74.06, "ymax": 42.75, "spatialReference": { "wkid": 4269 } }); map = new esri.Map("map", { extent: esri.geometry.geographicToWebMercator(extent) }); /* Add Basemap */ var basemapUrl = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; var basemapInitial = new esri.layers.ArcGISTiledMapServiceLayer(basemapUrl); map.addLayer(basemapInitial); /* AA - Create Basemap Gallery */ createBasemapGallery(); ... /* AA */ function createBasemapGallery(){ /* ESRI World Street Map */ var layerStreet = new esri.dijit.BasemapLayer({ url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" }); var basemapStreet = new esri.dijit.Basemap({ layers: [layerStreet], title: "ESRI Street Map" }); basemaps.push(basemapStreet); /* New Basemap */ var newBaselayer = new esri.dijit.BasemapLayer({ url:"http://host/ArcGIS/rest/services/myservice/MapServer", visibleLayers:[2] }); var newBasemap = new esri.dijit.Basemap({ layers: [newBaselayer], title: "Other Basemap" }); basemaps.push(newBasemap); /* Create Gallery and Populate Drop Down Menu */ basemapGallery = new esri.dijit.BasemapGallery({ showArcGISBasemaps: false, basemaps: basemaps, map: map }); dojo.forEach(basemapGallery.basemaps, function(basemap){ dijit.byId("basemapMenu").addChild(new dijit.MenuItem({ label: basemap.title, onClick: dojo.hitch(this, function(){ this.basemapGallery.select(basemap.id); }) })); });
I have, but it results in some funny behavior, which I'm sure has to do with the spatial reference... I am just unsure how to manipulate the extent from web mercator to UTM.function init() { /* Set Extent and Create Map Constructor */ var extent = new esri.geometry.Extent({ "xmin": -75.35, "ymin": 41.6, "xmax": -74.06, "ymax": 42.75, "spatialReference": { "wkid": 4269 } }); map = new esri.Map("map", { extent: esri.geometry.geographicToWebMercator(extent) }); /* Add Basemap */ var basemapUrl = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; var basemapInitial = new esri.layers.ArcGISTiledMapServiceLayer(basemapUrl); map.addLayer(basemapInitial); /* AA - Create Basemap Gallery */ createBasemapGallery(); ... /* AA */ function createBasemapGallery(){ /* ESRI World Street Map */ var layerStreet = new esri.dijit.BasemapLayer({ url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" }); var basemapStreet = new esri.dijit.Basemap({ layers: [layerStreet], title: "ESRI Street Map" }); basemaps.push(basemapStreet); /* New Basemap */ var newBaselayer = new esri.dijit.BasemapLayer({ url:"http://host/ArcGIS/rest/services/myservice/MapServer", visibleLayers:[2] }); var newBasemap = new esri.dijit.Basemap({ layers: [newBaselayer], title: "Other Basemap" }); basemaps.push(newBasemap); /* Create Gallery and Populate Drop Down Menu */ basemapGallery = new esri.dijit.BasemapGallery({ showArcGISBasemaps: false, basemaps: basemaps, map: map }); dojo.forEach(basemapGallery.basemaps, function(basemap){ dijit.byId("basemapMenu").addChild(new dijit.MenuItem({ label: basemap.title, onClick: dojo.hitch(this, function(){ this.basemapGallery.select(basemap.id); }) })); });
So at first things are fine, and then when I switch base maps, the new (which is on a different map service and has a different spatial projection (UTM)) basemap zooms to the full extent, actually somewhat further out than that. If I then switch back to the ESRI world street map, it zooms me to a place in the Mediterranean Sea. Could anyone explain this behavior? Will I need to convert the units everytime my basemap changes?
Thanks,
DR
I have, but it results in some funny behavior, which I'm sure has to do with the spatial reference... I am just unsure how to manipulate the extent from web mercator to UTM.function init() { /* Set Extent and Create Map Constructor */ var extent = new esri.geometry.Extent({ "xmin": -75.35, "ymin": 41.6, "xmax": -74.06, "ymax": 42.75, "spatialReference": { "wkid": 4269 } }); map = new esri.Map("map", { extent: esri.geometry.geographicToWebMercator(extent) }); /* Add Basemap */ var basemapUrl = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; var basemapInitial = new esri.layers.ArcGISTiledMapServiceLayer(basemapUrl); map.addLayer(basemapInitial); /* AA - Create Basemap Gallery */ createBasemapGallery(); ... /* AA */ function createBasemapGallery(){ /* ESRI World Street Map */ var layerStreet = new esri.dijit.BasemapLayer({ url:"http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" }); var basemapStreet = new esri.dijit.Basemap({ layers: [layerStreet], title: "ESRI Street Map" }); basemaps.push(basemapStreet); /* New Basemap */ var newBaselayer = new esri.dijit.BasemapLayer({ url:"http://host/ArcGIS/rest/services/myservice/MapServer", visibleLayers:[2] }); var newBasemap = new esri.dijit.Basemap({ layers: [newBaselayer], title: "Other Basemap" }); basemaps.push(newBasemap); /* Create Gallery and Populate Drop Down Menu */ basemapGallery = new esri.dijit.BasemapGallery({ showArcGISBasemaps: false, basemaps: basemaps, map: map }); dojo.forEach(basemapGallery.basemaps, function(basemap){ dijit.byId("basemapMenu").addChild(new dijit.MenuItem({ label: basemap.title, onClick: dojo.hitch(this, function(){ this.basemapGallery.select(basemap.id); }) })); });
So at first things are fine, and then when I switch base maps, the new (which is on a different map service and has a different spatial projection (UTM)) basemap zooms to the full extent, actually somewhat further out than that. If I then switch back to the ESRI world street map, it zooms me to a place in the Mediterranean Sea. Could anyone explain this behavior? Will I need to convert the units everytime my basemap changes?
Thanks,
DR
/* Set Extent and Create Map Constructor */ var extent = new esri.geometry.Extent({ "xmin": -75.35, "ymin": 41.6, "xmax": -74.06, "ymax": 42.75, "spatialReference": { wkid:4326 } }); map = new esri.Map("map", { extent: esri.geometry.geographicToWebMercator(extent) });