2024年4月19日发(作者:)

Editor: 地图的编辑

一、功能描述

本工程主要演示地图几何对象的编辑,即添加、编辑、删除、移动几何对象,添加、删除、编辑节点等。

二、类及方法

用到的类

CSeWorkSpace

CSeMapWnd

方法

Close、GetDataSourceAt、GetDataSourceCount、GetMaps、IsOpen、Open

AddLayer、Close、GetAction、GetLayer、GetLayerAt、GetLayerCount、

InitialEditTextStyle、MoveBottom、MoveDown、MoveTop、MoveUp、OnDraw、

OnInitialUpdate、OnLButtonDblClk、OnLButtonDown、OnLButtonUp、

OpenMap、Refresh、RemoveLayerAt、SaveToMap、SetAction、SetEditableLayer、

ViewEntire

GetAlias、GetDatasetCount、GetDataset、GetDatasetAt

GetName、GetType

AddMap、GetMapCount、GetMap、GetMapAt 、GetMapCount、GetMapNameAt、

SetMap

GetDataset

IsEditable、IsSelectable、IsSnapable、IsVisible、SetSelectable、SetSnapable、

SetVisible

CSeDataSource

CSeDataset

CSeMaps

CSeLayer

CSeLayerDef

三、说明及约定

1、工程说明

本工程为单文档类型的工程,提供菜单和工具条两种操作方式

菜单中提供“文件、地图和编辑”三组菜单,其中:

“文件”中提供“打开地图、添加图层、关闭和退出”四个菜单项;

“地图”中除了放大、缩小、平移、点选、框选、整幅显示和刷新外,还提供“图层管理”功能;

“编辑”中有“选择编辑层、添加点、添加线、添加面、添加文本、文本编辑、移动对象、删除对象、

增加节点、编辑节点和删除节点”十一个菜单项。

工具条除地图基本操作功能外,增加了对象编辑工具条,提供的功能分别与菜单中 “编辑”中的功能和

资源相对应。

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类库的相应的库文

件目录选进来即可,比如:

具体设置请参见 联机帮助 中的开发环境设置。

四、实现过程

注:本工程是在地图基本操作工程MapOperation基础上进行的对象编辑,它的一些实现步骤和

MapOperation相同,这里只介绍重要的实现步骤和方法,详细的对象编辑参见editor工程和MapOperation

工程(有详细的注释)。

1、新建一个单文档界面的工程,命名为editor;

2、改造原有的菜单,按 “三、说明及约定”中第一条所说的设置;

3、改造原有的工具条,按 “三、说明及约定”中第一条所说的设置;

4、添加三个对话框类:CDlgSelect、CDlgLayerManager、CDlgSelectLayer,其中:

CDlgSelect是在选择要打开的地图或选择要添加的数据集时使用,添加的成员变量和函数如下:

定义变量:

CComboBox m_cmbDataSource;

//数据源列表

CListCtrl m_lstDataset; //数据集列表

CImageList m_ImageList; //数据集类型图像列表

bool m_bMap; //列表框中是否显示地图名【输入】

CString m_strMapName; //地图名【输出】

CString m_strDatasourceAlias; //数据源别名【输出】

CString m_strDatasetName; //数据集名【输出】

成员函数:

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(); //响应确定按钮操作