要素图层查询的 outStatistics 参数问题

Posted

技术标签:

【中文标题】要素图层查询的 outStatistics 参数问题【英文标题】:Issues with outStatistics param of feature layer queries 【发布时间】:2021-10-16 02:26:29 【问题描述】:

问题

当尝试使用 outStatistics 参数查询托管要素图层时,我得到一个失败的响应,而对同一要素图层的空间查询返回要素。

该应用正在尝试使用来自加利福尼亚的井数据查询要素图层。在 CodePen 中,当搜索地址或使用 Slider 小部件修改缓冲区半径时会进行两个查询:

    首先是需要多个字段进行查询的 outStatistics 查询 基于缓冲区几何的空间查询。

应用的 CodePen: https://codepen.io/dmarkbreiter/pen/abWXRZx

疑难解答

我的第一个猜测是我没有正确地形成我的统计定义。但是,它们看起来格式正确。以下是统计查询及其相关统计定义对象的代码:

      // Define Statistic Definitions 

      const countActive = 
        onStatisticField: "WellStatus = 'Active'", 
        outStatisticFieldName: "active",
        statisticType: "count"
      ;

      const countNew = 
        onStatisticField: "WellStatus = 'New'",
        outStatisticFieldName: "new",
        statisticType: "count"
      ;

      const countPlugged = 
        onStatisticField: "WellStatus = 'Plugged'",
        outStatisticFieldName: "plugged",
        statisticType: "count"
      ;

      const countIdle = 
        onStatisticField: "WellStatus = 'Idle'",
        outStatisticFieldName: "idle",
        statisticType: "count"
      ;

      const countAll = 
        onStatisticField: "WellStatus",
        outStatisticFieldName: "all",
        statisticType: "count"
      ;

      
      // Create query object and define outStatistics
      let statsQuery = oilWellsLayer.createQuery();
      statsQuery.outStatistics = [countIdle,
                                 countPlugged,
                                 countAll,
                                 countActive,
                                 countNew];

      // Query feature layer
      oilWellsLayer.queryFeatures(statsQuery).then(response=>
        console.log(response)
      ).catch(e=>
        console.log(e);
      )

如您所见,除了countAll 对象之外,这些统计定义使用outStatisticField 属性中的SQL 语句。它们似乎都是有效的 SQL 语句。

我的下一个想法是,可能由我不属于的机构拥有的要素图层不允许查询统计信息。但是,feature service 似乎将Supports Statistics 设置为true。也许我误解了这意味着什么,但我想这将允许 outStatistics。

问题

为什么我可以在此要素图层上成功执行空间查询,但无法返回 outStatistics? 这是编码问题还是身份验证问题?

【问题讨论】:

【参考方案1】:

我无法访问该服务,但我认为您不了解如何进行查询。它实际上要简单得多。

据我了解,您希望按WellStatus 分组,然后计算某些类型和所有记录。在那种情况下,我会像这样使用你的所有条件,

let statsQuery = oilWellsLayer.createQuery();
statsQuery.groupByFieldsForStatistics = ["WellStatus"];
statsQuery.outStatistics = [
    onStatisticField: "WellStatus",
    outStatisticFieldName: "well_status",
    statisticType: "count"
];

结果将是所有状态及其计数,因此要获得总数,您需要将所有内容相加。

你总是可以使用 where 参数来过滤状态,像这样,

statsQuery.where = "WellStatus IN ('Active','New','Plugged','Iddle')";

但在这种情况下,您需要再次查询总记录数。

【讨论】:

以上是关于要素图层查询的 outStatistics 参数问题的主要内容,如果未能解决你的问题,请参考以下文章

arcgis图层数据查询

ArcGIS Engine -- 常用方法

如何把arcgis要素数据集删除保留图层

ArcGIS微课1000例0011:ArcGIS空间查询(按位置选择Select by Location)完全案例详解

ArcGIS微课1000例0011:ArcGIS空间查询(按位置选择Select by Location)完全案例详解

老师,您好,ArcGIS有两个面图层,有一部分要素相交,请问怎么提取出不相交的要素,保留相交的要素呢?