二维地图切换到三维地图

本示例演示了如何使用相同的Map实例将地图视图从 2D 切换到 3D。单击视图左上角的 3D 按钮将视图从 2D 切换到3D,反之亦然。

实现这个功能需要将起始视图中的容器设置为目标视图的容器,在目标视图上设置地图实例和视点。

程序完整源代码:

<!DOCTYPE html>
<html>
<head>

  <meta charset="utf-8">
  <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
  <title>Switch view from 2D to 3D - 4.5</title>

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

    #infoDiv {
      position: absolute;
      top: 15px;
      left: 60px;
    }

    #infoDiv input {
      border: none;
      box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 2px;
    }
  </style>

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

  <script>
    require([
      "esri/Map",
      "esri/views/MapView",
      "esri/views/SceneView",
      "dojo/domReady!"
    ], function(Map, MapView, SceneView) {

      // 切换按钮
      var switchButton = document.getElementById("switch-btn");

      var appConfig = {
        mapView: null,
        sceneView: null,
        activeView: null,
        container: "viewDiv"
      };

      var map = new Map({
        basemap: "streets",
        ground: "world-elevation"
      });

      var initialViewParams = {
        map: map,
        zoom: 4,
        center: [15, 65],
        container: appConfig.container
      };

      // 创建二维视图 并记为激活状态
      appConfig.mapView = createView(initialViewParams, "2d");
      appConfig.activeView = appConfig.mapView;

      // 创建三维视图,不初始化
      initialViewParams.container = null;
      appConfig.sceneView = createView(initialViewParams, "3d");

      // 设置按钮单击事件处理
      switchButton.addEventListener("click", function() {
        switchView();
      });

      // 切换视图的函数
      function switchView() {
        var is3D = appConfig.activeView.type === "3d"; //激活视图是否是三维的

        // 移除之前的值
        appConfig.activeView.container = null;

        if (is3D) {//当激活视图是三维的,切换为二维的
          // 设置 mapview
          appConfig.mapView.viewpoint = appConfig.activeView.viewpoint.clone();
          appConfig.mapView.container = appConfig.container;
          // 更新配置
          appConfig.activeView = appConfig.mapView;
          switchButton.value = "3D";
        } else {
          appConfig.sceneView.viewpoint = appConfig.activeView.viewpoint.clone();
          appConfig.sceneView.container = appConfig.container;

          appConfig.activeView = appConfig.sceneView;
          switchButton.value = "2D";
        }
      }

      // 用于创建二三维视图的函数
      function createView(params, type) {
        var view;
        var is2D = type === "2d";
        if (is2D) {
          view = new MapView(params);
          return view;
        } else {
          view = new SceneView(params);
        }
        return view;
      }

    });
  </script>

</head>

<body>
  <div id="viewDiv"></div>
  <div id="infoDiv">
    <input class="esri-component esri-widget-button esri-widget esri-interactive" type="button"
      id="switch-btn" value="3D">
  </div>
</body>
</html>

程序运行效果:沙箱地址:https://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=views-switch-2d-3d

(完)

results matching ""

    No results matching ""