Arcgis Javascript那些事儿(十一)--网络分析服务使用
来源:互联网 发布:论文检测软件免费 编辑:程序博客网 时间:2024/06/04 18:55
上一篇文章写了如何使用arcmap发布网络分析服务,发布的最后就是使用,下面就讲讲网络分析服务在arcgis javascript中的使用。
网络分析服务包括:最优路径分析,最近设施点分析,服务区分析等==
这里使用最优路径举例子,这里参考了木匠同学的例子,把框架直接拿了来,然后在此基础上进行了一些完善。
一、主要思路:
1、添加stop点,添加barrier点;
2、调用最优路径分析服务;
3、显示返回路径,添加起始点到路网和终止点到路网的polyline;
二、效果如下图:
三、代码如下
<!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" type="text/css" href="http://localhost/arcgis_js_api/library/3.17/3.17/dijit/themes/tundra/tundra.css"/> <link rel="stylesheet" type="text/css" href="http://localhost/arcgis_js_api/library/3.17/3.17/esri/css/esri.css" /> <script type="text/Javascript" src="http://localhost/arcgis_js_api/library/3.17/3.17/init.js"></script> <style type="text/css"> .MapClass{ width:100%; height:600px; border:1px solid #000; } </style> <script type="text/javascript"> require([ "esri/layers/ArcGISTiledMapServiceLayer", "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", "esri/geometry/Point", "esri/geometry/Polyline", "esri/geometry/Polygon", "dojo/domReady!"], function (ArcGISTiledMapServiceLayer,Map,on,dom, ArcGISDynamicMapServiceLayer, RouteTask, FeatureSet, SimpleMarkerSymbol, TextSymbol, Draw, SimpleLineSymbol, RouteParameters, Color, Graphic, Point, Polyline, Polygon ) { var map = new Map("MyMapDiv"); var layer = new ArcGISTiledMapServiceLayer("http://localhost:6080/arcgis/rest/services/mynerwork/MapServer"); //var layer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/mynerwork/MapServer"); map.addLayer(layer); //创建路径分析对象 var shortestAnalyst = new RouteTask("http://localhost:6080/arcgis/rest/services/myns/NAServer/Route"); //创建路径参数对象 var routeParas = new RouteParameters(); //障碍点,但是此时障碍点为空 routeParas.barriers = new FeatureSet(); //停靠点,但是此时停靠点为空 routeParas.stops = new FeatureSet(); //路径是否有方向 routeParas.returnDirections = true; //是否返回路径,此处必须返回 routeParas.returnRoutes = true; //空间参考 routeParas.outSpatialReference = map.SpatialReference; //定义一个标志 //selectPointID=0什么都不做 //selectPointID=1说明是添加停靠点 //selectPointID=2说明是添加障碍点 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_CIRCLE; stopSymbol.setSize(8); stopSymbol.setColor(new Color("#FFFFCC")); //定义障碍点的符号 var barrierSymbol = new SimpleMarkerSymbol(); barrierSymbol.style = SimpleMarkerSymbol.STYLE_CIRCLE; barrierSymbol.setSize(8); barrierSymbol.setColor(new Color("#f1a340")); on(map, "mouse-down", function(evt){ //通过selectPointID判断是添加是停靠点还是障碍点 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; } //如果selectPointID不等于0,将点的坐标在地图上显示出来 if (selectPointID != 0) { addTextPoint("经过点", pointStop, stopSymbol); addTextPoint("障碍点", pointBarrier, barrierSymbol); selectPointID = 0; } }); //文本符号:文本信息,点坐标,符号 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(){ //如果障碍点或者停靠点的个数有一个为0,提示用户参数输入不对 if (routeParas.stops.features.length == 0 ) { alert("输入参数不全,无法分析"); return; } //执行路径分析函数 shortestAnalyst.solve(routeParas, showRoute) }); //处理路径分析返回的结果。 function showRoute(solveResult) { //路径分析的结果 var routeResults = solveResult.routeResults; //路径分析的长度 var res = routeResults.length; //路径的符号 routeSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASH, new Color([255, 0, 0]), 3); if (res > 0) { var lineSymbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,255,255,0.5]),3); var startPoint=routeParas.stops.features[0]; var endPoint=routeParas.stops.features[routeParas.stops.features.length-1]; //起始线 var points=solveResult.routeResults[0].route.geometry.paths[0]; var tempPoint=points[0]; var p1 = new Point(tempPoint[0], tempPoint[1], map.spatialReference); var startLine = new Polyline(map.spatialReference); startLine.addPath([startPoint.geometry,p1]); //终止线 tempPoint=points[points.length-1]; var p2 = new Point(tempPoint[0], tempPoint[1], map.spatialReference); var endLine = new Polyline(map.spatialReference); endLine.addPath([endPoint.geometry,p2]); map.graphics.add(new Graphic(startLine, lineSymbol)); map.graphics.add(new Graphic(endLine, lineSymbol)); //geometry // map.graphics.add(); for (var i = 0; i < res; i++) { var graphicroute = routeResults[i]; var graphic = graphicroute.route; graphic.setSymbol(routeSymbol); map.graphics.add(graphic); } } else { alert("没有返回结果"); } } }); </script></head><body><div id="MyMapDiv" class="MapClass"></div><input id="stop" type="button" value="经过点" /><input id="barriers" type="button" value="障碍点" /><input id="analyse" type="button" value="分析" /></body></html>
到此网络分析阶段性告一段落,进军下一个难题==欢迎大家斧正
0 0
- Arcgis Javascript那些事儿(十一)--网络分析服务使用
- Arcgis Javascript那些事儿(十)--发布网络分析服务
- Arcgis javascript那些事儿(十五)——影像服务的发布与使用
- Arcgis javascript那些事儿(十六)——GP服务的发布与使用
- Arcgis javascript那些事儿(十七)——地理编码服务的发布与使用
- Arcgis Javascript那些事儿(一)--Arcgis server发布feature access服务
- Arcgis Javascript那些事儿(四)--feature access服务编辑feature本质
- Arcgis Javascript那些事儿(十二)——geometry service几何服务
- Arcgis Javascript那些事儿(二)--要素画图编辑
- Arcgis Javascript那些事儿(七)--AMD详解
- Arcgis Javascript那些事儿(九)--自定义infowindow
- Arcgis javascript那些事儿(十四)——连接oracle
- Arcgis Javascript那些事儿(三)---arcgis sever服务器注册关于数据拷贝问题
- Arcgis Javascript那些事儿(五)--arcgis server发布自定义比例尺地图
- Arcgis Javascript那些事儿(六)--arcgis js API本地环境配置
- (十一)ArcGIS Server之扩展几何网络分析
- ArcGIS网络分析之发布网络分析服务(二)
- ArcGIS网络分析之发布网络分析服务(二)
- init initwithframe
- macbook无法实现hello world的一些答案
- 如何让前端显示更快
- 【BZOJ3616】War,KD树+bitset压位
- BZOJ 3450: Tyvj1952 Easy 期望DP
- Arcgis Javascript那些事儿(十一)--网络分析服务使用
- wordpress上传图片按时间重命名
- UOJ 164 线段树历史最值
- 给body加上border属性后border为什么会变大(算上了margin)?
- Best Sequence poj1699(dfs)
- problem --CF 603K ----------Indivisibility
- 伺服电机与编码器
- ScrollView自定义水平滑动事件
- linux进程的状态