微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在arcGIS SceneView中限制地图区域/缩放

如何解决在arcGIS SceneView中限制地图区域/缩放

我在本地查看模式下使用arcGIS SceneView显示WebMap。我试图限制某个区域的缩放级别和范围,以使用户只能看到美国,夏威夷和阿拉斯加,而不能在此范围之外移动。我还需要限制缩放级别,因为如果用户将地图缩小得太远,则会过度缩放地图并看到直到/未映射的空间。

有没有可能解决这个问题?我首先认为使用constraints属性可以解决此问题,但是似乎可以馈给此属性属性非常有限: https://developers.arcgis.com/javascript/latest/api-reference/esri-views-SceneView.html#constraints

解决方法

一种实现我认为想要的方法是:

  • 收听以查看属性更改,
  • 检查约束
  • 采取相应行动。

看看我为您制作的示例。在其中,我等待视图停止更新(updating属性),然后检查约束。如果超出比例或超出范围,则重置视图。您可能想要其他操作,我只是简单地说了。

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
  <title>
    View constraints
  </title>

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

  <script>
    require([
      "esri/Map","esri/views/SceneView","esri/geometry/Extent"
    ],function (Map,SceneView,Extent) {

      const extent = Extent.fromJSON(
        {
          "spatialReference": {
            "latestWkid":3857,"wkid":102100
          },"xmin":-13119716.983985346,"ymin":4024337.3961656773,"xmax":-13096023.097830579,"ymax":4030581.302795334
        }
      );

      const MIN_SCALE = 12000;
      const MAX_SCALE = 48000;

      
      const map = new Map({
        basemap: "topo-vector",ground: "world-elevation"
      });

      const view = new SceneView({
        container: "viewDiv",map: map,viewingMode: "local",center: [-117.75,33.99],scale: 24000
      });

      function resetView() {
        console.log('reset');
        view.goTo(
          {
            center:[-117.75,scale: 24000
          }
        );
      }

      view.watch("updating",function (value) {
        if (!value) {
          if (
            // out of scale
            view.scale < MIN_SCALE ||
            view.scale > MAX_SCALE ||
            // out of extent
            view.extent.xmin < extent.xmin ||
            extent.xmax < view.extent.xmax ||
            view.extent.ymin < extent.ymin ||
            extent.ymax < view.extent.ymax 
          ) {
            resetView();
          };
        }
      });

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

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

</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。