ARCGIS: скрыть полигоны, полученные в результате пространственного запроса - PullRequest
0 голосов
/ 30 января 2019

У меня есть несколько веб-слоев, и я хочу скрыть все полигоны, которые пересекаются с данной геометрией / другим слоем.

Я фильтрую эти пересекающиеся полигоны, используя пространственный запрос, но тогда я не знаю, какчтобы скрыть их.Я думал, что может манипулировать рендерером результирующих полигонов, что-то вроде: hide (), opacity = 0, visible = false ... Это правильный подход, или мне нужно сначала запросить полигоны, которые не пересекаются, а затем добавить результаты вновый слой и рендер только их?В таком случае что должно быть query.spatialRelationship?

Вот мой запрос:

    view.whenLayerView(layer).then(function(layerView){
       var query = layer.createQuery();
       query.geometry = new Extent({ 
         xmin: 6902682.7633,
         ymin: -3519872.5095,
         xmax: 11221869.7958,
         ymax: -2276864.0272,
         spatialReference: 102100
       });
       query.spatialRelationship = "intersects";    

       layer.queryFeatures(query).then(function(results){
         for (var index in results.features) { 
           //hide as manipulate its rendering    
         }    
        // or something like layerView.highlight(results.features)    
       })
    });

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы можете изменить видимое свойство графики на false

view.whenLayerView(layer).then(function(layerView){
   var query = layer.createQuery();
   query.geometry = new Extent({ 
     xmin: 6902682.7633,
     ymin: -3519872.5095,
     xmax: 11221869.7958,
     ymax: -2276864.0272,
     spatialReference: 102100
   });
   query.spatialRelationship = "intersects";    

   layer.queryFeatures(query).then(function(results){
     for (var index in results.features) { 
       results.features[index].visible = false;  
     }    
    // or something like layerView.highlight(results.features)    
   })
});
0 голосов
/ 01 февраля 2019

Если вы вообще не хотите отображать объекты, вы можете использовать QueryTask для извлечения только тех объектов, которые пересекают экстент из MapService.Затем вы можете создать FeatureLayer с результатами.

require(["esri/tasks/QueryTask", "esri/tasks/support/Query", "esri/geometry/Extent", "esri/layers/FeatureLayer"], function(QueryTask, Query, Extent, FeatureLayer){
  var layerUrl = " ... "; // Represents the REST endpoint for your layer
  var queryTask = new QueryTask({
    url: layerUrl 
  });
  var query = new Query();
  query.returnGeometry = true;
  query.outFields = ["*"];
  query.geometry = new Extent({ 
     xmin: 6902682.7633,
     ymin: -3519872.5095,
     xmax: 11221869.7958,
     ymax: -2276864.0272,
     spatialReference: 102100
  });
  query.spatialRelationship = "intersects";

  // When resolved, create the featureLayer with the results
  queryTask.execute(query).then(function(results){
    var layer = new FeatureLayer({
      source: results.features
    });
  });
});

Этот ответ может быть лучшим с точки зрения производительности, поскольку пересечение выполняется на стороне сервера и клиенту не нужно загружать функциикоторые не нужны.

...