一、最近設施分析
1)構建最近設施圖層
2)添加設施要素類和事件圖層要素類
3)執行分析
建模如下:
發佈成gp服務
前端調用代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9, IE=10">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=yes">
<title>路徑導航</title>
<link href="../../../Htmllibs/arcgis_js_api/library/3.27/3.27/dijit/themes/nihilo/nihilo.css" rel="stylesheet" type="text/css" />
<link href="../../../Htmllibs/arcgis_js_api/library/3.27/3.27/esri/css/esri.css" rel="stylesheet" />
<script src="../../../Htmllibs/arcgis_js_api/library/3.27/3.27/init.js"></script>
<script src="../../../Htmllibs/jquery/jquery-1.12.2.min.js"></script>
</head>
<body class="claro">
<div id="map" style="width:100%; height:700px; border:1px solid #000;"></div>
<input id="eventPoint" type="button" style="position:absolute;top:5%;left:25%" value="事件點" />
<input id="analyse" type="button" style="position:absolute;top:5%;left:30%" value="最近設施分析" />
<input id="clear" type="button" value="清除" />
<script type="text/javascript">
require([
"esri/map",
"esri/layers/ArcGISTiledMapServiceLayer",
"esri/layers/ArcGISDynamicMapServiceLayer",
"esri/tasks/ClosestFacilityParameters",
"esri/tasks/ClosestFacilityTask",
"esri/tasks/ClosestFacilitySolveResult",
"esri/tasks/FeatureSet",
"esri/symbols/SimpleMarkerSymbol",
"esri/symbols/SimpleLineSymbol",
"esri/tasks/DataFile",
"esri/graphic",
"esri/tasks/Geoprocessor",
"esri/toolbars/draw",
"dojo/_base/Color"
],
function (Map, ArcGISTiledMapServiceLayer, ArcGISDynamicMapServiceLayer, ClosestFacilityParameters, ClosestFacilityTask, ClosestFacilitySolveResult, FeatureSet, SimpleMarkerSymbol, SimpleLineSymbol, DataFile, Graphic, Geoprocessor, Draw,Color) {
var map, closestFacilityTask, params;
var accidentSymbol, facilitySymbol, routeSymbol;
var selectPointID;
var resultLayer;
map = new Map("map", {
//basemap: "streets",
center: [116.728, 41.627], //long, lat
zoom: 14
});
var layer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/closestFacility1/MapServer");
map.addLayer(layer);
//添加最近設施點任務並設置參數
var gp = new Geoprocessor("http://localhost:6080/arcgis/rest/services/closetFaclity2/GPServer/closetFaclity");
//定義點幾何對象
var pointSet = new FeatureSet();
//新建簡單點符號,樣式爲十字交叉,顏色紅色,線寬2
var psymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CROSS, 20, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 2));
//將點對象存儲在點幾何中
$("#eventPoint").on("click", function (evt) {
//定義繪圖對象
var toolBar = new Draw(map, { showTooltips: true });
//激活繪圖對象
toolBar.activate(Draw.POINT);
toolBar.on("draw-complete", function (result) {
toolBar.deactivate(Draw.POINT);
//每次清除要素類
pointSet.features = [];
//每次清除地圖上的事件點
map.graphics.clear();
var geometry = result.geometry;
var graphic = new Graphic(geometry, psymbol);
pointSet.features.push(graphic);
map.graphics.add(graphic);
});
});
$("#analyse").on("click", function () {
//執行gp服務
executeGP();
})
function executeGP() {
var params = { "incident": pointSet};
gp.submitJob(params, jobResult);
}
function jobResult(result) {
var jobId = result.jobId;
var status = result.jobStatus;
//查看運行結果狀態
if (status === "esriJobSucceeded") {
//清除所有圖層
if (resultLayer != null) {
map.removeLayer(resultLayer);
}
console.log("正在生成臨近設施點路線!")
//獲取生成的動態服務圖層
resultLayer = gp.getResultImageLayer(jobId);
resultLayer.setOpacity(0.6);
var visible = [];
visible.push(4);//id爲動態地圖服務中的圖層id,如0,1,2,3,...,n圖層
resultLayer.setVisibleLayers(visible);
map.addLayer(resultLayer);
}
}
});
</script>
</body>
</html>
二、結果: