发布最短路径NAService&&routetask调用服务

目录

 

路径分析

对path.shp的线要素,新建网络数据集

 连通性

新建路径 

最短路径服务发布

调用NAService服务


路径分析

注:本片文章只着重介绍发布最短路服务和调用服务,ArcGIS最短路分析只执行最简单的步骤,如【高级编辑→打断相交线】、【拓扑检查】等操作省略

对path.shp的线要素,新建网络数据集

 

扫描二维码关注公众号,回复: 12459934 查看本文章

 连通性

一直【下一步】,直到【连通性】,设置为“任意节点”

新建路径 

当然如果需求,也一并【新建服务区】、【新建最近设施】等

最短路径服务发布

 

在【功能】中选择Network Analysis

在ArcGIS Server(http://localhost:6080/arcgis/manager/ )中查看服务

http://localhost:6080/arcgis/rest/services在可以看到有两个服务

MapServer:地图服务

NAServer:网络数据集服务(这个解释也不知道对不对,反正是我们要的服务)

调用NAService服务

为什么MapServer服务和NAServer服务一起调用呢,是因为空间参考坐标要一致,这样对初学者来说简单。

当然可以只调用NAServer,这个NAServer也可在WebScene中调用,但是shp中的线不能用Z(高程)坐标

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>最优路径分析</title>
    <link rel="stylesheet" href="http://js.arcgis.com/3.9/js/esri/css/esri.css">
    <script src="http://js.arcgis.com/3.9/"></script>
   
</head>
<body class="claro">
    <button onclick="addStops()">增加站点</button>
    <button onclick="clearStops()">清除站点</button>
    <button onclick="addBarriers()">增加路障</button>
    <button onclick="clearBarriers()">清除路障</button>
    <button onclick="solveRoute()">路径分析</button>
    <button onclick="clearRoutes()">清除路径</button>

    <br /><br />
    <div id="map" style="width:600px; height:400px; border:1px solid #000;"></div>
    <ul>
        <li>单击“增加站点”按钮,然后在地图中点击,增加路径需要经过的站点。</li>
        <li>单击“增加路障”按钮,然后在地图中点击,增加路障</li>
        <li>单击“路径分析”按钮,进行路径分析</li>
    </ul>
</body>
</html>
<script>
    var map, routeTask, routeParams, routes = [];
    var stopSymbol, barrierSymbol, routeSymbol;
    var mapOnClick_addStops_connect = null, mapOnClick_addBarriers_connect = null;
    require(["esri/map", "esri/geometry/Extent", "esri/SpatialReference", "esri/layers/ArcGISTiledMapServiceLayer",
            "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", "esri/Color",
            "esri/tasks/RouteTask", "esri/tasks/RouteParameters", "esri/tasks/FeatureSet", "dojo/domReady!"],
        function (Map, Extent, SpatialReference, ArcGISTiledMapServiceLayer, SimpleMarkerSymbol, SimpleLineSymbol, Color,
                  RouteTask, RouteParameters, FeatureSet) {

            map = new Map("map", {
                center:[117.998926,36.812481],
            });
            var layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/path/MapServer");
            //var streetMap = new ArcGISTiledMapServiceLayer("http://localhost:6080/arcgis/rest/services/SampleWorldCities/MapServer");
            map.addLayer(layer);
//http://localhost:6080/arcgis/rest/services/%E6%9C%80%E7%9F%AD%E8%B7%AF/MapServer
            routeTask = new RouteTask("http://localhost:6080/arcgis/rest/services/path/NAServer/路径");
            routeParams = new RouteParameters();
            routeParams.stops = new FeatureSet();
            routeParams.barriers = new FeatureSet();

            stopSymbol = new SimpleMarkerSymbol().setStyle(SimpleMarkerSymbol.STYLE_CROSS).setSize(15);
            stopSymbol.outline.setWidth(3);

            barrierSymbol = new SimpleMarkerSymbol().setStyle(SimpleMarkerSymbol.STYLE_X).setSize(10);
            barrierSymbol.outline.setWidth(3).setColor(new Color([255, 0, 0]));

            routeSymbol = new SimpleLineSymbol().setColor(new Color([0, 0, 255, 0.5])).setWidth(5);
        });

    //Begins listening for click events to add stops
    function addStops() {
        removeEventHandlers();
        mapOnClick_addStops_connect = map.on("click", addStop);
    }

    //Clears all stops
    function clearStops() {
        removeEventHandlers();
        for (var i = routeParams.stops.features.length - 1; i >= 0; i--) {
            map.graphics.remove(routeParams.stops.features.splice(i, 1)[0]);
        }
    }

    //Adds a stop. The stop is associated with the route currently displayed in the dropdown
    function addStop(evt) {
        require(["esri/graphic"], function (Graphic) {
            var graphic = new Graphic(evt.mapPoint, stopSymbol);
            routeParams.stops.features.push(
                map.graphics.add(graphic)
            );
        });
    }

    //Begins listening for click events to add barriers
    function addBarriers() {
        removeEventHandlers();
        mapOnClick_addBarriers_connect = map.on("click", addBarrier);
    }

    //Clears all barriers
    function clearBarriers() {
        removeEventHandlers();
        for (var i = routeParams.barriers.features.length - 1; i >= 0; i--) {
            map.graphics.remove(routeParams.barriers.features.splice(i, 1)[0]);
        }
    }

    //Adds a barrier
    function addBarrier(evt) {
        require(["esri/graphic"], function (Graphic) {
            var graphic = new Graphic(evt.mapPoint, barrierSymbol);
            routeParams.barriers.features.push(
                map.graphics.add(graphic)
            );
        });
    }

    //Stops listening for click events to add barriers and stops
    function removeEventHandlers() {
        if (mapOnClick_addStops_connect != null) {
            mapOnClick_addStops_connect.remove();
        }
        if (mapOnClick_addBarriers_connect != null) {
            mapOnClick_addBarriers_connect.remove();
        }
    }

    //Solves the routes. Any errors will trigger the errorHandler function.
    function solveRoute() {
        removeEventHandlers();
        routeTask.solve(routeParams, showRoute, errorHandler);
    }

    //Clears all routes
    function clearRoutes() {
        for (var i = routes.length - 1; i >= 0; i--) {
            map.graphics.remove(routes.splice(i, 1)[0]);
        }
        routes = [];
    }

    //Draws the resulting routes on the map
    function showRoute(result) {
        clearRoutes();

        var routeResults = result.routeResults;
        routes.push(
            map.graphics.add(routeResults[0].route.setSymbol(routeSymbol))
        );

        var msgs = ["服务器消息:"];
        for (var i = 0; i < result.messages.length; i++) {
            msgs.push(result.messages[i].type + " : " + result.messages[i].description);
        }
        if (msgs.length > 1) {
            alert(msgs.join("\n - "));
        }
    }

    //Reports any errors that occurred during the solve
    function errorHandler(err) {
        alert("发生错误\n" + err.message + "\n" + err.details.join("\n"));
    }

</script>

猜你喜欢

转载自blog.csdn.net/qq_41664159/article/details/107002466