ArcGIS JS API用效果与混合模式高亮要素如何以Feature Access替代Portal ID
不使用Portal ID实现要素高亮效果的方案
完全可以实现和示例一致的选中高亮效果,Portal ID只是ArcGIS平台引用托管资源的快捷方式,和图层混合、要素查询、高亮动画的核心逻辑没有依赖关系。
核心修改思路
- 移除所有通过
portalItem.id引用资源的逻辑:原示例中用到的矢量底图、浅灰画布矢量切片、国家边界要素层,全部改为直接传入对应服务的URL初始化,无需经过Portal资源索引。 - 国家要素层的Feature Access能力可直接通过服务端点启用:只要使用的国家边界要素服务开启了查询权限(公开的Feature Access服务默认支持),原示例中点击事件的
queryFeatures查询逻辑不需要任何改动,可正常获取点击位置对应的国家要素几何。 - 原有的效果配置完全复用:你之前配置的组图层
destination-over混合模式、高亮图层destination-in混合模式、bloom发光效果、渐变动画逻辑都和Portal ID无关,直接保留即可。
核心替换代码段
你只需要修改原示例中三个图层的初始化逻辑即可,其余代码无需调整:
// 替换原WebMap+portalItem的底图初始化逻辑,直接用公开矢量底图服务地址 const map = new Map({ basemap: { baseLayers: [ new VectorTileLayer({ url: "https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer" }) ] } }); // 替换原浅灰画布矢量切片的portalItem引用,直接传入服务地址 const vtLayer = new VectorTileLayer({ url: "https://basemaps.arcgis.com/arcgis/rest/services/Canvas/World_Light_Gray_Base/VectorTileServer" }); // 替换原国家要素层的portalItem引用,直接传入Feature Access服务地址 const countries = new FeatureLayer({ url: "https://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/World_Countries/FeatureServer/0", outFields: ["*"] });
修改后运行即可得到和原示例完全一致的效果:应用加载时底图正常显示,点击国家要素时会触发带发光效果的高亮展示,同时支持缩放动画。
内容的提问来源于stack exchange,提问作者user16956390
相关产品推荐
相关产品推荐

