ArcGIS API for JavaScript:FeatureLayer仅显示单个要素问题排查
解决ArcGIS API for JavaScript中FeatureLayer仅显示单个要素的问题
我帮你排查了代码里的几个关键问题,应该能解决QueryTask返回18个要素但地图只显示一个的情况:
1. 字段定义的空格问题(最可能的原因)
你在layerDefinition的fields数组里,部分字段名和类型后面带了多余的空格,比如"OBJECTID "(末尾有空格)、"ID ",还有字段类型"esriFieldTypeInteger "也多了个空格。ArcGIS API对字段名和类型的匹配是严格区分的,返回的featureSet里的字段名肯定是不带这些空格的(比如OBJECTID、ID),类型也是标准的esriFieldTypeInteger。这些多余空格会导致FeatureLayer无法正确识别大部分要素的属性,最终只有个别要素能被渲染。
修正后的字段定义应该是这样的:
fields: [ { name: "OBJECTID", type:"esriFieldTypeOID", alias:"OBJECTID" }, { name: "ID", type:"esriFieldTypeInteger", alias:"Id" }, { name: "Name", type: "esriFieldTypeString", length: 50, alias: "行政区划名称" }, { name: "X", type: "esriFieldTypeDouble", alias: "经度" }, { name: "Y", type: "esriFieldTypeDouble", alias: "纬度" } ]
2. 确保几何类型与返回结果一致
你代码里硬写了geometryType: "esriGeometryPolygon",但更稳妥的方式是直接使用featureSet自带的几何类型,避免手动写错导致渲染失败:
geometryType: evt.featureSet.geometryType
3. 简化FeatureLayer创建逻辑(可选优化)
其实你完全可以不用手动定义layerDefinition,API会自动从featureSet里识别字段和几何信息,这样能减少人为出错的概率:
function onQueryTask_XZQHComplete(evt) { console.log(evt.featureSet.geometryType); FL_XZQH = new FeatureLayer({ featureSet: evt.featureSet, className: "xzqh" }); map.addLayer(FL_XZQH); }
先优先修正第一个问题(字段空格),这大概率就是导致仅显示单个要素的核心原因。如果还有问题,可以再检查几何类型是否匹配,或者用简化的方式创建FeatureLayer试试。
内容的提问来源于stack exchange,提问作者Xiaofei Yin




