实现多边形选择FeatureLayer中的要素,可以通过使用ArcGIS API for JavaScript中的GeometryEngine类来实现。具体步骤如下:
1. 定义多边形
首先,定义一个多边形,可以使用ArcGIS API for JavaScript中的Polygon类来创建。例如:
```javascript
var polygon = new Polygon({
"rings": [[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]],
"spatialReference": {
"wkid": 4326
}
});
```
这个多边形由五个点组成,可以通过rings属性设置。这里的空间参考系为4326。
2. 获取FeatureLayer
使用ArcGIS API for JavaScript中的FeatureLayer类获取要素图层。例如:
```javascript
var featureLayer = new FeatureLayer({
url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3"
});
```
这里获取的是Census地图服务中的第3个图层。
3. 查询要素
使用FeatureLayer类的queryFeatures方法查询要素。例如:
```javascript
var query = featureLayer.createQuery();
query.geometry = polygon;
query.spatialRelationship = "intersects";
featureLayer.queryFeatures(query).then(function(result) {
// 处理查询结果
});
```
这里的查询条件为多边形和图层的交集。
4. 高亮显示选中的要素
查询结果中包含了符合条件的要素,可以遍历这些要素,对它们进行高亮显示。例如:
```javascript
var features = result.features;
for (var i = 0; i < features.length; i++) {
var feature = features[i];
feature.symbol = new SimpleFillSymbol({
color: [255, 0, 0, 0.5],
style: "solid",
outline: {
color: [255, 0, 0],
width: 1
}
});
featureLayer.graphics.add(new Graphic(feature.geometry, feature.symbol));
}
```
这里使用SimpleFillSymbol类创建一个红色的填充符号,将选中的要素的符号设置为该填充符号,并将它们添加到图层上。
完整代码如下:
```javascript
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/geometry/Polygon",
"esri/geometry/geometryEngine",
"esri/symbols/SimpleFillSymbol",
"esri/Graphic"
], function(Map, MapView, FeatureLayer, Polygon, geometryEngine, SimpleFillSymbol, Graphic) {
var polygon = new Polygon({
"rings": [[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]],
"spatialReference": {
"wkid": 4326
}
});
var featureLayer = new FeatureLayer({
url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3"
});
var map = new Map({
basemap: "gray-vector",
layers: [featureLayer]
});
var view = new MapView({
container: "viewDiv",
map: map,
center: [-122.4194, 37.7749],
zoom: 12
});
view.when(function() {
var query = featureLayer.createQuery();
query.geometry = polygon;
query.spatialRelationship = "intersects";
featureLayer.queryFeatures(query).then(function(result) {
var features = result.features;
for (var i = 0; i < features.length; i++) {
var feature = features[i];
feature.symbol = new SimpleFillSymbol({
color: [255, 0, 0, 0.5],
style: "solid",
outline: {
color: [255, 0, 0],
width: 1
}
});
featureLayer.graphics.add(new Graphic(feature.geometry, feature.symbol));
}
});
});
});
```