ArcGIS Runtime 100:iOS与Android端AGSFeature.attributes属性数量不一致问题
这种跨平台属性返回不一致的问题确实挺闹心的,我帮你梳理几个最可能的原因和对应的解决办法:
1. 检查AGSQueryParameters的outFields设置
这是最常见的诱因!ArcGIS Runtime在不同平台的默认行为可能存在差异——Android端大概率默认返回所有字段,但iOS端如果没明确指定,可能只返回系统默认的几个核心字段(比如主键、显示字段等)。
你需要在构造查询参数时,显式设置返回所有字段:
query.outFields = ["*"]
如果只需要特定字段,也可以直接列出字段名,比如:
query.outFields = ["field_name_1", "field_name_2", "field_name_3", ...]
确保这个配置和Android端的查询参数完全一致。
2. 检查要素图层的visibleFields配置
如果你的AGSFeatureLayer设置了visibleFields属性,哪怕查询参数里写了*,也只会返回这些被标记为可见的字段。排查iOS端的图层初始化代码,看看有没有类似这样的设置:
featureLayer.visibleFields = ["field_a", "field_b", ...]
如果有的话,要么移除这个限制,要么把需要的所有字段都添加进去,和Android端保持统一。
3. 验证要素服务的字段访问权限
虽然可能性偏低,但也要确认:要素服务是否对所有字段都开放了访问权限?会不会iOS端的服务调用身份(比如认证信息)和Android端不同,导致部分字段被服务端过滤?你可以直接通过浏览器访问要素服务的REST端点,查看所有可用字段列表,对比iOS返回的字段是否是服务允许访问的范围。
4. 确认几何处理是否影响要素匹配
你代码里用到了AGSGeometryEngine.simplifyGeometry,虽然你说功能运行正常,但还是可以确认下:简化后的几何是否和Android端的查询几何完全匹配?有没有因为简化逻辑差异,导致只匹配到了属性不全的要素?不过这种情况一般会导致返回的要素数量不同,而非同一要素的属性数量差异,优先级可以放低一些。
内容的提问来源于stack exchange,提问作者Parv Bhasker

