ArcGIS JavaScript API4.8 底圖選擇的幾種方案

  建立一個HTML頁面,引入ArcGIS JavaScript API,在<body>標籤內建立一個div並添加ID值,在<head>標籤內設置樣式<style>,在<head>標籤內編寫JS API代碼腳本<script>。在這個<script>中,全部代碼都是寫在require()中的。關於引用JS API及如何在HTML頁面中使用的基本信息、Map和MapView的基本概念,請查看:[ArcGIS API for JavaScript 4.8] Sample Code-Get Started-MapView,SceneView簡介
css

  底圖的選擇有幾種方案,這裏列出3種:html

  ①在Map對象的構造函數中,爲basemap屬性添加表示底圖的字符串框架

  ②在WebMap對象的構造函數中,爲portalItem屬性添加portal或ArcGIS Online中的WebMap的ID值dom

  ③使用url建立切片圖層(TileLayer),添加至Map對象中函數


1、代碼框架優化

 1 <html>
 2 <head>
 3     <meta charset="utf-8">
 4     <!-- 移動端優化 -->
 5     <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
 6     <title>ArcGIS JavaScript API4.8 底圖選擇的幾種方案</title>
 7     
 8     <!-- JS API 引入 -->
 9     <link rel="stylesheet" href="https://js.arcgis.com/4.8/esri/css/main.css">
10     <script src="https://js.arcgis.com/4.8/"></script>
11     
12     <!-- 設置樣式 -->
13     <style>
14         html,body,#viewDiv{
15             margin:0;
16             padding:0;
17             height:100%;
18             width:100%;
19         }
20     </style>
21 
22     <!-- JS API 代碼 -->
23     <script>
24 
25     </script>
26 </head>
27 
28 <body>
29      <div id="viewDiv"></div>
30 </body>
31 </html>

2、添加底圖網站

①在Map對象的構造函數中,爲basemap屬性添加表示底圖的字符串ui

 1     <!-- JS API 調用代碼 -->
 2     <script>
 3         require([
 4             "esri/Map",
 5             "esri/views/MapView",
 6             
 7             "dojo/domReady!"
 8             ],function(Map,MapView){
 9                 //建立地圖Map
10                 var map=new Map({
11                     basemap:"streets"
12                 });
13                 //建立視圖View
14                 var view=new MapView({
15                     container:"viewDiv",
16                     map:map,
17                     center:[118.79647, 32.05838],  //南京城區
18                     zoom:10
19                 });
20             }
21         );
22     </script>

   第一種方案

  basemap還能夠有其餘的值,能夠進行嘗試。加密

能夠爲basemap賦值的其餘字符串

 

