通過ArcGIS建模發佈成gp服務實現最近設施分析功能

一、最近設施分析

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>

二、結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章