You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ArcGIS API for JavaScript:FeatureLayer仅显示单个要素问题排查

解决ArcGIS API for JavaScript中FeatureLayer仅显示单个要素的问题

我帮你排查了代码里的几个关键问题,应该能解决QueryTask返回18个要素但地图只显示一个的情况:


1. 字段定义的空格问题(最可能的原因)

你在layerDefinitionfields数组里,部分字段名和类型后面带了多余的空格,比如"OBJECTID "(末尾有空格)、"ID ",还有字段类型"esriFieldTypeInteger "也多了个空格。ArcGIS API对字段名和类型的匹配是严格区分的,返回的featureSet里的字段名肯定是不带这些空格的(比如OBJECTIDID),类型也是标准的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

火山引擎 最新活动