分析---网络分析(最短路径)附完整代码

1.效果图

分析经过停靠点,避开障碍点之间的最优路径

2.发布服务

在ArcMap中进行网络分析制图后需要发布地图服务才可以被调用。

  • 为了以后方便,全选择
    在这里插入图片描述
  • 打开工具条,进行新建路径等,结束制图后进行服务发布
    在这里插入图片描述

发布服务时,需要增加Network Analysis功能
在这里插入图片描述

  • 成功发布之后进入http://localhost:6080/arcgis/rest/services找到存放目录

    这样说明服务发布成功了
  • 选择(NAServer)后缀的链接,复制URL
  1. 创建好之后
  2. 新建路径
  3. 新建的路径图层名称
  • 创建路径分析对象的时候参数为URL+/图层名称
  • 例如:http://localhost:6080/arcgis/rest/services/webgis/fzkt_streets_ND/NAServer/路径
2.引入模块
			"esri/tasks/RouteTask",
            "esri/tasks/FeatureSet",
3.分析
  1. 定义

    • 停靠点符号
    • 障碍点符号
    • 文本符号
    • 路径符号
  2. 网络分析

    • 创建路径分析对象
    • 创建路径分析参数对象
    • 设置分析参数参考坐标系
    • 设置分析参数对象的障碍点和停靠点属性实例化要素集
    • 设置分析参数返回无方向
    • 设置分析参数返回路径
      在这里插入图片描述
  3. 事件

    • 添加停靠点的点击事件
    • 添加障碍点的点击事件
    • 添加地图的mouse-down监听事件
    • 添加分析的点击事件
  4. 函数

    • 添加简单图形符号函数
    • 添加文本符号函数
    • 路径分析返回结果处理函数
4. 完整代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Geometric _Network</title>
    <link rel="stylesheet" href="https://js.arcgis.com/3.28/esri/css/esri.css" />
    <script src="https://js.arcgis.com/3.28/"></script>
    <style type="text/css">
        .MapClass {
            width: 100%;
            height: 600px;
            border: 1px solid #000;
        }
    </style>
    <script type="text/javascript">

        require(["esri/map",
            "dojo/on",
            "dojo/dom",
            "esri/layers/ArcGISDynamicMapServiceLayer",
            "esri/tasks/RouteTask",
            "esri/tasks/FeatureSet",
            "esri/symbols/SimpleMarkerSymbol",
            "esri/symbols/TextSymbol",
            "esri/toolbars/draw",
            "esri/symbols/SimpleLineSymbol",
            "esri/tasks/RouteParameters",
            "dojo/colors",
            "esri/graphic",
            "dojo/domReady!"],
            function (Map, on, dom,
                ArcGISDynamicMapServiceLayer,
                RouteTask,
                FeatureSet,
                SimpleMarkerSymbol,
                TextSymbol,
                Draw,
                SimpleLineSymbol,
                RouteParameters,
                Color,
                Graphic
            ) {
                var map = new Map("MyMapDiv");
                var layer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/webgis/fzkt_streets_ND/MapServer");
                map.addLayer(layer)
                //创建路径分析对象
                var shortestAnalyst = new RouteTask("http://localhost:6080/arcgis/rest/services/webgis/fzkt_streets_ND/NAServer/路径");
                //创建路径参数对象
                var routeParas = new RouteParameters();
                //障碍点
                routeParas.barriers = new FeatureSet();
                //停靠点
                routeParas.stops = new FeatureSet();
                routeParas.returnDirections = false;
                routeParas.returnRoutes = true;
                //空间参考
                routeParas.outSpatialReference = map.SpatialReference;
                var selectPointID;
                on(dom.byId("stop"), "click", function () {
                    selectPointID = 1;
                })
                on(dom.byId("barriers"), "click", function () {
                    selectPointID = 2;
                })
                //停靠点的符号
                var stopSymbol = new SimpleMarkerSymbol();
                stopSymbol.style = SimpleMarkerSymbol.STYLE_CROSS;
                stopSymbol.setSize(15);
                //障碍点的符号
                var barrierSymbol = new SimpleMarkerSymbol();
                barrierSymbol.style = SimpleMarkerSymbol.STYLE_CIRCLE;
                barrierSymbol.setSize(14);
                barrierSymbol.setColor(new Color("#f1a340"));

                on(map, "mouse-down", function (evt) {
                    switch (selectPointID) {
                        case 0:
                            break;
                        case 1:
                            var pointStop = evt.mapPoint;
                            var gr = new Graphic(pointStop, stopSymbol);
                            routeParas.stops.features.push(gr);
                            break;
                        case 2:
                            var pointBarrier = evt.mapPoint;
                            var gr = new Graphic(pointBarrier, barrierSymbol);
                            routeParas.barriers.features.push(gr);
                            break;
                    }
                    if (selectPointID != 0) {
                        addPoint(pointStop, stopSymbol)
                        addTextPoint("障碍点", pointBarrier, barrierSymbol);
                        selectPointID = 0;
                    }
                });
                //单一
                function addPoint(point, symbol) {
                    var graphicpoint = new Graphic(point, symbol);
                    map.graphics.add(graphicpoint);
                }
                //文本
                function addTextPoint(text, point, symbol) {
                    var textSymbol = new TextSymbol(text);
                    textSymbol.setColor(new Color([128, 0, 0]));
                    var graphicText = Graphic(point, textSymbol);
                    var graphicpoint = new Graphic(point, symbol);
                    map.graphics.add(graphicpoint);
                    map.graphics.add(graphicText);
                }
                on(dom.byId("analyse"), "click", function () {
                    if (routeParas.stops.features.length == 0) {
                        alert("ERROR");
                        return;
                    }
                    shortestAnalyst.solve(routeParas, showRoute)
                })
                //处理路径分析返回的结果。
                function showRoute(solveResult) {
                    console.log(solveResult)
                    var routeResults = solveResult.routeResults;
                    //路径分析的长度
                    var res = routeResults.length;
                    routeSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASH, new Color([0, 0, 255, 0.5]), 3);
                    if (res > 0) {
                        for (var i = 0; i < res; i++) {
                            var graphic = routeResults[i].route;
                            graphic.setSymbol(routeSymbol);
                            map.graphics.add(graphic);
                        }
                    }
                    else {
                        alert("Null");
                    }
                }
            });


    </script>
</head>

<body>
    <input id="stop" type="button" value="停靠点" />
    <input id="barriers" type="button" value="障碍点" />
    <input id="analyse" type="button" value="分析" />
    <div id="MyMapDiv" class="MapClass"></div>
</body>

</html>
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值