Select to view content in your preferred language

Help with Creating a map on top of Esri's Basemap Gallery

2943
6
03-30-2016 09:12 AM
RichardLafleur
Emerging Contributor

I need help getting the following map/code to show up, but have the map gallery as the basemap.

My code

arcgisUtils.createMap("511bd0e84f1441edb7bf55167ecddec2", "map").then(function (response) {

              //update the app

              dom.byId("title").innerHTML = response.itemInfo.item.title;

              dom.byId("subtitle").innerHTML = response.itemInfo.item.snippet;

              map = response.map;

              //add the scalebar

              scalebar = new Scalebar({

                map: map,

                scalebarUnit: "english"

              });

              overviewMapDijit = new OverviewMap({

                map: map,

                visible: true

              });

              overviewMapDijit.startup();

              //add the legend. Note that we use the utility method getLegendLayers to get

              //the layers to display in the legend from the createMap response.

              var legendLayers = arcgisUtils.getLegendLayers(response);

              legendDijit = new Legend({

                map: map,

                layerInfos: legendLayers

              }, "legend");

              legendDijit.startup();

            });

the Map gallery

<!DOCTYPE html>

<html> 

<head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

 

  <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>

  <title></title>

  <link rel="stylesheet" href="https://js.arcgis.com/3.16/dijit/themes/claro/claro.css">   

  <link rel="stylesheet" href="https://js.arcgis.com/3.16/esri/css/esri.css">

  <style>

    html, body { height: 100%; width: 100%; margin: 0; padding: 0; }

    #map{

      padding:0;

    }

  </style>

 

  <script src="https://js.arcgis.com/3.16/"></script>

  <script>

    var map;

    require([

      "esri/map", "esri/dijit/BasemapGallery", "esri/arcgis/utils",

      "dojo/parser",

      "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dijit/TitlePane",

      "dojo/domReady!"

    ], function(

      Map, BasemapGallery, arcgisUtils,

      parser

    ) {

      parser.parse();

      map = new Map("map", {

        basemap: "topo",

        center: [-105.255, 40.022],

        zoom: 13

      });

      //add the basemap gallery, in this case we'll display maps from ArcGIS.com including bing maps

      var basemapGallery = new BasemapGallery({

        showArcGISBasemaps: true,

        map: map

      }, "basemapGallery");

      basemapGallery.startup();

     

      basemapGallery.on("error", function(msg) {

        console.log("basemap gallery error:  ", msg);

      });

    });

  </script>

</head>

<body class="claro">

  <div data-dojo-type="dijit/layout/BorderContainer"

       data-dojo-props="design:'headline', gutters:false"

       style="width:100%;height:100%;margin:0;">

    <div id="map"

         data-dojo-type="dijit/layout/ContentPane"

         data-dojo-props="region:'center'"

         style="padding:0;">

      <div style="position:absolute; right:20px; top:10px; z-Index:999;">

        <div data-dojo-type="dijit/TitlePane"

             data-dojo-props="title:'Switch Basemap', closable:false, open:false">

          <div data-dojo-type="dijit/layout/ContentPane" style="width:380px; height:280px; overflow:auto;">

            <div id="basemapGallery"></div>

          </div>

        </div>

      </div>

    </div>

  </div>

</body>

</html>

Also,as you can see in my code i have a legend, scalebar, and overview map that i need as well. Can anyone help with this i dont really care what the layout looks like just as long as my map shows up on top of the basmap gallery and i can change the basemap and yet have my data stay put.

Tags (2)
0 Kudos
6 Replies
RichardLafleur
Emerging Contributor

can someone please help with this, or at least direct me to the correct result.

0 Kudos
AdrianWelsh
MVP Honored Contributor

Richard,

Is there any error being thrown with the basemap error message?

0 Kudos
RichardLafleur
Emerging Contributor

I think i am placing my code in the wrong place and might be missing some code, cause when i run it everything disappears.

0 Kudos
RichardLafleur
Emerging Contributor

Here is an update of what i have been able to figure out, what i can't get now is the "switch basemap" drop down to actually switch the basemap.

<!DOCTYPE html>

