如何使用


        动态分段的使用方法:

  1. 制作动态分段空间数据并在服务端发布以供客户端调用;
  2. 在客户端设置用于向服务端发送的动态分段各参数,包括数据返回选项(DataReturnOption)、 动态分段参数(GenerateSpatialDataParameters);
  3. 定义动态分段服务(GenerateSpatialDataService),用于向服务端发送请求, 从服务端获得动态分段数据,并在客户端进行单值专题渲染。  

        本节以长春市道路的数据为例,根据某一时刻的某些道路路段出现拥堵和车辆较多现象, 利用动态分段技术在客户端实时动态显示出道路的路况(拥挤/缓行/畅通), 以提示驾驶人员避免进入拥堵路段,选择合适的行驶路线。

数据的制作及发布

       以长春示范数据为例, 在 SuperMap iDesktop产品中演示动态分段所需数据(包括:路由数据集和点/线事件表)的制作过程,如下所示:

数据制作流程

图1 数据制作流程

  1. 由点/线数据集生成路由数据集

    首先导入原始线数据表,给此数据表添加新的字段路由 ID(RouteID),利用新的线数据表生成路由数据集。

    操作方法:“分析-动态分段-点/线数据集->路由数据集”,各参数设置如下图所示:

    生成路由数据集

    图2 生成路由数据集

  2. 生成点/线事件表

    利用步骤1生成的路由数据集制作相应的事件表。其中,生成事件表有两种方式:一种是人工建立一个属性表,添加路由标识字段和其他属性字段,并输入相应的属性信息来生成事件表。这种方式虽然简单但往往需要耗费较多的人力物力;另一种方式是通过点或线空间数据和路由数据来自动生成事件表。本示例采用的是第二种方式,方法如下:

    点击”分析-动态分段-创建事件表”功能创建线事件表,参数设置如下:

    创建事件表

    图3 创建事件表

    这个步骤会根据提供的线事件数据集生成事件表,系统会根据事件的位置, 自动计算出这些事件位于哪条路段上,以及起止 M 值等信息, 即结果事件属性表中会有 RouteID、LineMeasureFrom、LineMeasureTo 等字段; 另外,可以自己手动建立事件类型字段。

    本示例在创建事件表完成之后,手动创建一个文本字段(TrafficStatus), 描述事件类型字段,其属性值有:拥堵/畅通/缓行。

  3. 设置事件表

    对生成的线事件表中的字段进行设置,用户通过自己设置事件表参数, 可以将事件表中的属性,通过创建的线事件,添加到地图窗口,具体设置进行如下:

    设置事件表

    图4 设置事件表

    至此,参与动态分段的路由数据集和事件表数据准备完毕。保存此工作空间,并发布成空间分析服务。本专题使用的服务为 SuperMap iServer 8C, 具体发布方法请参见 iServer Java 8C 的帮助文档。

