//create Terrain Basemap for Gallery var terrainLayer = new esri.dijit.BasemapLayer({ url: "http://services.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer" }); var terrainBasemap = new esri.dijit.Basemap({ layers: [terrainLayer], title: 'Terrain', thumbnailUrl: 'http://www.arcgis.com/sharing/content/items/11742666e55b45b8a508751532d0c1ea/info/thumbnail/Terrain_ne_usa.png' }); basemapGallery.add(terrainBasemap);
Solved! Go to Solution.
//create Terrain Basemap for Gallery var terrainLayer = new esri.dijit.BasemapLayer({ url: "http://services.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer" }); var labelsLayer = new esri.dijit.BasemapLayer({ url: 'url to labels service', isReference:true }); var terrainBasemap = new esri.dijit.Basemap({ layers: [terrainLayer,labelsLayer], title: 'Terrain with Labels', thumbnailUrl: 'http://www.arcgis.com/sharing/content/items/11742666e55b45b8a508751532d0c1ea/info/thumbnail/Terrain_ne_usa.png' }); basemapGallery.add(terrainBasemap);
handleBasemapChange: function () { var basemap = Ext.getCmp('CTSApp').basemapGallery.getSelected(); if (basemap.title == 'Light Gray with Labels') { var referenceLayer = new esri.layers.ArcGISTiledMapServiceLayer('http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer'); map.referenceLayer = referenceLayer; map.addLayer(referenceLayer, 1); } else if (basemap.title == 'Imagery with Labels') { var referenceLayer = new esri.layers.ArcGISTiledMapServiceLayer('http://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer'); map.referenceLayer = referenceLayer; map.addLayer(referenceLayer, 1); } else { if (map.referenceLayer) { map.removeLayer(map.referenceLayer); } } }
var basemapGallery = new esri.dijit.BasemapGallery({ showArcGISBasemaps: false, basemapsGroup:{owner:"esri",title:"Community Basemaps"}, map: map }, dojo.create('div'));
If you want your own order, it's better to just use manual mode with fixed order. To deal with reference layers, use multiple URL and set the reference=true flag. Using your workaround is kind of risky. Since Esri may change the default gallery, you may end up different type of reference layer, or your hard-coded basemap just completely gone.
Use a user group as Kelly suggested may help in some extent, but unlikely for Esri's basemaps. The gallery order is decided by a attributed called "name" (as of v2.6), which is not available for user editing. The value is null for non-Esri basemaps, which translated to "undeterministic". Esri's basemap have pre-set "names" via other methods (likely via non-public API). If you see the default gallery order changed, chances are those "name" attributes were changed in the map item, then the order will change in your user group as well.
//create Terrain Basemap for Gallery var terrainLayer = new esri.dijit.BasemapLayer({ url: "http://services.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer" }); var labelsLayer = new esri.dijit.BasemapLayer({ url: 'url to labels service', isReference:true }); var terrainBasemap = new esri.dijit.Basemap({ layers: [terrainLayer,labelsLayer], title: 'Terrain with Labels', thumbnailUrl: 'http://www.arcgis.com/sharing/content/items/11742666e55b45b8a508751532d0c1ea/info/thumbnail/Terrain_ne_usa.png' }); basemapGallery.add(terrainBasemap);
Where is this Manual Mode property you're referring to? I don't see it on the Basemap, BasemapLayer, or BasemapGallery classes.
How (and where) do you use multiple URLs? The BasemapLayer's url parameter is expecting a string, not an array or something.
Because they are two separate services and must both be added to the map, that workaround is the best solution I currently have.
Also, I'd rather handle the maintenance of this list within the code, rather than go out to Arcgis.com and create a group, should I ever need to change it. Don't really want to rely on another resource for something I can accomplish in code.
The new gmapsggalley (1.7) example is great but how do I go about building a manual version of the gallery to only show the 3 Google Basemaps, ESRI Street,ESRI Topo and ESRI Grey with Reference ?
var basemaps = []; basemaps.push(new esri.dijit.Basemap({ layers: [new esri.dijit.BasemapLayer({ url: "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" })], title: "Esri Street", thumbnailUrl: "http://www.arcgis.com/sharing/content/items/b165c3df453e4be6b5ac4fdb241effbe/info/thumbnail/delorme_base_map.jpg" })); basemaps.push(new esri.dijit.Basemap({ layers: [new esri.dijit.BasemapLayer({ url: "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" })], title: "Esri Topo" })); basemaps.push(new esri.dijit.Basemap({ layers: [new esri.dijit.BasemapLayer({ url: "http://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer" }), new esri.dijit.BasemapLayer({ url: "http://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer", isReference:true })], title: "Esri Grey with Label" })); basemaps.push(new esri.dijit.Basemap({ layers: [new esri.dijit.BasemapLayer({ type: 'GoogleMapsRoad' })], title: "Google Maps", thumbnailUrl: dojo.moduleUrl("agsjs.dijit", "images/googleroad.png") })); basemaps.push(new esri.dijit.Basemap({ layers: [new esri.dijit.BasemapLayer({ type: 'GoogleMapsSatellite' })], title: "Google Satellite", thumbnailUrl: dojo.moduleUrl("agsjs.dijit", "images/googlesatellite.png") })); basemaps.push(new esri.dijit.Basemap({ layers: [new esri.dijit.BasemapLayer({ type: 'GoogleMapsHybrid' })], title: "Google Hybrid", thumbnailUrl: dojo.moduleUrl("agsjs.dijit", "images/googlehybrid.png") })); var basemapGallery = new esri.dijit.BasemapGallery({ showArcGISBasemaps: false, basemaps: basemaps, googleMapsApi: { v: 3.6 }, map: map }, "basemapGallery"); basemapGallery.startup();