var bm1 = BasemapLayer({type: "WebTiledLayer",url:"http://tiles.maaamet.ee/tm/s/1.0.0/kaart/${level}/${col}/${row}.png"});
   var bm2 = BasemapLayer({type: "WebTiledLayer",url:"http://tiles.maaamet.ee/tm/s/1.0.0/hybriid/${level}/${col}/${row}.png"});
   var akaart = new Basemap({
    layers: [ bm1, bm2 ],
    id: "test1",
     title: "MAMT aluskaart 1 "
   });
   var hkaart = new Basemap({
    layers: [ bm2 ],
    id: "test2",
     title: "MAMT aluskaart 2"
   });
   
   basemaps = [akaart, hkaart];
          basemapDijit = new BasemapGallery({
     basemaps: basemaps,
     showArcGISBasemaps: false,
     //basemapsGroup: basemapGroup,
     map: _self.options.map
    },domConstruct.create("div"));Hello!
My intention is to add custom basemaps (WebTiledLayer) to BasemapGallery, without ArcGISBasemaps, in the following way:
var bm1 = BasemapLayer({type: "WebTiledLayer",url:"http://tiles.maaamet.ee/tm/s/1.0.0/kaart/${level}/${col}/${row}.png"}); var bm2 = BasemapLayer({type: "WebTiledLayer",url:"http://tiles.maaamet.ee/tm/s/1.0.0/hybriid/${level}/${col}/${row}.png"}); var akaart = new Basemap({ layers: [ bm1, bm2 ], id: "test1", title: "MAMT aluskaart 1 " }); var hkaart = new Basemap({ layers: [ bm2 ], id: "test2", title: "MAMT aluskaart 2" }); basemaps = [akaart, hkaart]; basemapDijit = new BasemapGallery({ basemaps: basemaps, showArcGISBasemaps: false, //basemapsGroup: basemapGroup, map: _self.options.map },domConstruct.create("div"));
Somehow it is not possible and digging deeper into ArcGIS JSAPI I found that the the function _switchBasemapLayers outputs:
"esri.dijit.BasemapGallery: Unable to switch basemap because new basemap is a tiled service and cannot be loaded as a dynamic layer." (this.map.getNumLevels() returns 0).
Yet the API (https://developers.arcgis.com/en/javascript/jsapi/basemaplayer.html) says that it's possible to add WebTiledLayer as a BasemapLayer and hence I assume it's possible to add as a Basemap to BasemapGallery.
What's the problem here? I would appreciate any help.
Thank you,
Raivo Alla
Estonian Land Board
function createBasemapGallery() {
      //manually create basemaps to add to basemap gallery
      var basemaps = [];
      var waterTemplateLayer = new esri.dijit.BasemapLayer({type:"WebTiledLayer",
        url:"http://tiles.maaamet.ee/tm/s/1.0.0/hybriid/1/1/1.png"
      });
      var waterBasemap = new esri.dijit.Basemap({
        layers      :[waterTemplateLayer],
        title       :"Water Template"
        
      });
      basemaps.push(waterBasemap);
I have been (again) hitting the ArcGIS JS wall... and it seems to be unbreakable at some spots.
Now it seems that I cannot add BaseMapLayer(that "contains" WebTiledLayer) into the BasemapGallery AFTER I have created the mapo object via arcgisUtils.createMap.
I mean, yes I can get the response.map object and work with it, but I seem not to be able to define the LOD since
1. my ArcGIS Online webmap has no cached service (I use custom WMS as a basemap there)
2. I found no way to attach my basemapgallery onto that map object so it can use those BasemapLayers as a basemap.
The esri.Map interface shows setBasemap method that is only possible with Esri-accepted basemap layers.
I feel being locked into small chamber, but I sense out there is lots of space and freedom.
The one and most important question for me: is it possible to use WebTiledLayer in BasemapGallery or not when working with Esri
boilerplate templates?
Thank you,
Raivo Alla
Estonian Land Board
// create the basemap gallery when active
        createBMGallery: function() {
            var _self = this;
   var basemaps=[];
   var waterTemplateLayer = new esri.dijit.BasemapLayer({type:"WebTiledLayer",
        url:"http://tiles.maaamet.ee/tm/s/1.0.0/hybriid/1/1/1.png"
      });
      var waterBasemap = new esri.dijit.Basemap({
        layers      :[waterTemplateLayer],
        title       :"Water Template"
        
      });
       
      basemaps.push(waterBasemap);
            var basemapGroup = false;
            if (!_self.options.useArcGISOnlineBasemaps) {
                basemapGroup = {
                    title: _self.options.basemapGroupTitle,
                    owner: _self.options.basemapGroupOwner
                };
            }
            // basemap gallery
            _self.basemapDijit = new BasemapGallery({
                showArcGISBasemaps: _self.options.useArcGISOnlineBasemaps,
                basemaps: basemaps,
    //basemapsGroup: basemapGroup,
                map: _self.options.map
            }, domConstruct.create("div"));connect.connect(_self.basemapDijit, "onLoad", function() {
  console.log("im in!");
  ...
}I found a way to get WebTileLayers to work in the BasemapGallery widget. It is not an elegant solution but it worked for me.
When creating the "Map" widget I assigned one of ESRI's standard basemaps as the basemap (i.e. basemap: "gray") even though in the BasemapGallery widget the showArcGISBasemaps is set to false. This crazy scenario allowed the WebTileLayers I had in the BasemapGallery to work.
var map = new Map('mapDiv', {
basemap: 'gray'
});
var basemapGallery = new BasemapGallery({
showArcGISBasemaps: false,
basemaps: basemaps, <<< The WebTileLayers added as basemaps.
map: map,
}, 'basemapGallery');
When the map loads I switch the basemap to the WebTileLayer I want to use and set the visibility of ESRI's basemap to false.
map.on('load', function() {
basemapGallery.select('Lite'); < Select the WebTileLayer I wanted all along.
map.getLayer('layer1').setVisibility(false); < Hide the esri basemap.
}
The map and web tile layers all used the Web Mercator projection. The ArcGIS JavaScript version was 3.16.