范例

  1. 设置动态分段需要的各个参数

    第一步,设置数据返回选项,需要设置的属性属性包括 expectCount、dataset、deleteExistResultDataset、dataReturnMode。如下所示:

    AS 拷贝代码
    var returnOption:DataReturnOption = new DataReturnOption();
    returnOption.dataset = "generateSpatialData";
    returnOption.dataReturnMode = DataReturnMode.DATASET_ONLY;
    returnOption.deleteExistResultDataset = true;
    returnOption.expectCount = 1000;

    第二步,设置动态分段参数,需要设置的属性包括 routeTable、routeIDField、eventTable、eventRouteIDField、 measureField、measureStartField、measureEndField、measureOffsetField、errorInfoField、dataReturnOption。如下所示:

    AS 拷贝代码
    var parameters:GenerateSpatialDataParameters = new GenerateSpatialDataParameters();
    parameters.routeTable = "RouteDT_road@Changchun";
    parameters.routeIDField = "RouteID";
    parameters.eventTable = "LinearEventTabDT@Changchun";
    parameters.eventRouteIDField = "RouteID";
    parameters.measureStartField = "LineMeasureFrom";
    parameters.measureEndField = "LineMeasureTo";
    parameters.dataReturnOption = returnOption;      
    
  2. 定义动态分段服务(GenerateSpatialDataService)

    动态分段服务对象,用于将客户端设置的动态分段分析服务参数(parameters)传递给服务端, 并接收服务端返回的动态分段分析结果数据。当分析成功时,将触发 GenerateSpatialDataEvent.PROCESS_COMPLETE 事件。用户可以通过两种方式获取分析结果:(1) 通过 AsyncResponder 类获取(推荐使用);(2)通过监听 GenerateSpatialDataEvent.PROCESS_COMPLETE 事件获取。本例采用第一种方式获取,如下所示:

    AS 拷贝代码
    /* 定义动态分段服务并发送参数 */  
    var generateSevice:GenerateSpatialDataService = new GenerateSpatialDataService(this.dataSetUrl);//this.dataSetUrl为长春空间分析服务地址
    generateSevice.processAsync(parameters,new AsyncResponder(generateCallBack, faultHandler, null));        
    

    若分析成功,则从服务端获得动态分段空间数据,并在客户端将空间数据中的路况信息以专题图的形式展现;若分析不成功,显示失败信息,如下所示:

    AS 拷贝代码
    /* 分析成功,利用产生的空间数据制作路况信息的单值专题图 */  
    private function generateCallBack(generateResult:GenerateSpatialDataResult, mark:Object = null):void
    {
       var items1:ThemeUniqueItem = new ThemeUniqueItem();
       var style1:ServerStyle = new ServerStyle();
       style1.fillForeColor = new ServerColor(242, 48, 48);
       style1.lineColor = new ServerColor(242, 48, 48);
       style1.lineWidth = 1;
       items1.unique = "拥挤";
       items1.style = style1;
                                    
       var items2:ThemeUniqueItem = new ThemeUniqueItem();
       var style2:ServerStyle = new ServerStyle();
       style2.fillForeColor = new ServerColor(255, 159, 25);
       style2.lineColor = new ServerColor(255, 159, 25);
       style2.lineWidth = 1;
       items2.unique = "缓行";
       items2.style = style2;
                                    
       var items3:ThemeUniqueItem = new ThemeUniqueItem();
       var style3:ServerStyle = new ServerStyle();
       style3.fillForeColor = new ServerColor(91, 195, 69);
       style3.lineColor = new ServerColor(91, 195, 69);
       style3.lineWidth = 1;
       items3.unique = "畅通";
       items3.style = style3;
                                    
       var themeUnique:ThemeUnique = new ThemeUnique();
       themeUnique.uniqueExpression = "TrafficStatus";
       themeUnique.items = [items1,items2, items3];
                                    
       var parameter:ThemeParameters = new ThemeParameters();
       parameter.datasetNames = ["generateSpatialData"];
       parameter.dataSourceNames = ["Changchun"];
       parameter.themes = [themeUnique];
                                    
       var themeServie:ThemeService = new ThemeService(this.mapUrl);
       themeServie.processAsync(parameter,new AsyncResponder(themeDisplay, themeFault, null));
    }
    /* 展示长春路况专题图 */  
    private function themeDisplay(themeResult:ThemeResult, mark:Object):void
    {
       themeLayer = new TiledDynamicRESTLayer();
       themeLayer.url = this.mapUrl;//长春地图服务地址
       themeLayer.layersID = themeResult.resourceInfo.newResourceID;
       themeLayer.transparent = true;
       themeLayer.enableServerCaching = false;
       map.addLayer(themeLayer);                    
    }
                    
    private function themeFault(object:Object, mark:Object = null):void
    {
       Alert.show("生成专题图失败");
    }
    
    private function faultHandler(object:Object, mark:Object = null):void
    {
       Alert.show("分析失败");
    }        
    

     

  3. 示例效果图

    将长春路况单值专题叠加在地图上显示, 效果图如下,其中红色代表“拥堵”、黄色代表“缓行”、绿色代表“畅通”。

    效果展示

    图5 效果展示

 

 

 


版权所有© 2000-2015 北京超图软件股份有限公司 保留所有权利。