首页 > 解决方案 > 从 hitTest() 返回的几何在用作查询几何时抛出“无效的查询参数”

问题描述

预期效果

当用户单击视图时,hitTest() 从可见多边形返回几何图形,这些几何图形将用于按localitiesLayer(点要素)上的位置进行查询。下面的代码片段和照片展示了所需的行为。

    view.on("click", function(event) {
      selectFeaturesFromClick(event);
    });

    function selectFeaturesFromClick(clickEvent) {
      var includeLayers = [countiesLayer, neighborhoodsLayer, regionsLayer, clientFeatureLayer]
      view.hitTest(clickEvent, {include: includeLayers}).then(function(response) {
        if (response.results.length > 0) {
          selectFeatures(clickFeature);
        }
     });
    }
    
    function selectFeatures(feature) {
      var geometry = feature.geometry;
      var query = {
        geometry: geometry,
        spatialRelationship: "intersects",
        outFields: ["*"], 
        returnGeometry: true
      }
      localitiesLayer.queryFeatures(query).then(function(results) {
        ...
      });
     }

具有所需行为的应用图片(Riverside)

问题

单击托管要素图层countiesLayer中的某些要素时,无法完成查询请求并显示以下错误消息:“无法执行查询。无效的查询参数”。

无论出于何种原因,大多数功能似乎都会发生这种情况,但并非所有功能都会发生这种情况。如上图所示,当单击“Riverside”而不是“Los Angeles”时,它按预期工作,如下图所示。

显示错误的应用图片(洛杉矶)

故障排除

起初我认为这可能与 localityLayer 在 时未加载有关.query(),但这并不能说明其他要素层工作得很好。

我似乎无法弄清楚似乎有效的功能和无效的功能会有什么不同。命中测试中包含的其他要素图层似乎按预期工作。

更新

问题

这是否与我编写的方式特别相关hitTest()?我在应用程序中包含了指向 CodePen 的链接,供任何想要查看的人使用。

有 bug 的应用程序的 CodePen

标签: arcgis-js-api

解决方案


与其Query从头开始创建对象,不如让层先创建一个查询,然后使用其他参数对其进行扩展:

var query = localitiesLayer.createQuery();
query.geometry = geometry;
query.spatialRelationship = "intersects";
query.outFields = ["*"];
query.returnGeometry = true;

localitiesLayer.queryFeatures(query).then(function(results) {
  ...
});

当图层创建查询时,它将预先填充所有必要的参数以避免您在上面描述的错误消息。有关FeatureLayer.createQuery()更多信息,请参阅。至于为什么它有时有效而有时无效,必须进行调查,甚至在 REST API 方面也是如此。


推荐阅读