如果您根本不想显示这些功能,可以使用 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 }); }); });
从性能观点来看,这个答案可能是最好的,因为交叉点是在服务器端进行的,客户端不必下载不需要的功能。
您可以将图形的visible属性更改为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) }) });