②在WebMap對象的構造函數中,爲portalItem屬性添加portal或ArcGIS Online中的WebMap的ID值url

  打開portal或ArcGIS Online,找到喜歡的底圖,點擊查看,進入地圖查看器,在上方的url地址欄上會顯示一個ID值,複製這個ID值,後面會用到。

  1°portal:打開portal,圖庫-Esri專題內容,在左側列表中選擇「底圖」,在右側的頁面中點擊查看感興趣的底圖。

  portal

  進入地圖查看器,上方的url地址欄中最後顯示的一串數字,就是咱們須要的WebMap的ID值。

  portalID

 1     <!-- JS API 調用代碼 -->
 2     <script>
 3         require([
 4             "esri/WebMap",
 5             "esri/views/MapView",
 6             
 7             "dojo/domReady!"
 8             ],function(WebMap,MapView){
 9                 //建立地圖Map
10                 var map=new WebMap({
11  portalItem:{
12                         id:"00f90f3f3c9141e4bea329679b257142"
13                     }        
14                 });
15                 //建立視圖View
16                 var view=new MapView({
17                     container:"viewDiv",
18                     map:map,
19                     center:[118.79647, 32.05838],  //南京城區
20                     zoom:10
21                 });
22             }
23         );
24     </script>

  注意使用WebMap的ID建立地圖時,在require()開頭要引入WebMap模塊而不是Map模塊。

  portal底圖顯示

  2°ArcGIS Online:打開ArcGIS Online,在主頁下方的圖庫中選擇感興趣的底圖,點擊進入地圖查看器,上方url地址欄中最後一串數字就是咱們須要的ID值。一樣地,代碼與調用portal的ID值相同。

  ArcGIS Online

  ArcGIS Online ID

 1     <!-- JS API 調用代碼 -->
 2     <script>
 3         require([
 4             "esri/WebMap",
 5             "esri/views/MapView",
 6             
 7             "dojo/domReady!"
 8             ],function(WebMap,MapView){
 9                 //建立地圖Map
10                 var map=new WebMap({
11  portalItem:{
12                         //id:"00f90f3f3c9141e4bea329679b257142"  //portal
13                         id:"bf024b8d0b4b48f5a486070214e87c5f"  //ArcGIS Online
14                     }        
15                 });
16                 //建立視圖View
17                 var view=new MapView({
18                     container:"viewDiv",
19                     map:map,
20                     center:[118.79647, 32.05838],  //南京城區
21                     zoom:10
22                 });
23             }
24         );
25     </script>

  ArcGIS Online底圖顯示

  這裏要注意,引用Esri提供的portal或ArcGIS Online底圖ID是不會有問題的,但若是是咱們本身用ArcGIS Pro發佈的WebMap,引用它的ID值會出現沒法調用的錯誤。多是由於咱們要在代碼中寫上portal或ArcGIS Online的帳戶和密碼。(沒有解決)

 

③使用url建立切片圖層(TileLayer),添加至Map對象中

  上面兩種方法都是直接使用的Map或者WebMap,咱們也能夠建立切片圖層,再將圖層添加到空Map中,以達到底圖的效果。http://www.geoq.cn/site/basemap.html。這個網站提供了一些切片圖層的url,複製後寫入TileLayer的構造函數中便可。點擊查看「服務地址」,上方地址欄中的url便是咱們須要引用的切片圖層的url。

  智圖官網

  智圖切片圖層url

 1     <!-- JS API 調用代碼 -->
 2     <script>
 3         require([
 4             "esri/Map",
 5             "esri/views/MapView",
 6             "esri/layers/TileLayer",
 7             
 8             "dojo/domReady!"
 9             ],function(Map,MapView,TileLayer){
10                 //底圖使用的切片圖層
11                 var mapTileLayer=new TileLayer({
12                     url:"https://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetGray/MapServer"
13                 });
14                 //建立地圖Map
15                 var map=new Map({
16  layers:[mapTileLayer]
17                 });
18                 //建立視圖View
19                 var view=new MapView({
20                     container:"viewDiv",
21                     map:map,
22                     center:[118.79647, 32.05838],  //南京城區
23                     zoom:10
24                 });
25             }
26         );
27     </script>

  切片圖層做底圖

  除了將切片圖層賦值給Map構造函數中的layers屬性,也能夠在建立完空Map對象後,這樣寫:map.layers.add("切片圖層名")。

3、總結

  三種方法均可以添加合適的底圖,若是Esri提供的basemap底圖字符串沒有適合的,能夠去portal或者ArcGIS Online的圖庫中找找。若是仍是不符合需求,能夠去智圖等一些網站上找找提供的service(服務)的url。這裏要注意,前兩種方法的底圖都是WGS84座標系的,而第三種方法的切片圖層是火星座標系的。

  互聯網地圖使用三種座標系統(這裏的座標系統指加密座標系統,不是指地理座標系或投影座標系):WGS84座標系、火星座標系、百度座標系。國外一些地圖使用WGS84座標系,火星座標系是國家測繪局要求的對WGS84座標系的加密,而百度座標系是百度公司對火星座標系的又一次加密。

文中例子的連接分享:https://pan.baidu.com/s/1ylxc_XanvQKdHMcmWt7Zyw

相關文章
相關標籤/搜索