<!DOCTYPE html> <html>   <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   <!--The viewport meta tag is used to improve the presentation and behavior of the samples      on iOS devices-->   <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">   <title>Foggy Buffer Zone</title>    <link rel="stylesheet" href="http://js.arcgis.com/3.7/js/dojo/dijit/themes/claro/claro.css">   <link rel="stylesheet" href="http://js.arcgis.com/3.7/js/esri/css/esri.css">      <style>       html, body { height: 100%; width: 100%; margin: 0; padding: 0; }       #mapu { padding:0; }       #titlePane {         width:200px;         height:300px;       }       .claro .dijitTitlePaneTitle {         background: #A4BDA7;         font-weight:600;         color:#33292B;       }       .dijitButtonNode {         background-color: #A4BDA7 !important;         border: 1px solid #646750 !important;         color:#33292B !important;       }     </style>    <script src="http://js.arcgis.com/3.7/"></script>   <script>   require(["dojo/dom",           "dojo/dom-attr",           "dojo/_base/array",           "dojo/_base/Color",           "dojo/parser",            "esri/config",           "esri/map",           "esri/graphic",                "esri/tasks/GeometryService",           "esri/tasks/BufferParameters",                "esri/toolbars/draw",                "esri/symbols/SimpleMarkerSymbol",           "esri/symbols/SimpleLineSymbol",           "esri/symbols/SimpleFillSymbol",                      "dijit/layout/BorderContainer",           "dijit/layout/ContentPane",     "dijit/TitlePane"     ],          function(dom, domAttr, array, Color, parser, esriConfig, Map,   Graphic, GeometryService, BufferParameters, Draw, SimpleMarkerSymbol,   SimpleLineSymbol, SimpleFillSymbol)    {       var map, geo, tb;           parser.parse();          map = new Map("map", {         basemap: "streets",         center: [54.407, 24.462],         zoom: 13,       });      esriConfig.defaults.io.proxyUrl = "/proxy";     esriConfig.defaults.io.alwaysUseProxy = false;       geo = new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");        map.on("load", initToolbar);    /*   **  Initialize the drawing toolbar  */  function initToolbar(evtObj) {       app.tb = new Draw(evtObj.map);       app.tb.on("draw-end", drawPoint);     }   // Array where points are saved  var list = new Array();    /*     ** Draw point  */  function drawPoint(evtObj) {        // Get the click geometry     var geometry = evtObj.geometry;           // Point symbol       var symbol = new SimpleMarkerSymbol(    {     "angle":0,         "xoffset":0,         "yoffset":12,         "type":"esriPMS",         "url":"http://www.iconexperience.com/_img/v_collection_png/512x512/shadow/cloud.png",         "contentType":"image/png",         "width":24,         "height":24         }    );        // Add point to the map       var graphic = new Graphic(geometry, symbol);       app.map.graphics.add(graphic);     // Store the point geometry    list.push(geometry)  }    /*     **  Create the polygon around points  */  function drawEndHandler(){         app.tb.deactivate();            geo.convexHull(list,function(result){             var symbol;             switch(result.type){               case "point":                 symbol = new esri.symbol.SimpleMarkerSymbol();                 break;               case "polyline":                 symbol = new esri.symbol.SimpleLineSymbol();                 break;               case "polygon":                 symbol = new esri.symbol.SimpleFillSymbol();                 break;             }             map.graphics.add(new esri.Graphic(result,symbol));           },function(error){             console.log("An error occured during convex hull calculation");           });             }       app = {       map: map,       tb: tb,       geo: geo,     drawPolygon: drawEndHandler     };   });       function drawClick(){  app.drawPolygon();   }      /*   ** Click on Point button   */   function pointClick(){     app.tb.activate(esri.toolbars.Draw.POINT);  app.map.hideZoomSlider();   }      /*   ** Click on Clear Graphics button   */   function clearGraphicsClick(){     app.map.graphics.clear();   }   </script>  </head>  <body class="claro">   <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="gutters:'false',design:'headline'" style="width: 100%; height: 100%;">       <div id="map" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'"  style="overflow:hidden;">       <div style="position:absolute; right:20px; top:10px; z-Index:999;">         <div id="titlePane" data-dojo-type="dijit.TitlePane" data-dojo-props="title:'Fog Warning System', closable:'false', open:'true'">             <p style="padding:5px 2px;color:#33292B;">Add foggy point and create the polygon.</p>    <button data-dojo-type="dijit.form.Button" onclick="pointClick();">Report Fog</button>      <button data-dojo-type="dijit.form.Button" type="button" onclick="clearGraphicsClick();">Clear</button>    <button id="point" data-dojo-type="dijit.form.Button" type="button" onclick="drawClick();">Draw The Foggy Zone</button>                      </div>       </div>       </div>     </div>     </body> </html>
					
				
			
			
				
			
			
				Solved! Go to Solution.
