欢迎您来到GIS动力

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

一、功能描述

undefined undefined本工程意在用eSuperMap类库构建一个最简单的应用工程,演示对打开的地图进行放大、缩小、漫游、选择、整幅显示和刷新等基本操作。 undefined undefined
 

二、类及方法:

undefined undefined
用到的类 方法
CSeWorkSpace
Close、GetDataSourceAt、GetMaps、Open
CSeMapWnd AddLayer、Close、GetAction、OnDraw、OnInitialUpdate、OnLButtonDblClk、OnLButtonDown、OnLButtonUp、OpenMap、Refresh、SetAction、ViewEntire
CSeDataSource GetDatasetCount、GetDatasetAt
CSeMaps GetMapCount、GetMap、GetMapAt 、GetMapNameAt
undefined undefined
 

三、说明及约定

undefined undefined
  1. 工程说明 本工程为单文档类型的工程,提供菜单和工具条两种操作方式 菜单中提供“文件、地图”两组菜单,其中: “文件”这个组中有“打开、关闭和退出”三个菜单项; “地图”这个组中有“放大、缩小、自由缩放、光滑自由缩放、平移、光滑平移、点选、框选、整幅显示和刷新”十个菜单项; 工具条中提供“放大、缩小、自由缩放、光滑自由缩放、平移、光滑平移、点选、框选、整幅显示和刷新”十项,与菜单中的Map组的菜单项的资源ID相对应;
  2. 打开地图文件的约定 本工程主要是演示如何建立最简单的工程,并对地图进行基本操作,故约定: 打开工作空间后,判断有没有地图,如果有地图,则打开第一个地图,然后刷新地图窗口,显示地图;如果没有地图,则接着判断第一个数据源中有没有数据集,如果有,则把第一个数据集添加到地图窗口中,然后刷新地图窗口,显示地图。
  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工程(有详细的注释)
 
  • 1、新建一个单文档界面的工程,命名为 MapOperation.
 
  • 2、在 stdafx.h 文件中添加如下代码
    #include "RSFC.h" //这是使用eSuperMap 类库需要的头文件
 
  •  3、在 CMapOperationApp.h 中添加如下代码:
    CSeWorkSpace m_WorkSpace; //添加一个变量,用以打开工作空间文件
    CMapOperationApp 类外面声明一个全局变量
    extern CMapOperationApp theApp;
 
  •  4、改造原有的菜单,按 “三、说明及约定”中第一条所说的设置 改造工具条,按“三、说明及约定”中第一条所说的设置
 
  •  5、在 CMapOperationView.cpp中添加一下成员变量并在构造函数中初始化
    CSeMapWnd m_MapWnd; //用以显示地图
    bool m_bFileOpened; //用以记录是否已经打开地图
    CMapOperationView::CMapOperationView()
    {//变量的初始化
        m_bFileOpened = false;
    }
 
  • 6、在 CMapOperationView 类中添加消息响应函数,实现具体的功能
    //打开地图文件
    void CMapOperationView::OnFileOpen()
    {
        CFileDialog dlgFile(true, _T("pmw|pmw|*.*"), NULL, OFN_HIDEREADONLY
            | OFN_OVERWRITEPROMPT,_T("WorkSpace Files (*.pmw)|*.pmw") );
        if( dlgFile.DoModal() == IDOK )
        {

        //如果已经打开工作空间文件,则关闭
            if(theApp.m_WorkSpace.IsOpen())
            {
                theApp.m_WorkSpace.Close();
                m_MapWnd.Close();
                m_bFileOpened = false;
            }

            //获得图形文件的完整路径及文件名
            CString strFileName = dlgFile.GetPathName();
            //打开工作空间并弹出对话框
            if( theApp.m_WorkSpace.Open( strFileName ) )
            {
                CSeMaps *pMaps = theApp.m_WorkSpace.GetMaps();
                if( pMaps )
                {
                   if ( pMaps->GetMapCount() > 0 )
                   {
                      CSeMapDef MapDef;

                      //打开地图方法一: 通过名字取地图
                      CString strMapName = pMaps->GetMapNameAt(0);

                      if( pMaps->GetMap( strMapName,MapDef ) )
                      {
                           if(m_MapWnd.OpenMap(MapDef))
                            {
                                 m_MapWnd.Refresh();
                             }
                       }


                       //打开地图方法二: 通过序号取地图
                       //*if( pMaps->GetMapAt( 0, MapDef ) )
                       {
                           if(m_MapWnd.OpenMap(MapDef))
                           {
                           m_MapWnd.Refresh();
                           }
                      }*/
                   }


                   //没有默认地图,打开第一个数据源的第一个数据集作为当前地图
                   else
                   {
                        CSeDataSource *pDataSource =
                        theApp.m_WorkSpace.GetDataSourceAt( 0 );
                        if( pDataSource && pDataSource->GetDatasetCount() > 0 )
                       {
                             CSeDataset *pDataset = pDataSource->GetDatasetAt( 0 );
                             if( pDataset )
                             {
                                 m_MapWnd.AddLayer( pDataset );
                                  m_MapWnd.Refresh();
                             }
                        }
                   }
              }
              m_bFileOpened = true;
              }
         }
    }

    //重载初始化函数
    void CMapOperationView::OnInitialUpdate()
    {
    //
    初始化视图窗口
         m_MapWnd.OnInitialUpdate( &theApp.m_WorkSpace, this );
         CView::OnInitialUpdate();
    }

    //将地图画出来
    void CMapOperationView::OnDraw(CDC* pDC)
    {
         CMapOperationDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
         CRect rcClient;
         GetClientRect(&rcClient);
         m_MapWnd.OnDraw(pDC,rcClient,rcClient);
    }

    //设置地图漫游状态
    void CMapOperationView::OnMapPan()
    {
         m_MapWnd.SetAction(CSeDrawParameters::uaPan);
    }

    //界面响应函数
    void CMapOperationView::OnUpdateMapPan(CCmdUI* pCmdUI)
    {
         pCmdUI->SetCheck(m_MapWnd.GetAction()= =CSeDrawParameters::uaPan);
    }

    //重载OnLButtonDown()函数
    void CMapOperationView::OnLButtonDown(UINT nFlags, CPoint point)
    {
         m_MapWnd.OnLButtonDown(nFlags,point);
         CView::OnLButtonDown(nFlags, point);
    }
 
  •  7、其他的重载函数和地图操作函数请看MapOperation工程。

(本文已被浏览 次)
发布人: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号