zoukankan      html  css  js  c++  java
  • [ArcGIS API for JavaScript 4.8] Sample Code-Get Started-MapView,SceneView简介

    【官方文档:https://developers.arcgis.com/javascript/latest/sample-code/index.html


     一、Intro to MapView(2D)

    在自己的HTML界面中创建并显示一个2D地图。

     

    1.引入ArcGIS API for JavaScript

    ①编写HTML骨架

     1 <!doctype html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <!-- 移动端优化 -->
     6         <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
     7         <title>Intro to MapView - Create a 2D map</title>
     8     </head>
     9     
    10     <body>
    11     </body>
    12 </html>

    ②在<head>标签中,使用<script>和<link>标签引入JS API

    1 <link rel="stylesheet" href="https://js.arcgis.com/4.8/esri/css/main.css">
    2 <script src="https://js.arcgis.com/4.8/"></script>

     注:部署JS API有两种方式,本地部署或者在线引用。上面的例子是使用在线的API,当API版本更新或者想使用其他版本的API时,只需要更改其中的4.x数字。如果在线API加载缓慢,请刷新或者耐心等候。

     

     2.导入模块(modules)

    从API中导入所需要的模块。

    1 <script>
    2     require([
    3         "esri/Map",
    4         "esri/views/MapView",
    5         "dojo/domReady!"
    6         ],function(Map,MapView){
    7             // 要编写的代码
    8     });
    9 </script>

    这里的<script>标签还是写在<head>标签里,也可以写在外部的.js文件里,在<script>中引入。

    Esri的JavaScript API是建立在Dojo框架之上的,require()是Dojo中的一个方法,用于导入模块。这里"esri/Map","esri/views/MapView","dojo/domReady!"就是3个不同的模块,相当于C语言中的#include<stdio.h>,C++中的#include<iostream>,C#中的using System。有了这些模块,才能使用其中的类。

    这里,"esri/Map"是关于创建地图的模块,"esri/views/MapView"是关于以2D方式显示地图的模块,"dojo/domReady!"确保在执行代码前DOM是准备好的。关于dojo的相关信息,请参考https://developers.arcgis.com/javascript/3/jshelp/inside_dojo.htmlhttps://developers.arcgis.com/javascript/3/jshelp/why_dojo.html

    这段代码的写法很奇怪,所有的代码都是写在require()中的。在这里,有两个参数。第一个是需要导入的模块数组,["module1","module2","module3",...,"module n"]。第二个参数是代码的关键部分,是一个匿名函数。需要实现的业务功能都要写在这个匿名函数的函数体中。函数需要参数,参数是下文中需要用到的类(class),而使用这些类的前提是在前面已经导入了相应的模块。function(class1,class2,...,class n){ //to do }。

    要习惯这种奇怪的写法,注意括号的匹配。

     

    3.创建地图

    这里需要先知道两个很重要的概念,Map和View。前面导入的两个模块"esri/Map"和"esri/views/MapView"就是为了提供这两个类的。

    Map创建地图的内容,它决定要创建什么样的地图,显示什么内容。View是显示地图的窗口,Map只是创建了地图,有这个东西,但是如果要在HTML页面中显示,还是要通过View。举个例子,如果画一幅画,我知道要画些什么,就是我知道Map是什么。但是画在哪里,是纸上、竹子上、黑板上还是哪里,就是View决定的。

     1 <script>
     2     require([
     3         "esri/Map",
     4         "esri/views/MapView",
     5         "dojo/domReady!"
     6         ],function(Map,MapView){
     7               var map=new Map({
     8                   basemap:"streets"
     9        });
    10    });
    11</script>

    这里,var map=new Map()创建一个Map对象。在构造函数中传入相关参数以设置Map实例的属性。这些参数要放在大括号{}中。这种构造函数的写法也很奇怪,要适应。

    basemap是Map类的一个属性,决定了创建什么样子的地图,其他的选择还有:satellite,hybrid,topo,gray,dark-gray,oceans,osm,national-geographic。接触到Layer图层的知识后,basemap还可以是自己发布的地图服务等等。也可以是portal、ArcGIS Online里WebMap的id引用。

    basemap种类

    关于Map的其他属性,请查看参考文档:https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html

    可以使用Esri提供的沙盒(Sandbox)功能在线编辑查看:https://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=intro-mapview

     

    4.创建2D视图(view)

    view是显示地图的窗口,但是view还是要寄托在HTML<div>标签上的,相当于<div>是view的一个载体,要不然view怎么知道在哪里显示呢?

    1 <body>
    2     <div id="viewDiv"></div>
    3</body>

    要注意这里的id,后面会用到。

     1 <script>
     2     require([
     3         "esri/Map",
     4         "esri/views/MapView",
     5         "dojo/domReady!"
     6         ],function(Map,MapView){
     7             // 创建地图map
     8             var map=new Map({
     9                 basemap:"streets"
    10             });
    11                     
    12             // 创建视图view
    13             var view=new MapView({
    14                 container:"viewDiv",  // 对应div载体,viewDiv是其id
    15                 map:map,  // 要显示的地图,前一个map是属性名,后一个map是前面创建的地图实例
    16                 center:[117,34],  // 地图显示中心
    17                 zoom:4  // 缩放级别
    18             });
    19     });
    20</script>

    这里,container和map都是MapView的属性。"viewDiv"是那个载体的id,map是前面创建的地图实例。

    关于MapView的其他属性,请查看MapView的参考文档:https://developers.arcgis.com/javascript/latest/api-reference/esri-views-MapView.html

     

    5.配置页面样式(style)

    为了正确显示,设置页面css。

    1 <style>
    2html,body,#viewDiv{
    3         padding:0;
    4         margin:0;
    5         height:100%;
    6         width:100%;
    7     }
    8</style>

     

    6.最终代码及运行效果

     1 <!doctype html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <!-- 移动端优化 -->
     6         <meta name="viewport" content="initial-scale=1,maximun-scale=1,user-scalable=no">
     7         <title>Intro to MapView - Create a 2D map</title>
     8         
     9         <!-- JS API的引入 -->
    10         <link rel="stylesheet" href="https://js.arcgis.com/4.8/esri/css/main.css">
    11         <script src="https://js.arcgis.com/4.8/"></script>
    12         
    13         <script>
    14             require([
    15                 "esri/Map",
    16                 "esri/views/MapView",
    17                 "dojo/domReady!"
    18                 ],function(Map,MapView){
    19                     // 创建地图map
    20                     var map=new Map({
    21                         basemap:"streets"
    22                     });
    23                     
    24                     // 创建视图view
    25                     var view=new MapView({
    26                         container:"viewDiv",  // 对应div载体,viewDiv是其id
    27                         map:map,  // 要显示的地图,前一个map是属性名,后一个map是前面创建的地图实例
    28                         center:[117,34],  // 地图显示中心
    29                         zoom:4  // 缩放级别
    30                     });
    31             });
    32         </script>
    33         
    34         <style>
    35             html,body,#viewDiv{
    36                 padding:0;
    37                 margin:0;
    38                 height:100%;
    39                 width:100%;
    40             }
    41         </style>
    42     </head>
    43     
    44     <body>
    45         <div id="viewDiv"></div>
    46     </body>
    47 </html>

    Intro to MapView

    二、Intro to SceneView(3D)

     在自己的HTML页面中创建并显示一个3D地图(地球)。

    显示3D地图与显示2D地图类似。

     

    1.骨架代码

     1 <!doctype html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
     6         <title>Intro to SceneView - Create a 3D map</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         <script>
    13             require([
    14                 "esri/Map",
    15                 "esri/views/SceneView",  // 变动1
    16                 "dojo/domReady!"
    17                 ],function(Map,SceneView){
    18                     // 创建地图
    19                     var map=new Map({
    20                     });
    21                     
    22                     //创建视图
    23                     var view=new SceneView({  // 变动2
    24                     });
    25             });
    26         </script>
    27         
    28         <style>
    29             html,body,#viewDiv{
    30                 padding:0;
    31                 margin:0;
    32                 height:100%;
    33                 width:100%;
    34             }
    35         </style>
    36     </head>
    37 
    38     <body>
    39         <div id="viewDiv"></div>
    40     </body>
    41 </html>

    相比较显示2D地图,这里有两处变动。第一个变动是引入的视图模块,2D地图是"esri/views/MapView",而3D地图是"esri/views/SceneView"。第二个变动是function()中的类,2D地图是MapView,而3D地图是SceneView。也就是说MapView是承载2D地图的视图,而SceneView是承载3D地图的视图。Scene是场景的意思,即3D地图。

     

    2.Map和SceneView代码

    需要设置的属性和2D地图差不多,但也有不一样的地方。

     1 var map=new Map({
     2     basemap:"streets",
     3     ground:"world-elevation"  // 3D地图需要设置这个属性
     4 });
     5           
     6 //创建视图
     7 var view=new SceneView({  // 变动2
     8     container:"viewDiv",
     9     map:map,
    10     scale:50000000,  //设置初始比例尺为 1:50,000,000
    11     center:[117,34]
    12 });

    ground属性用于设置3D地图的地面属性(surface properties),只在创建3D地图时设置。这里设置为"world-elevation",设置了一个使用World Elevation Service的地面实例(ground instance)。

     

    3.最终代码及运行效果

     1 <!doctype html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
     6         <title>Intro to SceneView - Create a 3D map</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         <script>
    13             require([
    14                 "esri/Map",
    15                 "esri/views/SceneView",  // 变动1
    16                 "dojo/domReady!"
    17                 ],function(Map,SceneView){
    18                     // 创建地图
    19                     var map=new Map({
    20                         basemap:"streets",
    21                         ground:"world-elevation"  // 3D地图需要设置这个属性
    22                     });
    23                     
    24                     //创建视图
    25                     var view=new SceneView({  // 变动2
    26                         container:"viewDiv",
    27                         map:map,
    28                         scale:50000000,  //设置初始比例尺为 1:50,000,000
    29                         center:[117,34]
    30                     });
    31             });
    32         </script>
    33         
    34         <style>
    35             html,body,#viewDiv{
    36                 padding:0;
    37                 margin:0;
    38                 height:100%;
    39                 width:100%;
    40             }
    41         </style>
    42     </head>
    43 
    44     <body>
    45         <div id="viewDiv"></div>
    46     </body>
    47 </html>

    Intro to SceneView


     【推荐文章:秋意正寒https://www.cnblogs.com/onsummer/p/9080463.htmlhttps://www.cnblogs.com/onsummer/p/9085273.html

  • 相关阅读:
    NS3系列—4———NS3中文教程5:Tweaking NS3
    NS3系列—3———NS3中文:4 概念描述
    NS3系列—2———NS3笔录
    NS3系列—1———NS3中文教程:3下载及编译软件
    How to speed my too-slow ssh login?
    Linux bridge
    使用 GDB 和 KVM 调试 Linux 内核与模块
    How To Set Up A Serial Port Between Two Virtual Machines In VirtualBox
    Linux内核调试环境搭建(基于ubuntu12.04)
    Android
  • 原文地址:https://www.cnblogs.com/wangmengdx/p/9385033.html
Copyright © 2011-2022 走看看