ArcGIS API for JavaScript切换底图

由于小编也是刚接触GIS,也常被网上的各种资源所混淆,关于地图的基本创建就有很多方法。其实无关就是3x和4x版本的不同。3x版本大多是3.33,4x版本为4.16最新版本。以后小编也将采用最新版本。

紧接上一篇的创建几何图形,本文主要讲述BasemapToggleBasemapGallery这两个API来实现地图底图之间的切换。

简单描述下两个api

BasemapToggle
  • 使用: require(["esri/widgets/BasemapToggle"], function(BasemapToggle) { /* code goes here */ });
  • 描述: BasemapToggle提供了一个小部件,允许最终用户在两个底图之间切换。切换后的底图设置在视图的 地图对象内。
  • 实现及主要参数说明:
var basemapToggle = new BasemapToggle({
  view: view, // view:  对MapView或SceneView的引用。
  nextBasemap: "hybrid" // nextBasemap:底图,下一个切换的底图。
});
BasemapGallery
  • 使用: require(["esri/widgets/BasemapGallery"], function(BasemapGallery) { /* code goes here */ });
  • 描述: BasemapGallery窗口小部件显示表示来自ArcGIS.com的底图或用户定义的一组地图或图像服务的集合图像。从BasemapGallery中选择新的底图时,地图的底图图层将被删除,并替换为在图库中选择的关联底图的底图图层。
  • 实现及主要参数说明:
var basemapGallery = new BasemapGallery({
  view: view
});

通过BasemapToggle实现切换

底图的切换还是需要以地图为前提,map及view都需要保留,通过实例BasemapToggle和在view添加该控件来达到目的。

<script>  
            require([
              "esri/Map",
              "esri/views/MapView",
              "esri/widgets/BasemapToggle",
            ], function(Map, MapView, BasemapToggle) {

              var basemapToggle = new BasemapToggle({
                    view: view,
                    nextBasemap: "satellite"
                    });
            
            view.ui.add(basemapToggle, "bottom-right");
        
            });
          </script>
  • 这里截取部分代码片段,结尾会附上完整代码。先来看看效果:
格式工厂 屏幕录像20200723_141948 00_00_00-00_00_30.gif

通过BasemapGallery实现切换

  • 使用BasemapGallery允许你从ArcGIS Online组中加载底图,以便可以选择和显示底图。
  • 创建一个BasemapGallery小部件并将其配置为从中加载底图ArcGIS Online。将设置view为活动视图,并将设置source为ArcGIS Online门户。将设置url为https://wwww.arcgis.com并将其设置useVectorBasemaps为,true以便从矢量图块组中加载底图。如果将此值设置为该值,false将加载栅格图块底图组
<script>  
            require([
              "esri/Map",
              "esri/views/MapView",
              "esri/widgets/BasemapToggle",
            ], function(Map, MapView, BasemapGallery) {

              var basemapGallery = new BasemapGallery({
              view: view,
              source: {
                portal: {
                  url: "https://www.arcgis.com",
                  useVectorBasemaps: true // Load vector tile basemaps
                }
              }
            });
            
            view.ui.add(basemapGallery, "top-right");
        
            });
          </script>
  • 效果图:


    格式工厂 屏幕录像20200723_141105 00_00_00-00_00_30.gif
完整代码

注意,basemapGallery和BasemapToggle是两个独立的方法,不能同时使用!!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>选择地图</title>
    <style>
        html, body, #viewDiv {
          padding: 0;
          margin: 0;
          height: 100%;
          width: 100%;
        }
      </style>
        <link rel="stylesheet" href="https://js.arcgis.com/4.16/esri/themes/light/main.css">
        <script src="https://js.arcgis.com/4.16/"></script>
        <script>  
            require([
              "esri/Map",
              "esri/views/MapView",
              "esri/widgets/BasemapToggle",
              "esri/widgets/BasemapGallery"
            ], function(Map, MapView, BasemapToggle, BasemapGallery) {
        
              var map = new Map({
                basemap: "streets-navigation-vector"
              });
        
              var view = new MapView({
                container: "viewDiv",
                map: map,
                center: [104, 30],
                zoom: 13
              });
   // basemapToggle
              var basemapToggle = new BasemapToggle({
                    view: view,
                    nextBasemap: "satellite"
                    });
            
            view.ui.add(basemapToggle, "bottom-right");
    // basemapGallery        
            var basemapGallery = new BasemapGallery({
              view: view,
              source: {
                portal: {
                  url: "https://www.arcgis.com",
                  useVectorBasemaps: true // Load vector tile basemaps
                }
              }
            });
            
            view.ui.add(basemapGallery, "top-right");
        
            });
          </script>
</head>
<body>
    <div id="viewDiv"></div>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355