ArcGIS JSAPI 學習教程 - 可視域分析圖層介紹-創建與編輯

  • 完整代碼
  • 在線示例

ArcGIS JSAPI 學習教程 - 可視域分析圖層介紹-創建與編輯 - 教程_圖層

本文主要介紹一下可視域分析圖層介紹。

arcgis js 新版本更新了可視域分析圖層類,相對於之前的用法,操作起來更加方便。

本文主要介紹一下,可視域圖層的創建、編輯與創建可視域分析。

本文包括 完整代碼以及在線示例


完整代碼

<html>
  <head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no"/>
    <title>
      可視域分析多圖層 | ArcGIS API for JavaScript 4.33
    </title>
    <style>
      html,
      body {
      padding: 0;
      margin: 0;
      height: 100%;
      }
      #viewDiv .esri-attribution {
      display: none;
      }
      #myCustomGroup {
      position: absolute;
      top: 150px;
      left: 64px;
      }
    </style>
  <script type="module" src="https://openlayers.vip/arcgis_api/calcite-components/2.8.1/calcite.esm.js"></script>
    <link rel="stylesheet" href="https://openlayers.vip/arcgis_api/4.33/esri/themes/light/main.css"/>
  <script src="https://openlayers.vip/arcgis_api/4.33/init.js"></script>
    <script>
      var _hmt = _hmt || [];
      (function () {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?f80a36f14f8a73bb0f82e0fdbcee3058";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
      })();
    </script>
    <script>
      require([
      "esri/Map",
      "esri/views/SceneView",
      'esri/layers/IntegratedMeshLayer',
      'esri/layers/ViewshedLayer',
      'esri/analysis/ViewshedAnalysis',
      'esri/analysis/Viewshed',
      "esri/geometry/Point",
      'esri/widgets/LayerList'], (
      Map,
      SceneView,
      IntegratedMeshLayer,
      ViewshedLayer,
      ViewshedAnalysis,
      Viewshed,
      Point,
      LayerList
      ) => {
      // 創建傾斜攝影
      var layer = new IntegratedMeshLayer({
      title: '傾斜攝影圖層',
      url: "https://gs3d.geosceneonline.cn/server/rest/services/Hosted/hk1/SceneServer",
      });
      // 創建場景
      const map = new Map({
      layers: [layer],
      });
      // 創建可視域分析對象
      const viewshedAnalysis = new ViewshedAnalysis({
      viewsheds: [
      // 可視域對象
      new Viewshed({
      // 觀察點
      observer: new Point({
      spatialReference: {
      latestWkid: 3857,
      wkid: 102100,
      },
      x: 12710561.590172164,
      y: 2541654.800844678,
      z: 80.210722059971886,
      }),
      // 可視域參數
      farDistance: 300,
      heading: 64,
      tilt: 84,
      // 可視域觀察角度
      horizontalFieldOfView: 360,
      verticalFieldOfView: 180,
      })
      ]
      });
      // 創建可視域圖層
      const viewshedLayer = new ViewshedLayer({
      // 可視域分析對象
      title: '可視域分析',
      });
      // 創建可視域圖層
      const viewshedLayerSphere = new ViewshedLayer({
      // 可視域分析對象
      source: viewshedAnalysis,
      title: '球形可視域分析',
      });
      // 添加到地圖彙總
      map.add(viewshedLayer);
      map.add(viewshedLayerSphere);
      const view = new SceneView({
      container: "viewDiv",
      map: map
      });
      view.when(function () {
      view.extent = layer.fullExtent;
      })
      // 開啓編輯
      view.whenLayerView(viewshedLayerSphere).then(
      // 可視域圖層視圖
      function (viewshedLayerView_) {
      // 開啓交互編輯
      viewshedLayerView_.interactive = true;
      }
      )
      let viewshedLayerView;
      view.whenLayerView(viewshedLayer).then(
      // 可視域圖層視圖
      function (viewshedLayerView_) {
      viewshedLayerView = viewshedLayerView_;
      }
      )
      let activateCreateViewsheds = true;
      // Toggle button to enable/disable the custom render node
      const renderNodeToggle = document.getElementById("renderNodeToggle");
      renderNodeToggle.addEventListener("calciteSwitchChange", () => {
      // 開啓標繪創建可視域
      if (activateCreateViewsheds) {
      viewshedLayerView?.createViewsheds();
      } else {
      viewshedLayerView.interactive = false;
      }
      activateCreateViewsheds = !activateCreateViewsheds;
      });
      const layerList = new LayerList({
      view: view
      });
      view.ui.add(layerList, {
      position: "top-left",
      index: 0
      });
      });
    </script>
  </head>
  <body>
      <div id="viewDiv" style="float: left; width: 100%; height: 100%">
    </div>
      <div id="myCustomGroup">
        <calcite-block open heading="是否開啓可視域繪製" id="renderNodeUI">
          <calcite-label layout="inline">
          關閉
        <calcite-switch id="renderNodeToggle"></calcite-switch>
          開啓
        </calcite-label>
      </calcite-block>
    </div>
  </body>
</html>

ArcGIS JSAPI 學習教程 - 可視域分析圖層介紹-創建與編輯 - 教程_html_02


在線示例

ArcGIS Maps SDK for JavaScript 在線示例:可視域分析圖層介紹