<!DOCTYPE html> <html>   <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">     <!--The viewport meta tag is used to improve the presentation and behavior of the samples        on iOS devices-->     <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">     <title>Multiple Routes</title>      <link rel="stylesheet" href="http://js.arcgis.com/3.8/js/dojo/dijit/themes/claro/claro.css">     <link rel="stylesheet" href="http://js.arcgis.com/3.8/js/esri/css/esri.css">          <script src="http://js.arcgis.com/3.8/"></script>     <script>       dojo.require("esri.map");       dojo.require("esri.tasks.route");       dojo.require("esri.toolbars.draw");       dojo.require("esri.tasks.geometry");       dojo.require("esri.toolbars.draw")        // Changed by pepatosp       var map, Draw, routeTask, routeParams, routes = [];       var drawToolbar;       // end of changes       var stopSymbol, barrierSymbol, polygonBarrierSymbol, routeSymbols;       var mapOnClick_addStops_connect, mapOnClick_addBarriers_connect, mapOnClick_addPolygonBarriers_connect;        function init() {         esri.config.defaults.io.proxyUrl = "/proxy";                  esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");          map = new esri.Map("map", {           basemap: "streets",           center: [-122.416, 37.802],           zoom: 15         });          // Initialize the toolbar // changed by pepatosp         function createToolBar() {           drawToolbar = new esri.toolbars.Draw(map);           drawToolbar.on("draw-end", addToMap);         }          function activateTool() {           drawToolbar.activate(esri.toolbars.Draw.POLYGON);           map.hideZoomSlider();         }          function addToMap(evt) {           drawToolbar.deactivate();           routeParams.polygonBarriers.features.push(             map.graphics.add(new esri.Graphic(evt.geometry, polygonBarrierSymbol))           );         }          map.on("load", createToolBar);          var node = dojo.byId("addPolygons");          dojo.connect(node, "click", activateTool);           routeTask = new esri.tasks.RouteTask("http://tasks.arcgisonline.com/ArcGIS/rest/services/NetworkAnalysis/ESRI_Route_NA/NAServer/Route");         routeParams = new esri.tasks.RouteParameters();         routeParams.stops = new esri.tasks.FeatureSet();         routeParams.barriers = new esri.tasks.FeatureSet();         routeParams.polygonBarriers = new esri.tasks.FeatureSet();         routeParams.outSpatialReference = {"wkid":102100};         dojo.connect(routeTask, "onSolveComplete", showRoute);         dojo.connect(routeTask, "onError", errorHandler);          stopSymbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_CROSS).setSize(15);         stopSymbol.outline.setWidth(3);          barrierSymbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_X).setSize(10);         barrierSymbol.outline.setWidth(3).setColor(new dojo.Color([255,0,0]));                  var polygonBarrierSymbol = new esri.symbol.SimpleFillSymbol();          routeSymbols = {           "Route 1": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([0,0,255,0.5])).setWidth(5),           "Route 2": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([0,255,0,0.5])).setWidth(5),           "Route 3": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([255,0,255,0.5])).setWidth(5)         };       }        dojo.ready(init);        //Begins listening for click events to add stops       function addStops() {         removeEventHandlers();         mapOnClick_addStops_connect = dojo.connect(map, "onClick", 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) {         routeParams.stops.features.push(           map.graphics.add(             new esri.Graphic(               evt.mapPoint,               stopSymbol,               { RouteName:dojo.byId("routeName").value }             )           )         );       }            //Begins listening for click events to add Polygon Barriers        function addPolygonBarriers() {         removeEventHandlers();         mapOnClick_addPolygonBarriers_connect = dojo.connect(map, "onClick", addPolygonBarrier);       }            //Clears all Polygon Barriers       function clearPolygonBarriers() {         removeEventHandlers();         for (var i=routeParams.polygonBarriers.features.length-1; i>=0; i--) {           map.graphics.remove(routeParams.polygonBarriers.features.splice(i, 1)[0]);         }       }            //Adds a Polygon Barrier.       function addPolygonBarrier(evt) {         drawToolbar.activate(esri.toolbars.Draw.POLYGON);         var drawEnd_connect = dojo.connect(drawToolbar, "onDrawEnd", function(geometry) {           routeParams.polygonBarriers.features.push(             map.graphics.add(new esri.Graphic(geometry, polygonBarrierSymbol))           );         });       }        //Begins listening for click events to add barriers       function addBarriers() {         removeEventHandlers();         mapOnClick_addBarriers_connect = dojo.connect(map, "onClick", 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) {         routeParams.barriers.features.push(           map.graphics.add(             new esri.Graphic(               evt.mapPoint,               barrierSymbol             )           )         );       }        //Stops listening for click events to add Polygon Barriers, barriers and stops       function removeEventHandlers() {         dojo.disconnect(mapOnClick_addStops_connect);         dojo.disconnect(mapOnClick_addBarriers_connect);         dojo.disconnect(mapOnClick_addPolygonBarriers_connect);       }        //Solves the routes. Any errors will trigger the errorHandler function.       function solveRoute() {         removeEventHandlers();         routeTask.solve(routeParams);       }        //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(solveResult) {         clearRoutes();          dojo.forEach(solveResult.routeResults, function(routeResult, i) {           routes.push(             map.graphics.add(               routeResult.route.setSymbol(routeSymbols[routeResult.routeName])             )           );         });          var msgs = ["Server messages:"];         dojo.forEach(solveResult.messages, function(message) {           msgs.push(message.type + " : " + message.description);         });         if (msgs.length > 1) {           alert(msgs.join("\n - "));         }       }        //Reports any errors that occurred during the solve       function errorHandler(err) {         alert("An error occured\n" + err.message + "\n" + err.details.join("\n"));       }     </script>    </head>   <body class="claro">      Select route name: <select id="routeName">       <option value="Route 1">Route 1</option>        <option value="Route 2">Route 2</option>       <option value="Route 3">Route 3</option>     </select> to      <button onclick="addStops();">Add Stops</button>     <button onclick="clearStops();">Clear Stops</button>     <button onclick="addBarriers();">Add Barriers</button>     <button onclick="clearBarriers();">Clear Barriers</button>     <!-- changed by pepatosp     <button onclick="addPolygonBarriers();">Add PolyBarriers</button>     -->     <button id="addPolygons">Add PolyBarriers</button>     <button onclick="clearPolygonBarriers();">Clear PolyBarriers</button>     <button onclick="solveRoute();">Solve Routes</button>     <button onclick="clearRoutes();">Clear Routes</button>      <br /><br />     <div id="map" style="width:600px; height:400px; border:1px solid #000;"></div>      <ol>       <li>Select a route name from the drop down.</li>       <li>Click 'Add stops', then click on map to add stops to route.</li>        <li>Click the 'Add Barriers', then click on map to add barriers.</li>       <li>Optionally, repeat the above steps to add more routes.</li>       <li>Click the 'Solve Routes' to solve.</li>     </ul>     <p>Any server error messages will be displayed in an alert box.</p>   </body> </html>Good Morning,
I am developing a GIS Web app using JavaScript, now i have the possibility to edit points in the Map and click on a button to have the polygon.
What i should do now is to ad two other button one for add stops and the other to solve road, and i should consider the polygon as a barrier so when i click on solve road the app should give me a road between the two stops and avoid the polygon already created
Below the code of creating the polygon (Need help on the second part please):<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!--The viewport meta tag is used to improve the presentation and behavior of the samples on iOS devices--> <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"> <title>Foggy Buffer Zone</title> <link rel="stylesheet" href="http://js.arcgis.com/3.7/js/dojo/dijit/themes/claro/claro.css"> <link rel="stylesheet" href="http://js.arcgis.com/3.7/js/esri/css/esri.css"> <style> html, body { height: 100%; width: 100%; margin: 0; padding: 0; } #mapu { padding:0; } #titlePane { width:200px; height:300px; } .claro .dijitTitlePaneTitle { background: #A4BDA7; font-weight:600; color:#33292B; } .dijitButtonNode { background-color: #A4BDA7 !important; border: 1px solid #646750 !important; color:#33292B !important; } </style> <script src="http://js.arcgis.com/3.7/"></script> <script> require(["dojo/dom", "dojo/dom-attr", "dojo/_base/array", "dojo/_base/Color", "dojo/parser", "esri/config", "esri/map", "esri/graphic", "esri/tasks/GeometryService", "esri/tasks/BufferParameters", "esri/toolbars/draw", "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", "esri/symbols/SimpleFillSymbol", "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dijit/TitlePane" ], function(dom, domAttr, array, Color, parser, esriConfig, Map, Graphic, GeometryService, BufferParameters, Draw, SimpleMarkerSymbol, SimpleLineSymbol, SimpleFillSymbol) { var map, geo, tb; parser.parse(); map = new Map("map", { basemap: "streets", center: [54.407, 24.462], zoom: 13, }); esriConfig.defaults.io.proxyUrl = "/proxy"; esriConfig.defaults.io.alwaysUseProxy = false; geo = new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"); map.on("load", initToolbar); /* ** Initialize the drawing toolbar */ function initToolbar(evtObj) { app.tb = new Draw(evtObj.map); app.tb.on("draw-end", drawPoint); } // Array where points are saved var list = new Array(); /* ** Draw point */ function drawPoint(evtObj) { // Get the click geometry var geometry = evtObj.geometry; // Point symbol var symbol = new SimpleMarkerSymbol( { "angle":0, "xoffset":0, "yoffset":12, "type":"esriPMS", "url":"http://www.iconexperience.com/_img/v_collection_png/512x512/shadow/cloud.png", "contentType":"image/png", "width":24, "height":24 } ); // Add point to the map var graphic = new Graphic(geometry, symbol); app.map.graphics.add(graphic); // Store the point geometry list.push(geometry) } /* ** Create the polygon around points */ function drawEndHandler(){ app.tb.deactivate(); geo.convexHull(list,function(result){ var symbol; switch(result.type){ case "point": symbol = new esri.symbol.SimpleMarkerSymbol(); break; case "polyline": symbol = new esri.symbol.SimpleLineSymbol(); break; case "polygon": symbol = new esri.symbol.SimpleFillSymbol(); break; } map.graphics.add(new esri.Graphic(result,symbol)); },function(error){ console.log("An error occured during convex hull calculation"); }); } app = { map: map, tb: tb, geo: geo, drawPolygon: drawEndHandler }; }); function drawClick(){ app.drawPolygon(); } /* ** Click on Point button */ function pointClick(){ app.tb.activate(esri.toolbars.Draw.POINT); app.map.hideZoomSlider(); } /* ** Click on Clear Graphics button */ function clearGraphicsClick(){ app.map.graphics.clear(); } </script> </head> <body class="claro"> <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="gutters:'false',design:'headline'" style="width: 100%; height: 100%;"> <div id="map" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'" style="overflow:hidden;"> <div style="position:absolute; right:20px; top:10px; z-Index:999;"> <div id="titlePane" data-dojo-type="dijit.TitlePane" data-dojo-props="title:'Fog Warning System', closable:'false', open:'true'"> <p style="padding:5px 2px;color:#33292B;">Add foggy point and create the polygon.</p> <button data-dojo-type="dijit.form.Button" onclick="pointClick();">Report Fog</button> <button data-dojo-type="dijit.form.Button" type="button" onclick="clearGraphicsClick();">Clear</button> <button id="point" data-dojo-type="dijit.form.Button" type="button" onclick="drawClick();">Draw The Foggy Zone</button> </div> </div> </div> </div> </body> </html>
require([
  "esri/map", "esri/tasks/RouteParameters", "esri/tasks/FeatureSet", "esri/symbols/SimpleFillSymbol",
  "esri/toolbars/Draw", "dojo/_base/connect", "esri/graphic", "esri/tasks/DataFile", ... 
], function(Map, FeatureSet, SimpleFillSymbol, Draw, connect, Graphic, DataFile, ... ) {
  var map = new Map( ... );
  var routeParams = new RouteParameters();
  routeParams.polygonBarriers = new FeatureSet();
  //Create a symbol for the barriers
  var polygonBarrierSymbol = new SimpleFillSymbol();
  //Use the draw toolbar to generate polygons to add as barriers.
  drawToolbar.activate(Draw.POLYGON);
  var drawEnd_connect = connect.connect(drawToolbar, "onDrawEnd", function(geometry) {
    routeParams.polygonBarriers.features.push(
    map.graphics.add(new Graphic(geometry, polygonBarrierSymbol))
  );
  //Requires ArcGIS Server 10.1 or greater
  var networkServiceUrl = 'http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Network/USA/MapServer/';
  routeParams.polygonBarriers = new DataFile({
    url: networkServiceUrl + "/7/query?where=1%3D1&outFields=Name,RouteName&f=json"}
  );
  ...
});
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		Good Morning,
Thanks you pepatosp for your feedback, could you please tell me how can i define the polygon already created before as a PolygonBarriers??
Thanks for your help 🙂
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <!--The viewport meta tag is used to improve the presentation and behavior of the samples 
      on iOS devices-->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Multiple Routes</title>
    <link rel="stylesheet" href="http://js.arcgis.com/3.8/js/dojo/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="http://js.arcgis.com/3.8/js/esri/css/esri.css">
    
    <script src="http://js.arcgis.com/3.8/"></script>
    <script>
      dojo.require("esri.map");
      dojo.require("esri.tasks.route");
      dojo.require("esri.toolbars.draw");
      dojo.require("esri.tasks.geometry");
      var map, Draw, drawToolbar, routeTask, routeParams, routes = [];
      var stopSymbol, barrierSymbol, polygonBarrierSymbol, routeSymbols;
      var mapOnClick_addStops_connect, mapOnClick_addBarriers_connect, mapOnClick_addPolygonBarriers_connect;
      function init() {
        esri.config.defaults.io.proxyUrl = "/proxy";
        
        esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
        map = new esri.Map("map", {
          basemap: "streets",
          center: [-122.416, 37.802],
          zoom: 15
        });
        routeTask = new esri.tasks.RouteTask("http://tasks.arcgisonline.com/ArcGIS/rest/services/NetworkAnalysis/ESRI_Route_NA/NAServer/Route");
        routeParams = new esri.tasks.RouteParameters();
        routeParams.stops = new esri.tasks.FeatureSet();
        routeParams.barriers = new esri.tasks.FeatureSet();
        routeParams.polygonBarriers = new esri.tasks.FeatureSet();
        routeParams.outSpatialReference = {"wkid":102100};
        dojo.connect(routeTask, "onSolveComplete", showRoute);
        dojo.connect(routeTask, "onError", errorHandler);
        stopSymbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_CROSS).setSize(15);
        stopSymbol.outline.setWidth(3);
        barrierSymbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_X).setSize(10);
        barrierSymbol.outline.setWidth(3).setColor(new dojo.Color([255,0,0]));
        
        var polygonBarrierSymbol = new esri.symbol.SimpleFillSymbol();
        routeSymbols = {
          "Route 1": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([0,0,255,0.5])).setWidth(5),
          "Route 2": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([0,255,0,0.5])).setWidth(5),
          "Route 3": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([255,0,255,0.5])).setWidth(5)
        };
      }
      dojo.ready(init);
      //Begins listening for click events to add stops
      function addStops() {
        removeEventHandlers();
        mapOnClick_addStops_connect = dojo.connect(map, "onClick", 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) {
        routeParams.stops.features.push(
          map.graphics.add(
            new esri.Graphic(
              evt.mapPoint,
              stopSymbol,
              { RouteName:dojo.byId("routeName").value }
            )
          )
        );
      }
      
   //Begins listening for click events to add Polygon Barriers 
      function addPolygonBarriers() {
        removeEventHandlers();
        mapOnClick_addPolygonBarriers_connect = dojo.connect(map, "onClick", addPolygonBarrier);
      }
      
   //Clears all Polygon Barriers
      function clearPolygonBarriers() {
        removeEventHandlers();
        for (var i=routeParams.polygonBarriers.features.length-1; i>=0; i--) {
          map.graphics.remove(routeParams.polygonBarriers.features.splice(i, 1)[0]);
        }
      }
      
   //Adds a Polygon Barrier.
      function addPolygonBarrier(evt) {
      drawToolbar.activate(esri.toolbars.Draw.POLYGON);
      var drawEnd_connect = dojo.connect(drawToolbar, "onDrawEnd", function(geometry) {
      routeParams.polygonBarriers.features.push(
      map.graphics.add(new esri.Graphic(geometry, polygonBarrierSymbol))
      );
      });
      }
      //Begins listening for click events to add barriers
      function addBarriers() {
        removeEventHandlers();
        mapOnClick_addBarriers_connect = dojo.connect(map, "onClick", 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) {
        routeParams.barriers.features.push(
          map.graphics.add(
            new esri.Graphic(
              evt.mapPoint,
              barrierSymbol
            )
          )
        );
      }
      //Stops listening for click events to add Polygon Barriers, barriers and stops
      function removeEventHandlers() {
        dojo.disconnect(mapOnClick_addStops_connect);
        dojo.disconnect(mapOnClick_addBarriers_connect);
        dojo.disconnect(mapOnClick_addPolygonBarriers_connect);
      }
      //Solves the routes. Any errors will trigger the errorHandler function.
      function solveRoute() {
        removeEventHandlers();
        routeTask.solve(routeParams);
      }
      //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(solveResult) {
        clearRoutes();
        dojo.forEach(solveResult.routeResults, function(routeResult, i) {
          routes.push(
            map.graphics.add(
              routeResult.route.setSymbol(routeSymbols[routeResult.routeName])
            )
          );
        });
        var msgs = ["Server messages:"];
        dojo.forEach(solveResult.messages, function(message) {
          msgs.push(message.type + " : " + message.description);
        });
        if (msgs.length > 1) {
          alert(msgs.join("\n - "));
        }
      }
      //Reports any errors that occurred during the solve
      function errorHandler(err) {
        alert("An error occured\n" + err.message + "\n" + err.details.join("\n"));
      }
    </script>
  </head>
  <body class="claro">
    Select route name: <select id="routeName">
      <option value="Route 1">Route 1</option>
      <option value="Route 2">Route 2</option>
      <option value="Route 3">Route 3</option>
    </select> to 
    <button onclick="addStops();">Add Stops</button>
    <button onclick="clearStops();">Clear Stops</button>
    <button onclick="addBarriers();">Add Barriers</button>
    <button onclick="clearBarriers();">Clear Barriers</button>
    <button onclick="addPolygonBarriers();">Add PolyBarriers</button>
    <button onclick="clearPolygonBarriers();">Clear PolyBarriers</button>
    <button onclick="solveRoute();">Solve Routes</button>
    <button onclick="clearRoutes();">Clear Routes</button>
    <br /><br />
    <div id="map" style="width:600px; height:400px; border:1px solid #000;"></div>
     <ol>
      <li>Select a route name from the drop down.</li>
      <li>Click 'Add stops', then click on map to add stops to route.</li>
      <li>Click the 'Add Barriers', then click on map to add barriers.</li>
      <li>Optionally, repeat the above steps to add more routes.</li>
      <li>Click the 'Solve Routes' to solve.</li>
    </ul>
    <p>Any server error messages will be displayed in an alert box.</p>
  </body>
</html>
<!DOCTYPE html> <html>   <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">     <!--The viewport meta tag is used to improve the presentation and behavior of the samples        on iOS devices-->     <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">     <title>Multiple Routes</title>      <link rel="stylesheet" href="http://js.arcgis.com/3.8/js/dojo/dijit/themes/claro/claro.css">     <link rel="stylesheet" href="http://js.arcgis.com/3.8/js/esri/css/esri.css">          <script src="http://js.arcgis.com/3.8/"></script>     <script>       dojo.require("esri.map");       dojo.require("esri.tasks.route");       dojo.require("esri.toolbars.draw");       dojo.require("esri.tasks.geometry");       dojo.require("esri.toolbars.draw")        // Changed by pepatosp       var map, Draw, routeTask, routeParams, routes = [];       var drawToolbar;       // end of changes       var stopSymbol, barrierSymbol, polygonBarrierSymbol, routeSymbols;       var mapOnClick_addStops_connect, mapOnClick_addBarriers_connect, mapOnClick_addPolygonBarriers_connect;        function init() {         esri.config.defaults.io.proxyUrl = "/proxy";                  esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");          map = new esri.Map("map", {           basemap: "streets",           center: [-122.416, 37.802],           zoom: 15         });          // Initialize the toolbar // changed by pepatosp         function createToolBar() {           drawToolbar = new esri.toolbars.Draw(map);           drawToolbar.on("draw-end", addToMap);         }          function activateTool() {           drawToolbar.activate(esri.toolbars.Draw.POLYGON);           map.hideZoomSlider();         }          function addToMap(evt) {           drawToolbar.deactivate();           routeParams.polygonBarriers.features.push(             map.graphics.add(new esri.Graphic(evt.geometry, polygonBarrierSymbol))           );         }          map.on("load", createToolBar);          var node = dojo.byId("addPolygons");          dojo.connect(node, "click", activateTool);           routeTask = new esri.tasks.RouteTask("http://tasks.arcgisonline.com/ArcGIS/rest/services/NetworkAnalysis/ESRI_Route_NA/NAServer/Route");         routeParams = new esri.tasks.RouteParameters();         routeParams.stops = new esri.tasks.FeatureSet();         routeParams.barriers = new esri.tasks.FeatureSet();         routeParams.polygonBarriers = new esri.tasks.FeatureSet();         routeParams.outSpatialReference = {"wkid":102100};         dojo.connect(routeTask, "onSolveComplete", showRoute);         dojo.connect(routeTask, "onError", errorHandler);          stopSymbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_CROSS).setSize(15);         stopSymbol.outline.setWidth(3);          barrierSymbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_X).setSize(10);         barrierSymbol.outline.setWidth(3).setColor(new dojo.Color([255,0,0]));                  var polygonBarrierSymbol = new esri.symbol.SimpleFillSymbol();          routeSymbols = {           "Route 1": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([0,0,255,0.5])).setWidth(5),           "Route 2": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([0,255,0,0.5])).setWidth(5),           "Route 3": new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([255,0,255,0.5])).setWidth(5)         };       }        dojo.ready(init);        //Begins listening for click events to add stops       function addStops() {         removeEventHandlers();         mapOnClick_addStops_connect = dojo.connect(map, "onClick", 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) {         routeParams.stops.features.push(           map.graphics.add(             new esri.Graphic(               evt.mapPoint,               stopSymbol,               { RouteName:dojo.byId("routeName").value }             )           )         );       }            //Begins listening for click events to add Polygon Barriers        function addPolygonBarriers() {         removeEventHandlers();         mapOnClick_addPolygonBarriers_connect = dojo.connect(map, "onClick", addPolygonBarrier);       }            //Clears all Polygon Barriers       function clearPolygonBarriers() {         removeEventHandlers();         for (var i=routeParams.polygonBarriers.features.length-1; i>=0; i--) {           map.graphics.remove(routeParams.polygonBarriers.features.splice(i, 1)[0]);         }       }            //Adds a Polygon Barrier.       function addPolygonBarrier(evt) {         drawToolbar.activate(esri.toolbars.Draw.POLYGON);         var drawEnd_connect = dojo.connect(drawToolbar, "onDrawEnd", function(geometry) {           routeParams.polygonBarriers.features.push(             map.graphics.add(new esri.Graphic(geometry, polygonBarrierSymbol))           );         });       }        //Begins listening for click events to add barriers       function addBarriers() {         removeEventHandlers();         mapOnClick_addBarriers_connect = dojo.connect(map, "onClick", 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) {         routeParams.barriers.features.push(           map.graphics.add(             new esri.Graphic(               evt.mapPoint,               barrierSymbol             )           )         );       }        //Stops listening for click events to add Polygon Barriers, barriers and stops       function removeEventHandlers() {         dojo.disconnect(mapOnClick_addStops_connect);         dojo.disconnect(mapOnClick_addBarriers_connect);         dojo.disconnect(mapOnClick_addPolygonBarriers_connect);       }        //Solves the routes. Any errors will trigger the errorHandler function.       function solveRoute() {         removeEventHandlers();         routeTask.solve(routeParams);       }        //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(solveResult) {         clearRoutes();          dojo.forEach(solveResult.routeResults, function(routeResult, i) {           routes.push(             map.graphics.add(               routeResult.route.setSymbol(routeSymbols[routeResult.routeName])             )           );         });          var msgs = ["Server messages:"];         dojo.forEach(solveResult.messages, function(message) {           msgs.push(message.type + " : " + message.description);         });         if (msgs.length > 1) {           alert(msgs.join("\n - "));         }       }        //Reports any errors that occurred during the solve       function errorHandler(err) {         alert("An error occured\n" + err.message + "\n" + err.details.join("\n"));       }     </script>    </head>   <body class="claro">      Select route name: <select id="routeName">       <option value="Route 1">Route 1</option>        <option value="Route 2">Route 2</option>       <option value="Route 3">Route 3</option>     </select> to      <button onclick="addStops();">Add Stops</button>     <button onclick="clearStops();">Clear Stops</button>     <button onclick="addBarriers();">Add Barriers</button>     <button onclick="clearBarriers();">Clear Barriers</button>     <!-- changed by pepatosp     <button onclick="addPolygonBarriers();">Add PolyBarriers</button>     -->     <button id="addPolygons">Add PolyBarriers</button>     <button onclick="clearPolygonBarriers();">Clear PolyBarriers</button>     <button onclick="solveRoute();">Solve Routes</button>     <button onclick="clearRoutes();">Clear Routes</button>      <br /><br />     <div id="map" style="width:600px; height:400px; border:1px solid #000;"></div>      <ol>       <li>Select a route name from the drop down.</li>       <li>Click 'Add stops', then click on map to add stops to route.</li>        <li>Click the 'Add Barriers', then click on map to add barriers.</li>       <li>Optionally, repeat the above steps to add more routes.</li>       <li>Click the 'Solve Routes' to solve.</li>     </ul>     <p>Any server error messages will be displayed in an alert box.</p>   </body> </html>