arcgis-api-for-js-之創(chuàng)建一個(gè)3D地圖

1.引用資源

首先跟創(chuàng)建2D地圖一樣,在head標(biāo)簽內(nèi)部,使用script和link標(biāo)簽引用ArcGIS API for JavaScript,代碼如下:

<link rel="stylesheet" >
<script src="https://js.arcgis.com/4.6/"></script>

同樣該script標(biāo)記從CDN加載ArcGIS API for JavaScript。當(dāng)新版本的API發(fā)布時(shí),更新版本號(hào)以對(duì)應(yīng)新發(fā)布的版本。

該link標(biāo)簽引用main.css樣式表,其中包含特定于Esri窗口小部件和組件的樣式。

2.加載模塊

其中加載模塊中的內(nèi)容,跟創(chuàng)建2D地圖一樣,這里就不在累贅,可以參考前期的創(chuàng)建一個(gè)2D地圖的文章,代碼如下:

<script>
require([
  "esri/Map",
  "esri/views/SceneView",
  "dojo/domReady!"
], function(Map, SceneView) {
  // Code to create the map and view will go here
});
</script>

esri/views/SceneView - 加載允許在3D中查看地圖的代碼

3.創(chuàng)建地圖

創(chuàng)建一個(gè)Map對(duì)象,它是從esri/Map模塊加載的Map類的引用。我們可以通過Map對(duì)象傳遞給構(gòu)造函數(shù)來指定地圖屬性,例如和“ground”。這里是設(shè)置地圖的屬性,比如說我們需要加載的底圖啊,地圖的地面屬性啊等等,而后面我們創(chuàng)建的3D視圖,是設(shè)置我們所看到地圖的樣子,可以設(shè)置顯示的中心位置,以及放大的級(jí)數(shù)等等。代碼如下:

require([
  "esri/Map",
  "esri/views/SceneView",
  "dojo/domReady!"
], function(Map, SceneView) {
  var map = new Map({
    basemap: "streets",
    ground: "world-elevation"
  });
});

其中basemap為加載的底圖,其他底圖的選項(xiàng)有:satellite,hybrid,topo,gray,dark-gray,oceans,osm,national-geographic。
ground指定地圖的表面屬性,字符串“world-elevation”使用世界高程服務(wù)指定地面的一個(gè)實(shí)例。

4.創(chuàng)建一個(gè)3D視圖

創(chuàng)建一個(gè)新的SceneView并通過傳遞一個(gè)對(duì)象給它的構(gòu)造函數(shù)來設(shè)置它的屬性:
代碼如下:

require([
  "esri/Map",
  "esri/views/SceneView",
  "dojo/domReady!"
], function(Map, SceneView) {
  var map = new Map({
    basemap: "streets",
    ground: "world-elevation"
  });
  var view = new SceneView({
    container: "viewDiv",  // container為容器的意思,這里對(duì)將包含視圖的DOM節(jié)點(diǎn)的引用,就是承載地圖的div容器的id。
    map: map  // 引用我們?cè)谏弦徊街袆?chuàng)建的地圖對(duì)象
    scale: 500000,          // 設(shè)置顯示的比例尺的大小
    center: [103.73, 36.03] // 設(shè)置中心顯示的經(jīng)緯度。這里設(shè)置的經(jīng)緯度為我們大蘭州,哈哈
  });
});

5.定義頁面內(nèi)容

到此為止,創(chuàng)建地圖和視圖所需的JavaScript已經(jīng)完成了!下一步是添加關(guān)聯(lián)的HTML查看地圖。對(duì)于這個(gè)例子,HTML非常簡單:添加一個(gè)body標(biāo)簽,它定義了瀏覽器中可見的內(nèi)容,以及div在視圖創(chuàng)建的主體內(nèi)部的一個(gè)元素。

<body>
  <div id="viewDiv"></div>
</body>

在div有“viewDiv”的ID匹配傳遞給SceneView的標(biāo)識(shí)container在constructor屬性。

6.樣式頁面

使用style標(biāo)簽中的標(biāo)簽來設(shè)置頁面的內(nèi)容head。要使地圖填充瀏覽器窗口,在頁面中添加以下CSS代碼:

<style>
  html, body, #viewDiv {
    padding: 0;
    margin: 0;
    height: 100%;
    width: 100%;
  }
</style>

最終,小伙伴們,我們成功利用ArcGIS API for JavaScript 4.6,構(gòu)建了第一個(gè)Web應(yīng)用程序,效果請(qǐng)戳下面鏈接http://jiegiser.win/arcgisAPI/creat3Dmap.html

最后整體代碼如下:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>SceneView - 創(chuàng)建一個(gè)3D地圖</title>
    <style>
        html,
        body,
        #viewDiv {
            margin: 0;
            padding: 0;
            height: 100%;
            width: 100%;
        }
    </style>
    <!--使用script和link標(biāo)簽引用ArcGIS API for JavaScript-->
    <link rel="stylesheet" >
    <script src="https://js.arcgis.com/4.6/"></script>
    <script>
        require(["esri/Map", "esri/views/SceneView", "dojo/domReady!"], function(Map, SceneView) {
            var map = new Map({
                basemap: "streets",
                ground: "world-elevation" //ground指定地圖的表面屬性,字符串“world-elevation”使用世界高程服務(wù)指定地面的一個(gè)實(shí)例。
            });
            var view = new SceneView({
                container: "viewDiv", // container為容器的意思,這里對(duì)將包含視圖的DOM節(jié)點(diǎn)的引用,就是承載地圖的div容器的id。
                map: map, // 引用我們?cè)谏弦徊街袆?chuàng)建的地圖對(duì)象
                scale: 500000, // 設(shè)置顯示的比例尺的大小
                center: [103.73, 36.03] // 設(shè)置中心顯示的經(jīng)緯度。這里設(shè)置的經(jīng)緯度為我們大蘭州,哈哈
            });
        });
    </script>
</head>

<body>
    <div id="viewDiv"></div>
</body>

</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容