根据下面的描述,给出完整代码和解释:实现一个流程发起功能,使用Arcgis Api for js加载天地图矢量地图,添加楼幢面FeatureLayer,通过sketch划分范围,将范围内的楼幢分配给指定调查员,只有被指定的调查员能够点击楼幢面并发起流程
时间: 2024-04-07 15:31:30 浏览: 97
以下是实现流程发起功能的代码和解释:
```javascript
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/widgets/Sketch",
"esri/tasks/support/Query",
"esri/tasks/QueryTask",
"dojo/domReady!"
], function(Map, MapView, FeatureLayer, Sketch, Query, QueryTask) {
// 创建地图和视图
var map = new Map({
basemap: "tdtVecBasic"
});
var view = new MapView({
container: "viewDiv",
map: map,
center: [120.14, 30.28],
zoom: 14
});
// 添加楼幢面FeatureLayer
var buildingLayer = new FeatureLayer({
url: "http://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/Building_Footprints/FeatureServer/0"
});
map.add(buildingLayer);
// 初始化sketch绘图工具
var sketch = new Sketch({
view: view,
layer: buildingLayer,
creationMode: "update"
});
view.ui.add(sketch, "top-right");
// 查询被划分范围内的楼幢
function queryBuildings(geometry) {
var query = new Query({
geometry: geometry,
outFields: ["*"],
returnGeometry: true
});
var queryTask = new QueryTask({
url: "http://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/Building_Footprints/FeatureServer/0"
});
queryTask.execute(query).then(function(result) {
// 分配给指定调查员的楼幢
var assignedBuildingIds = [1, 2, 3]; // 假设这里是指定调查员能够点击的楼幢的id集合
result.features.forEach(function(feature) {
if (assignedBuildingIds.indexOf(feature.attributes.OBJECTID) !== -1) {
// 只给指定调查员添加可点击的popup
feature.popupTemplate = {
title: "流程发起",
content: "<button onclick='startFlow()'>发起流程</button>"
};
}
});
// 将查询结果添加到地图中
buildingLayer.source.removeAll();
buildingLayer.source.add(result.features);
});
}
// 开始绘制
sketch.on("create", function(event) {
if (event.state === "complete") {
// 查询被划分范围内的楼幢
queryBuildings(event.graphic.geometry);
}
});
// 流程发起函数
function startFlow() {
// 在这里实现发起流程的功能
console.log("发起流程");
}
});
```
上述代码实现了以下功能:
1. 加载天地图矢量地图;
2. 添加楼幢面FeatureLayer;
3. 初始化sketch绘图工具,用于划分范围;
4. 查询被划分范围内的楼幢,并将范围内的楼幢分配给指定调查员;
5. 只有被指定的调查员能够点击楼幢面并发起流程。
具体实现细节如下:
1. 创建地图和视图,使用天地图矢量地图作为底图;
2. 创建楼幢面FeatureLayer,使用Arcgis Online的Building_Footprints服务;
3. 初始化sketch绘图工具,并将其添加到视图中;
4. 监听sketch的create事件,在绘制完成后查询被划分范围内的楼幢;
5. 查询被划分范围内的楼幢,并将范围内的楼幢分配给指定调查员,这里假设指定调查员能够点击的楼幢的id集合为[1,2,3];
6. 遍历查询结果中的每个楼幢,如果其id在指定调查员能够点击的楼幢的id集合中,则为其添加可点击的popup;
7. 将查询结果添加到楼幢面FeatureLayer中;
8. 实现流程发起函数startFlow(),在popup中添加一个按钮,点击时调用该函数;
9. 在startFlow()函数中实现发起流程的功能,这里只是简单地在控制台输出一条信息。
阅读全文