欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏SuperMap应用与开发超图其它 → 正文
eSuperMap路径分析
07-10-17 09:19:10 作者: 出处:

一、功能描述

undefined undefined本工程主要演示多模式和多模型的路径分析方法,其中多模式是指少内存占用方式(速度稍慢)和多内存占用方式(速度快)。多模型是指用户可以直接使用CSePathAnalyst类进行最短路径分析,也可以根据模型的规则扩展CSePathAnalyst类进行路径分析(如最短时间分析、有规则和无规则等)。 undefined undefined
 

二、类及方法

undefined undefined
用到的类 方法
CSeWorkSpace Close、GetDataSourceAt、GetDataSourceCount、GetDataSourceByAlias、GetMaps、IsOpen、Open
CSeMapWnd AddLayer、Close、GetAction、GetLayer、GetLayerAt、GetLayerCount、OnDraw、OnInitialUpdate、OnLButtonDown、OnLButtonUp、OpenMap、Refresh、RefreshTrackingLayer 、SetAction、ViewEntire
CSeDataSource GetAlias、GetDatasetCount、GetDataset、GetDatasetAt
CSeDataset GetName、GetType
CSeDatasetVector FindNearestNode 、GetChildDataset、QueryByIDs
CSeMaps AddMap、GetMapCount、GetMap、GetMapAt 、GetMapCount
CSeRecordset GetGeometry 、IsEOF、 MoveFirst、MoveNext、ReleaseRecordset
CSeDrawParameters ClientToMap
CSePathAnalyst Analyse 、CanForward、ExportAdjacentMatrix 、GetDatasetNetwork
GetDistance、ImportAdjacentMatrix 、SetDatasetNetwork
CSeTrackingLayer AddEvent 、GetCount 、ReleaseAll、SetStyle
undefined undefined
 

三、说明及约定

undefined undefined
1、工程说明
本工程为单文档类型的工程,提供菜单和工具条两种操作方式
菜单中提供“文件、地图和分析”三组菜单,其中:
“文件”中提供“打开地图、添加图层、关闭和退出”四个菜单项;
“地图”中提供放大、缩小、平移、点选、整幅显示和刷新六个菜单项; “分析”种提供有“分析设置、路径分析、导出邻接矩阵”三个菜单项。New!!
工具条除地图基本操作功能外,增加了分析设置和路径分析,提供的功能分别与菜单中 “分析”中的功能和资源相对应。
2、打开地图文件的约定
判断是否已经有地图文件打开,有则关闭;
打开地图文件后,就判断有没有地图,如果有地图,弹出打开地图对话框,选择打开地图,然后刷新地图窗口,显示地图;如果没有地图,新建一个地图Untitled,等待添加地图(文件 — 添加图层);
3、编译程序的约定
eSuperMap 类库支持VC++、EVC++ 3.0 和 EVC++ 4.0三种开发环境,同时支持PDA的各种设备类型、各种CPU类型的动态连接库和静态连接库,在编译的时候,需要指定eSuperMap类库的头文件和库文件的搜索路径。 在EVC集成开发环境中,设置搜索路径方法,选择Tools..Options.. Directories 选中指定的运行平台、CPU类型,然后开始设置包含头文件和库文件的路径: 1、设置头文件的搜索路径,选择Include Files , 添加一个路径搜索项,把eSuperMap类库的头文件目录 SeRSFC选进来即可; 2、设置库文件的搜索路径,选择Library Files , 添加一个路径搜索项,把eSuperMap类库的相应的库文件目录选进来即可,具体设置请参见 联机帮助 中的开发环境设置。
undefined undefined
 

四、实现过程

undefined undefined
注:本工程是在地图基本操作工程MapOperation基础上进行的路径分析,它的一些实现步骤和MapOperation相同,这里只介绍重要的实现步骤和方法,详细的路径分析参见PathAnalyst工程和MapOperation工程(有详细的注释)。
1、新建一个单文档界面的工程,命名为PathAnalyst
2、改造原有的菜单,按 “三、说明及约定”中第一条所说的设置;
3、改造原有的工具条,按 “三、说明及约定”中第一条所说的设置;
4、添加两个对话框类:CDlgSelectCDlgPathAnalyseSetting,其中:

CDlgSelect是在选择要打开的地图或选择要添加的网络数据集时使用,添加的成员变量和函数如下:
定义变量:
    CComboBox m_cmbDataSource; //数据源列表
    CListCtrl m_lstDataset; //数据集列表
    CImageList m_ImageList; //数据集类型图像列表
    bool m_bMap; //列表框中是否显示地图名【输入】
    CString m_strMapName; //地图名【输出】
    CString m_strDatasourceAlias; //数据源别名【输出】
     CString m_strDatasetName; //数据集名【输出】
