zoukankan      html  css  js  c++  java
  • 网络分析(最近设施)

    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 = [];
    }
  • 相关阅读:
    An error happened during template parsing (template: "class path resource [templates/index.html]")(有效转)
    Netty线程模型及EventLoop
    社交网络大时代背景下的店铺社交群
    Shiro
    从n个数中取出m个最大数(复杂度最低)的最好的算法是什么?
    Shiro(基本)
    Shiro(转)
    一:Spring Boot 的配置文件 application.properties
    Spring Boot 基础,理论,简介
    收集整理Idea常用配置及插件
  • 原文地址:https://www.cnblogs.com/gispathfinder/p/5789711.html
Copyright © 2011-2022 走看看