如何从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




