dojo.require("esri.tasks.closestfacility"); var closestFacilityTask, params; var facilityPointGraphicsLayerName = "facilityPointGraphicsLayer"; var incidentPointGraphicsLayerName = "incidentPointGraphicsLayer"; var routeGraphicsLayerName = "routeGraphicsLayer"; var facilitiesGraphicsLayer = null; var incidentsGraphicsLayer = null; var routeGraphicLayer = null; var mapOnClick_addIncidents_connect, mapOnClick_addFacilities_connect; //安置点符号 function getFacilitySymbol() { var facilityPointSymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 20, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([89,95,35]), 2), new dojo.Color([130,159,83,0.40]) ); return facilityPointSymbol; } //转移点符号 function getIncidentSymbol() { var incidentPointSymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 16, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([89,95,35]), 2), new dojo.Color([130,159,83,0.40]) ); return incidentPointSymbol; } //路径符号 function getRouteSymbol() { var routePolylineSymbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([89,95,35]), 4.0); return routePolylineSymbol; } //安置点高亮符号 function getFacilityHighlightSymbol() { var facilityHighlightSymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 16, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,255,0]), 2), new dojo.Color([255,0,0,0.40]) ); return facilityHighlightSymbol; } //转移点高亮符号 function getIncidentHighlightSymbol() { var highlightSymbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,255,255],0.25), 4.5); return highlightSymbol; } //路径高亮符号 function getRouteHighlightSymbol() { var routePolylineSymbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 4.0); return routePolylineSymbol; } //安置点图层 function getFacilityPointGraphicsLayer() { if(facilitiesGraphicsLayer == null) { facilitiesGraphicsLayer = getGraphicsLayer(facilityPointGraphicsLayerName); var facilityPointSymbol = getFacilitySymbol(); var facilityRenderer = new esri.renderer.SimpleRenderer(facilityPointSymbol); facilitiesGraphicsLayer.setRenderer(facilityRenderer); } return facilitiesGraphicsLayer; } //转移点图层 function getIncidentPointGraphicsLayer() { if(incidentsGraphicsLayer == null) { incidentsGraphicsLayer = getGraphicsLayer(incidentPointGraphicsLayerName); var incidentPointSymbol = getIncidentSymbol(); var incidentsRenderer = new esri.renderer.SimpleRenderer(incidentPointSymbol); incidentsGraphicsLayer.setRenderer(incidentsRenderer); //高亮显示 map.graphics.enableMouseEvents(); dojo.connect(incidentsGraphicsLayer,"onMouseOver", function(evt){ var graphic = evt.graphic; map.graphics.clear(); var routeGraphicsLayer = getRouteGraphicsLayer(); var facilityPointGraphicsLayer = getFacilityPointGraphicsLayer(); for(var i=0; i<routeGraphicsLayer.graphics.length; i++) { var graphicRoute = routeGraphicsLayer.graphics[i]; if(graphic.attributes && graphicRoute.attributes.IncidentID==graphic.attributes.ObjectID) { var highlightSymbol = getRouteHighlightSymbol(); var highlightGraphic = new esri.Graphic(graphicRoute.geometry,highlightSymbol); map.graphics.add(highlightGraphic); // var FacilityID = graphicRoute.attributes.FacilityID; for(var i=0; i<facilityPointGraphicsLayer.graphics.length; i++) { var graphicFacility = facilityPointGraphicsLayer.graphics[i]; if(graphicFacility.attributes && graphicFacility.attributes.ObjectID==FacilityID) { var facilityHighlightSymbol = getFacilityHighlightSymbol(); var highlightGraphic = new esri.Graphic(graphicFacility.geometry,facilityHighlightSymbol); map.graphics.add(highlightGraphic); } } } } }); dojo.connect(incidentsGraphicsLayer,"onMouseOut", function(evt){ //alert("OK"); map.graphics.clear(); }); } return incidentsGraphicsLayer; } //路径图层 function getRouteGraphicsLayer() { if(routeGraphicLayer == null) { routeGraphicLayer = getGraphicsLayer(routeGraphicsLayerName); var routePolylineSymbol = getRouteSymbol(); var routeRenderer = new esri.renderer.SimpleRenderer(routePolylineSymbol); routeGraphicLayer.setRenderer(routeRenderer); } return routeGraphicLayer; } /********************************************/ //添加转移点 function addIncidents() { removeEventHandlers(); mapOnClick_addIncidents_connect = dojo.connect(map, "onClick", addIncident); } //添加转移点事件响应 function addIncident(evt) { var inPoint = new esri.geometry.Point(evt.mapPoint.x,evt.mapPoint.y,map.spatialReference); var location = new esri.Graphic(inPoint); graphicsLayer = getIncidentPointGraphicsLayer(); graphicsLayer.add(location); params.incidents.features.push(location); } //添除转移点 function clearIncidents() { removeEventHandlers(); graphicsLayer = getIncidentPointGraphicsLayer(); for (var i=params.incidents.features.length-1; i>=0; i--) { graphicsLayer.remove(params.incidents.features.splice(i, 1)[0]); } params.incidents.features = []; } /********************************************/ //添加安置点 function addFacilities() { removeEventHandlers(); mapOnClick_addFacilities_connect = dojo.connect(map, "onClick", addFacility); } //添加安置点事件响应 function addFacility(evt) { var inPoint = new esri.geometry.Point(evt.mapPoint.x,evt.mapPoint.y,map.spatialReference); var location = new esri.Graphic(inPoint); graphicsLayer = getFacilityPointGraphicsLayer(); graphicsLayer.add(location); params.facilities.features.push(location); } //添除安置点 function clearFacilities() { removeEventHandlers(); graphicsLayer = getFacilityPointGraphicsLayer(); for (var i=params.facilities.features.length-1; i>=0; i--) { graphicsLayer.remove(params.facilities.features.splice(i, 1)[0]); } params.facilities.features = []; } /********************************************/ //取消添加安置点与转移点事件 function removeEventHandlers() { dojo.disconnect(mapOnClick_addIncidents_connect); dojo.disconnect(mapOnClick_addFacilities_connect); } //进行路径分析 function solveClosestFacility() { if(params.incidents.features.length<1) return; removeEventHandlers(); /* params.facilities = []; closestFacilityTask.solve(params,completeCallback,errorCallback); */ var geometryArray = []; for(var i=0; i<params.incidents.features.length; i++) { geometryArray.push(params.incidents.features[i].geometry); } var bufferParameters = new esri.tasks.BufferParameters(); bufferParameters.distances = [4]; bufferParameters.bufferSpatialReference = map.spatialReference; bufferParameters.outSpatialReference = map.spatialReference; bufferParameters.unit = esri.tasks.GeometryService.UNIT_KILOMETER; bufferParameters.geometries = geometryArray; geometryService.buffer(bufferParameters, function (bufferedGeometries){ geometryService.union(bufferedGeometries, function (unionGeometry){ //var urlArray = ["http://10.1.102.171:6080/arcgis/rest/services/jcxx/TranferRoad/MapServer/13"]; var urlArray = config.operatorLayers.placement; var fieldsArray = []; var sql = "1=1"; GisLayerAccess(urlArray, fieldsArray, sql, unionGeometry, function (resultData){ var facilities = new esri.tasks.FeatureSet(); facilities.features = resultData[0].features; params.facilities = facilities; closestFacilityTask.solve(params,completeCallback,errorCallback); }, true, true, true); }); }); function completeCallback(solveResult) { //alert(Ext.encode(solveResult)); var routeGraphicLayer = getRouteGraphicsLayer(); var facilityPointGraphicsLayer = getFacilityPointGraphicsLayer(); var incidentPointGraphicsLayer = getIncidentPointGraphicsLayer(); //var directions = solveResult.directions; var routes = solveResult.routes; var facilities = solveResult.facilities; var incidents = solveResult.incidents; routeGraphicLayer.clear(); for(var i=0; i<routes.length; i++) { var route = routes[i]; routeGraphicLayer.add(route); } // facilityPointGraphicsLayer.clear(); for(var i=0; i<facilities.length; i++) { var facility = facilities[i]; facilityPointGraphicsLayer.add(facility); } // incidentPointGraphicsLayer.clear(); for(var i=0; i<incidents.length; i++) { var incident = incidents[i]; incidentPointGraphicsLayer.add(incident); } if(solveResult.messages.length > 0){ //alert(solveResult.messages[0]); } } function errorCallback(err) { Ext.encode(err); } } //初始化网络分析功能 function initNetwork() { params = new esri.tasks.ClosestFacilityParameters(); params.travelDirection = esri.tasks.NATravelDirection.TO_FACILITY; params.defaultTargetFacilityCount = 1; params.impedenceAttribute = "METERS"; //params.impedenceAttributeName = "METERS"; params.directionsTimeAttribute = "MINUTES"; //params.directionsTimeAttributeName = "MINUTES"; params.restrictUTurns = esri.tasks.NAUTurn.ALLOW_BACKTRACK; params.useHierarchy = false; params.returnDirections = false; params.returnRoutes = true; params.returnFacilities = true; params.returnIncidents = true; params.returnPointBarriers = false; params.returnPolygonBarriers = false; params.returnPolylineBarriers = false; // params.directionsLanguage = "en-US"; params.directionsOutputType = "complete"; params.outputLines = esri.tasks.NAOutputLine.TRUE_SHAPE_WITH_MEASURE; params.outputGeometryPrecisionUnits = "esriKilometers"; params.directionsLengthUnits = "esriKilometers"; params.timeOfDayUsage = "start"; // params.facilities = new esri.tasks.FeatureSet(); params.facilities.features = []; // params.incidents = new esri.tasks.FeatureSet(); params.incidents.features = []; // params.outSpatialReference = map.spatialReference; closestFacilityTask = new esri.tasks.ClosestFacilityTask(config.map.network.closestFacility); //("http://10.1.102.171:6080/arcgis/rest/services/jcxx/TranferRoad/NAServer/ClosestFacility"); } //清除最近设施分析结果 function clearClosestFacilityResult() { map.graphics.clear(); graphicsLayer = getFacilityPointGraphicsLayer(); graphicsLayer.clear(); graphicsLayer = getIncidentPointGraphicsLayer(); graphicsLayer.clear(); graphicsLayer = getRouteGraphicsLayer(); graphicsLayer.clear(); clearParams(); } //清除最近设施分析参数 function clearParams() { params.facilities.features = []; params.incidents.features = []; }