ArcGIS API 4.11中arcgis/utils加载失败,无法从WebMap创建地图
问题解答:ArcGIS API 4.11中
esri/arcgis/utils加载失败的替代方案 你猜的完全正确!在ArcGIS API for JavaScript 4.x版本中,esri/arcgis/utils模块已经被废弃并移除了,4.11版本确实不再支持这个模块,这就是你遇到加载失败错误的核心原因。
替代方案:使用esri/WebMap直接创建地图
在4.x API中,WebMap类本身就具备加载在线WebMap资源的能力,完全可以替代原来arcgisUtils.createMap的功能,而且API设计更符合现代异步编程模式。下面是具体的改造步骤和代码示例:
1. 调整依赖引入
首先移除对esri/arcgis/utils的依赖,你的require调用可以简化为:
require([ "esri/views/MapView", "esri/WebMap", "esri/config" ], function (MapView, WebMap, esriConfig) { // 你的代码逻辑 });
2. 重写createMap函数
用WebMap构造函数直接加载在线WebMap,结合MapView完成渲染,替代原来的arcgisUtils.createMap逻辑:
/** * Purpose: Create a new map object from the webmap retrieved online */ function createMap() { // 初始化WebMap,传入在线WebMap的Portal Item信息 const webmap = new WebMap({ portalItem: { id: "YOUR_WEBMAP_ID" // 替换为你实际的在线WebMap ID } }); // 创建MapView,绑定到页面的"map"容器 const view = new MapView({ container: "map", map: webmap, slider: true // 对应你原来的mapOptions中的slider设置 }); // 监听视图加载完成事件(替代原来的mapDeferred.then) view.when(function() { // 地图加载完成后绑定点击事件 webmap.on("click", updateLongitudeLatitude); // TODO: 在这里处理图层获取、筛选、弹窗配置等逻辑 }).catch(function(error) { // 捕获加载错误 console.error("地图加载失败:", error); }); }
关键说明
- 4.x API采用Promise异步模型,
view.when()会在地图和视图完全初始化完成后执行回调,替代了3.x中arcgisUtils.createMap返回的Deferred对象。 - 如果需要配置API密钥(访问ArcGIS Online资源时),可以通过
esriConfig.apiKey设置:esriConfig.apiKey = "YOUR_API_KEY"; - 原来的
map.on("load")事件在4.x中可以通过view.when()替代,因为view.when()触发时地图已经处于可用状态。
内容的提问来源于stack exchange,提问作者Steven




