JavaScript中通过对象配置FeatureLayer标签不显示问题排查
问题:ArcGIS FeatureLayer标签无法显示的排查
我需要为多个FeatureLayer添加标签,因此创建了包含图层配置的对象数组:
const layersByYears = [ { year: 1918, layers: [ { layerID: "1", opacity: 1.0, name: "name1", featureLayer: null, labelingInfo: labelClass }, { layerID: "2", opacity: 1.0, name: "name2", featureLayer: null }, { layerID: "3", opacity: 1.0, name: "name3", featureLayer: null }, { layerID: "4", opacity: 1.0, name: "name4", featureLayer: null } ] }, // 其他年份图层配置... ]
预先定义的标签配置变量:
const labelClass = { symbol: { type: "text", // autocasts as new TextSymbol() color: "black", font: { // autocast as new Font() family: "Playfair Display", size: 12, weight: "bold" } }, labelPlacement: "above-center", labelExpressionInfo: { expression: "42" } }
创建FeatureLayer的函数:
const createFL = (layer) => { if(layer.featureLayer !== null && layer.featureLayer !== undefined) return; layer.featureLayer = new FeatureLayer({ portalItem: { id: layer.layerID, opacity: layer.opacity !== undefined ? layer.opacity : 1.0, visible: false, }, labelingInfo: layer.labelingInfo }) }
目前能正常加载ArcGIS Online上的点图层,但看不到标签,labelClass已在layersByYears之前声明,请问问题出在哪里?
排查与解决
labelingInfo格式错误:ArcGIS API for JavaScript中,labelingInfo要求是LabelClass对象数组,而非单个对象。需要将labelingInfo的值改为数组形式,比如:{ layerID: "1", opacity: 1.0, name: "name1", featureLayer: null, labelingInfo: [labelClass] },FeatureLayer参数层级错误:
opacity和visible是FeatureLayer的顶层属性,不属于portalItem对象,需要调整初始化代码的参数位置:layer.featureLayer = new FeatureLayer({ portalItem: { id: layer.layerID, }, opacity: layer.opacity !== undefined ? layer.opacity : 1.0, visible: false, labelingInfo: layer.labelingInfo })字体兼容性问题:
Playfair Display是自定义字体,若当前环境未加载该字体,可能导致标签显示异常。可以先替换为系统默认字体(如Arial)测试,确认是否是字体原因。图层可见性检查:代码中设置了
visible: false,需确保后续有将图层设为可见(比如调用layer.featureLayer.visible = true),否则标签会随图层一起隐藏。
内容的提问来源于stack exchange,提问作者jenik2205
相关产品推荐
相关产品推荐

