You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从ArcGIS WebMap中获取缩放级别以匹配原始视图

解决ArcGIS WebMap视图与原始地图一致的问题

嘿,这个问题我刚好碰到过!其实你不用纠结单独获取缩放级别,直接用WebMap的extent或者viewpoint来让视图跳转,就能完美还原原始WebMap的位置和缩放啦,而且比单独计算center和zoom更准确。

方法一:直接使用WebMap的范围(Extent)跳转

ArcGIS的MapView.goTo()方法支持直接传入范围参数,它会自动计算出最合适的缩放级别,适配你的容器尺寸。修改你的代码如下:

app.map = new WebMap({
  portalItem: {
    id: myId
  }
});

app.map.load().then(function() {
  // 保存原始WebMap的范围
  app.initialExtent = app.map.portalItem.extent;
});

app.mapView.when(function() {
  // 直接跳转到该范围,自动匹配缩放级别
  app.activeView.goTo(app.initialExtent);
});

方法二:还原完整的视图状态(含旋转等)

如果你的原始WebMap还设置了旋转角度这类视图参数,那可以尝试获取portalItem.viewpoint,它包含了更完整的视图状态信息:

app.map = new WebMap({
  portalItem: {
    id: myId
  }
});

app.map.load().then(function() {
  // 优先使用viewpoint,没有的话 fallback 到extent
  app.initialViewpoint = app.map.portalItem.viewpoint || app.map.portalItem.extent;
});

app.mapView.when(function() {
  app.activeView.goTo(app.initialViewpoint);
});

如果你确实需要单独获取缩放级别

如果一定要拿到具体的zoom值,可以在goTo完成后获取,或者通过范围和视图尺寸计算。不过一般不建议这么做,因为不同容器尺寸下对应的zoom可能不同,直接用范围跳转更稳妥:

app.mapView.when(function() {
  app.activeView.goTo(app.initialExtent).then(function() {
    // 跳转完成后获取当前缩放级别
    app.zoom = app.activeView.zoom;
    console.log("当前缩放级别:", app.zoom);
  });
});

这样就能让你的查看器完美还原原始WebMap的视图状态啦!

内容的提问来源于stack exchange,提问作者Bill Ferster

火山引擎 最新活动