成员函数:
        CSeDatasetVector * GetDataset(); //获取网络数据集
    void AddMap(); //将地图名加入列表框中
    void BuildColumns(int nCols, int *nWidth, CString *csCol); //创建列表框的列
    void BuildRows( int nRows, CString *pcValue, int nImage ); //创建列表框的行
    void AddDataset(); //将数据集信息加入列表框中
    virtual BOOL OnInitDialog(); //初始化对话框
    virtual void OnOK(); //响应确定按钮操作
    afx_msg void OnCancel(); //响应取消按钮操作
    afx_msg void OnSelchangeComboDatasource(); //更新数据集列表
使用说明:
当点击“文件—打开地图”时,如果文件存在地图,则打开该对话框,该对话框中显示的是地图名称列表,选择相应的地图名,就可以打开了,如果没有地图,则新建一个地图,再点击“文件—添加图层”,弹出该对话框,这时对话框显示的是当前工作空间的所有数据源及其相应的网络数据集列表,选择要添加的网络数据集即可。

*****************************************************************************
CDlgPathAnalyseSetting是分析模式和分析模型设置对话框,添加的成员变量和函数如下:
成员变量:
    int m_nAnalyseModel; /*分析模式,包括0-多内存占有—速度很快
                                    1-少内存占有—速度少慢*/
    int m_nAnalyseMode; /*分析模型:0-无规则最短路径分析
                                    1-有规则最短路径分析
                                    2-无规则最短时间分析
                                    3-有规则最短时间分析*/
成员函数:
    virtual void OnOK();
    virtual void OnCancel();
使用说明:

   点击“分析—分析设置”菜单时,显示该对话框,对话框中将提供分析模式和分析模型的选择,如上条中的变量所述。
5、扩展CSePathAnalyst类,构建一个它的继承类CSePathAnalystEx
  class CSePathAnalystEx : public CSePathAnalyst
    {
         enum RuleType
//分析模型
        {
                       ShortestWithoutLimit = 0,
//0-无规则最短路径分析
            ShortestWithLimit = 1, //1-有规则最短路径分析
            LeastTimeWithoutLimit = 2, //2-无规则最短时间分析
            LeastTimeWithLimit = 3, //3-有规则最短时间分析
        };
        public:
            CSePathAnalystEx();
            virtual ~CSePathAnalystEx();
            bool SetPathRuleParams( long nRuleType ); //设置路径分析模型
            protected://method
            //根据实际规则返回节点间的距离
        virtual bool GetDistance( CSeRecordset *pRecordsetArc, long &nArcID, long &nFNodeID,
                long &nTNodeID, double &dDistanceStartToEnd, double &dDistanceEndToStart );

             //根据实际规则返回道路的限制速度!
         long GetSpeedLimit( BYTE btRoadType );
             //根据实际规则判断节点是否可以通达
         virtual bool CanForward( long nFromNodeID, long nCurrentNodeID, long nToNodeID );
         protected://attribute
           long m_nRuleType; //路径分析模型
    };
SePathAnalystEx.cpp中实现具体的方法,请看PathAnalyst工程。
6、在PathAnalystView.h中定义成员变量,并在构造函数中初始化:
    CSeMapWnd m_MapWnd; //地图显示
    bool m_bFileOpened; //记录地图是否打开
    //路径分析时:
    CSePathAnalystEx m_PathAnalyst; //路径分析类
    long m_nAction; //用户动作,如路径分析
    int m_nAnalystMode; //路径分析模式
    int m_nAnalystModel; //路径分析模型
     CString m_strUnits; //分析结果的单位
    BOOL m_bRuleParamSetted; //是否已经设置了路径分析参数
    DWORD m_nFromNodeID; //路径分析起始结点ID
    CPoint m_pntFromNode; //路径分析起始结点坐标
    CPoint m_pntToNode; //路径分析终止结点坐标
    并在CPathAnalystView::CPathAnalystView()中初始化
7、在PathAnalystView.cpp中实现具体函数(按照菜单和工具条):
    文件—打开地图
        void CPathAnalystView::OnFileOpen()
    文件—添加图层 void CPathAnalystView::OnFileAddLayer()
    分析—分析设置 (工具条—分析设置)
        void CPathAnalystView::OnAnalyseSetting()
    分析—路径分析
        void CPathAnalystView::OnPathAnalyse() //路径分析,具体分析在OnLButtonDown()中
        void CPathAnalystView::OnUpdatePathAnalyse(CCmdUI* pCmdUI)
    分析—导出邻接矩阵
        void CPathAnalystView::OnExportAdjacentMatrix()
8、自定义函数,用于显示选择的点
    void CPathAnalystView::DisplayNodePoint(CPoint point)
9、鼠标重载函数
    void CPathAnalystView::OnLButtonDown(UINT nFlags, CPoint point) //实现具体的路径分析

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号