【问题标题】:Android SDK ArcGISAndroid SDK ArcGIS
【发布时间】:2016-05-12 09:21:37
【问题描述】:

我如何才能query 仅来自 ArcGIS 地图服务的某些列?

featureLayer = new ArcGISFeatureLayer("http://+"ip"+/arcgis/rest/services/saha/saha_3857/FeatureServer/0", MODE.ONDEMAND );
featureLayer1 = new ArcGISFeatureLayer("http://+"ip"+/arcgis/rest/services/saha/saha_3857/FeatureServer/1", MODE.ONDEMAND );

// build a query to select the clicked feature
Envelope envelope = new Envelope(pointClicked,tolerance, tolerance); 
Query query = new Query();
query.setOutFields(new String[]{"*"});
query.setSpatialRelationship(SpatialRelationship.INTERSECTS);
query.setGeometry(envelope);
query.setInSpatialReference(mapView.getSpatialReference())

【问题讨论】:

  • StackOverflow 在您一次提出一个问题时效果最佳——请从您的三个问题中选择一个!另外,除了featureLayer 定义之外,您是否还有更多代码?
  • 好的。我的要素图层有 18 列,但我想选择 5 列。调用要素图层时怎么办?
  • 一种简单的方法是只发布 5 个属性而不是全部 18 个属性的地图服务。但是,如果服务需要全部 18 个,那么为什么只选择 5 个——更简单的显示,更简单的查询?
  • 我不只发布 5 个属性。如何使用查询 5 个属性?你能给我示例代码吗?谢谢
  • 信封信封=新信封(pointClicked,tolerance,tolerance); // 构建一个查询来选择点击的特征 Query query = new Query(); query.setOutFields(new String[]{"*"}); query.setSpatialRelationship(SpatialRelationship.INTERSECTS); query.setGeometry(信封); query.setInSpatialReference(mapView.getSpatialReference());

标签: arcgis


【解决方案1】:

您应该只在下面的行中获得要替换 * 的字段:

query.setOutFields(new String[]{"*"});

例如:

query.setOutFields(new String[]{"field1", "field2"});

【讨论】:

    【解决方案2】:

    在查询中只指定一定数量的字段的地方是这一行:

    query.setOutFields(new String[]{"*"});
    

    来自the Esri documentation

    public void setOutFields (String[] outFields)
    

    设置要包含在返回结果集中的字段数组。要使查询结果包含所有字段值,请指定通配符“*”作为此参数的值。

    所以现在,您的代码正在请求所有字段。为了限制这一点,请传递字段列表而不是 "*"

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 2014-06-15
      • 1970-01-01
      • 2018-07-18
      • 2018-11-24
      • 2014-05-30
      • 2016-05-11
      • 2017-07-12
      • 2019-03-20
      相关资源
      最近更新 更多