<html>

  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">

    <title>Create web map from id</title>

    <link rel="stylesheet" href="https://js.arcgis.com/3.16/dijit/themes/claro/claro.css">

    <link rel="stylesheet" href="https://js.arcgis.com/3.16/esri/css/esri.css">

    <link rel="stylesheet" href="css/layout.css">

    <style>

    html, body { height: 100%; width: 100%; margin: 0; padding: 0; }

    #map{

      padding:0;

    }

  </style>

    <script src="https://js.arcgis.com/3.16/"></script>

    <script>

    var map;

      require([

        "dojo/parser",

        "dojo/ready",

        "dijit/layout/BorderContainer",

        "dijit/layout/ContentPane",

        "dijit/TitlePane",

        "dojo/dom",

        "esri/map",

        "esri/dijit/BasemapGallery",

        "esri/arcgis/utils",

        "esri/dijit/Legend",

        "esri/dijit/Scalebar",

        "esri/dijit/OverviewMap",

        "dojo/domReady!"

      ], function(

        parser,

        ready,

        BorderContainer,

        ContentPane,

        TitlePane,

        dom,

        Map,

        BasemapGallery,

        arcgisUtils,

        Legend,

        Scalebar,

        OverviewMap

      ) {

        ready(function(){

        parser.parse();

       

       

//if accessing webmap from a portal outside of ArcGIS Online, uncomment and replace path with portal URL

       //arcgisUtils.arcgisUrl = "https://pathto/portal/sharing/content/items";

        arcgisUtils.createMap("511bd0e84f1441edb7bf55167ecddec2", "map").then(function(response){

          //update the app

          dom.byId("title").innerHTML = response.itemInfo.item.title;

          dom.byId("subtitle").innerHTML = response.itemInfo.item.snippet;

          var map = response.map;

          //add the scalebar

          var scalebar = new Scalebar({

            map: map,

            scalebarUnit: "english"

          });

          //add the legend. Note that we use the utility method getLegendLayers to get

          //the layers to display in the legend from the createMap response.

          var legendLayers = arcgisUtils.getLegendLayers(response);

          var legendDijit = new Legend({

            map: map,

            layerInfos: legendLayers

          },"legend");

          legendDijit.startup();

         

          var overviewMapDijit = new OverviewMap({

          map: map,

          visible: true,

          attachTo: "bottom-right"

        });

        overviewMapDijit.startup();

        });

       

        var basemapGallery = new BasemapGallery({

        showArcGISBasemaps: true,

        map: map

      }, "basemapGallery");

      basemapGallery.startup();

     

      basemapGallery.on("error", function(msg) {

        console.log("basemap gallery error:  ", msg);

        });

      });

    });

    </script>

  </head>

  <body class="claro">

    <div id="mainWindow" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline'" style="width:100%; height:100%;">

      <div id="header" class="shadow roundedCorners" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top'">

        <div id="title"></div>

        <div id="subtitle"></div>

      </div>

     

      <div id="map"

         data-dojo-type="dijit/layout/ContentPane"

         data-dojo-props="region:'center'"

         style="padding:0;">

       

        <div style="position:absolute; right:20px; top:10px; z-Index:999;">

        <div data-dojo-type="dijit/TitlePane"

             data-dojo-props="title:'Switch Basemap', closable:false, open:false">

          <div data-dojo-type="dijit/layout/ContentPane" style="width:380px; height:280px; overflow:auto;">

            <div id="basemapGallery"></div>

          </div>

        </div>

      </div>

       

      </div>

      <div id="rightPane" class="roundedCorners shadow" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'left'" >

        <div id="legend"></div>

      </div>

    </div>

  </body>

</html>

0 Kudos
RichardLafleur
Emerging Contributor

if you cant get your code the code to work, i am having to building this in a virtual machine, and then within esri's sandbox

located here ArcGIS API for JavaScript Sandbox

0 Kudos
AdrianWelsh
MVP Honored Contributor

Richard,

I really am at a loss. I tried toying around with this in the sandbox and could not get the basemap to change. I feel like it has something to do with this line:

var map = response.map;

...but I really don't know.

Just some advice, it might help to put your code in the code editor (click on "Usa advanced editor" > double arrows > Syntax > Javascript)

0 Kudos