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)
    });