什么是HMAP?
第一章是hmap开发的基本环境和工具。
1.1基本环境
由于嵌入式开发的特殊性,其开发并不具备与其他应用软件相同的开发和运行环境,因此嵌入式软件的开发和运行环境可能并不一致。
1.1.1硬件环境:
对于配备奔腾处理器的台式电脑,建议使用奔腾150-MHz或更高的处理器。
符合台式计算机规格要求的CD-ROM驱动器。
VGA或分辨率更高的显示器。推荐超级VGA显示器。
鼠标或其他兼容的定点设备。
足够的硬盘空间。
最小化安装方法(包括嵌入式Visual C++和一个SDK)所需的磁盘空间:360 MB。
完整安装(包括Embedded Visual Basic、Embedded Visual c++和三个SDK)所需磁盘空间:720 MB。
6)如果操作系统是Windows 98第二版,至少要配备24 MB内存(建议48mb);如果操作系统是Windows NT Workstation 4.0或Windows 2000,则应至少配备32MB内存(建议48 MB)。
1.1.2软件环境:
1)微软视窗2000专业版/微软视窗NT工作站4.0带SP5,Internet Explorer 5.01和MDAC 2.1;或者微软视窗98第二版。
2)微软嵌入式可视化工具3.0及以上。
3)hMap类库
1.2开发工具
开发工具主要是嵌入式开发工具,主要是微软嵌入式工具和Windows CE工具。微软嵌入式工具提供集成开发环境,Windows CE工具提供SDK及其模拟器环境。
1.2.1开发工具安装
微软嵌入式工具的安装程序一般是和Windows CE工具的安装程序捆绑在一起的,所以两个工具往往是同时安装的。以下是安装Microsoft eMbedded Tools 3.0和Windows CE Tools 3.0的简要步骤:
启动Microsoft eMbedded Tools 3.0安装程序开始安装(见图1.2.1.1)。
根据界面提示,输入产品ID后,会弹出安装组件的对话框(见图1.2.1.2),然后根据选择的选项安装安装文件,这样会出现多个安装对话框。
根据界面提示,运行默认操作,出现微软嵌入式工具安装选择对话框(图1.2.1.3)。
然后继续使用微软嵌入式工具并显示进度条,然后开始安装Windows CE Platform SDK (H/PC Pro)(见图1.2.1.4)。
选择默认值,在安装H/PC Pro(见图1.2.1.5)后,开始安装Windows CE Platform SDK(掌上电脑1.2)。
选择默认值,在安装完掌上电脑1.2(见图1.6)后,开始安装Windows CE Platform SDK (Pocket PC)。
图1.2.1.1单击setup.exe开始安装,然后单击下一步按钮。
图1.2.1.2选择要安装的组件,点击“下一步”按钮。
图1.2.1.3选择相应的安装组件或选择"全选",然后点击"继续"按钮。
图1.2.1.4开始安装Windows CE平台SDK (H/PC Pro)。
图1.2.1.5准备开始安装Windows CE Platform SDK(掌上电脑1.2)。
图1.2.1.6准备开始安装Windows CE Platform SDK (Pocket PC)。
1.2.2微软嵌入式工具3.0简介
Microsoft eMbedded Visual C++ 3.0是微软专门为开发Windows CE应用程序而开发的集成开发环境。有了这个集成开发环境,可以快速开发特定的应用程序。像Microsoft Visual C++一样,它是一个强大而灵活的开发工具。界面也很像。与Visual C++6.0不同,微软eMbedded Visual C++ 3.0不支持多文档界面和非32位函数。Windows下的其他API函数不一定支持Unicode字符。除此之外,它的编译和调试选项也不一样,如图1.2.1。
因为在Windows CE系统下运行的程序不仅与设备类型有关,还与具体设备的CPU类型有关,不同的CPU类型需要不同的编译代码,所以在编码和调试的过程中,要注意选择相应的设备类型、CPU类型和运行环境。
1.2.3 Windows CE Tools 3.0简介
Windows CE Tools 3.0是一个开放的、可扩展的32位操作系统,主要用于安装嵌入式开发的仿真环境,使开发的程序可以像在相应的嵌入式设备上一样进行调试和运行。
Windows CE为不同的Windows应用程序平台提供了不同的模拟器系统,例如Pocket PC的Pocket PC emulation和CH/PC Pro的CH/PC Pro Emulation。掌上电脑1.2仿真是针对掌上电脑1.2的,它们的界面如图1.2.3.1,图1.2.3.2,图1.2.3.3所示。
Windows CE为程序员提供了一个类似微软Win32API、ActiveX控件、消息队列机制(MSMQ)、对象组件模型(COM)、动态模板库(ATL)和MFC库的环境。同时,Windows CE还提供了同步设备ActiveSync,方便桌面设备与嵌入式设备连接进行串行通信、红外接口通信或网线通信。
图1.2.3.1掌上电脑1.2模拟器界面图1.2.3.1掌上电脑模拟器界面。
图1.2.3.3 H/PC Pro模拟器界面
1.2.4操作环境
对于一个嵌入式应用来说,它的主要目的是为了应用,所以只能在最终的运行环境中发挥部分功能。运行环境包括软件环境和硬件环境。软件环境包括Windows CE(V3.0或其升级版,如Windows CE)和硬件环境,如掌上电脑、掌上电脑Pro (H/PC Pro)、掌上电脑等嵌入式设备需要16M内存及其配套设备,如GPS终端。
第二章hmap控制及其相关设置
2.1 hmap控件介绍
HMap(手绘地图)是一个基于COM模型的嵌入式GIS开发平台。随着移动信息设备(MID)的发展,GIS逐渐进入后PC发展阶段,嵌入式GIS的应用日益增多,迫切需要一个基础开发平台。hMap是满足这一市场需求的基础软件,可用于快速开发和构建移动信息设备的各种GIS/GPS/RS应用系统,如PDA GIS应用、卫星导航等。
2.2数据准备
2.2.1数据格式
HMap内核精炼,浏览速度极高,数据压缩比高,有效解决了地图数据量与各种移动信息设备存储空间有限的矛盾。PDA采用DS3的压缩格式,占用存储空间少,有效解决了PDA设备内存相对较小的普遍问题。系统运行更加稳定和快速。采集的数据可以转换成电力自动化管理软件的标准格式。Hmap数据包含两种类型的数据:不可修改数据和可修改数据。在hMap中,它们被放入各自的数据层,分别管理相应类型的数据。
数据类型
层内数据存储格式
可编辑吗?
是否缓冲内存。
不可修改
SP3
DB3
SPX
不
不
图形文件
属性文件
索引文件
可修改性
DS3通信
DB3
是
是
图形文件
属性文件
数据目录设置
将数据复制到wce 300 \ MS pocket PC \ Emulation \ palm 300 \ My Documents目录下。
2.3通用字符串类型环境
Windows CE是基于Unicode的操作系统,Windows NT和Windows 2000同时支持Unicode和ANSI,而Windows 9x是基于ANSI的操作系统。考虑到这种情况,基于hMap的程序不能使用Unicode字符串类型,如LPWSTR,因为Windows 9x不这样做。不能使用CHAR、LPSTR等ANSI字符串类型,因为Windows CE不支持。因此,必须使用通用字符串类型。通用字符串类型是根据不同的目标操作系统映射到正确字符集(ANSI或Unicode)的宏。这些可用的字符串类型包括:TCHAR、TCHAR*、LPTSTR、LPCTSTR。当然,也可以使用MFC CString类。程序中的硬代码串必须包含在TEXT宏、L宏或_T宏中。同时,你需要选择正确的RTL(运行时库)字符串处理函数,但你不能使用ANSI或Unicode函数。
2.4控件类库文件设置和库编译文件设置
2.4.1控件类库文件设置
当构建新的基于控件的项目时,为了使用控件hmap,需要复制控件hMap。h,HMAPWND。HMAP。CPP和HMAPWND。CPP到新建立的项目目录中,然后将它们引入到项目中,这样控件的相应功能就可以使用了。具体使用方法,请参见下文“基于HMAP开发示范项目”一章。
2.4.2库编译文件设置
应用程序的编译和调试需要连接到动态库。调试版本和发布版本都需要两个动态链接库文件,MFC CE300。DLL和OLE CE300。DLL(两个文件中的“300”代表WindowsCE的对应版本),所以需要设置这两个文件的目录。有以下两种方法:
1)将MFC Ce300.dll和OLE Ce300.dll两个文件复制到以下路径的目录中:\ Windows ce tools \ wce 300 \ MS pocket PC \ Emulation \ palm 300 \ Windows完成。
2)新项目建立后,直接编译项目。此时,Microsoft eMbedded Visual C++会自动搜索、查找并连接两个文件,从而完成设置。
2.5控制注册
该控件必须由编译环境应用才能使用,因此有必要按如下方式注册hmap控件:
将hmap.ocx复制到以下目录:\ Windows ce tools \ wce 300 \ MS pocket PC \ Emulation \ palm 300 \ Windows。
在同一个目录下搜索regsvrce.exe文件,运行后会弹出注册窗口(见图2.3.1)。
填写hmap.ocx,选择“注册”作为动作选项,软后点击“确定”。如果注册成功,会弹出注册成功窗口(见图2.3.2),否则会弹出错误窗口(见图2.3.3),检查后可以重新注册。
图2.3.1注册窗口
图2.3.3注册失败。
图2.3.2控件成功注册。
第三章是基于hMap的项目开发实例。
了解了以上基本的开发环境和相关设置后,我们再来开发具体的项目,从而对基于hMap的开发有更清晰的认识。
3.1实现功能
演示如何打开设置好的地图,放大,缩小,漫游,退出等基本功能。
3.2具体工程实例
首先,我们将创建一个新项目,然后实现基本的操作功能。
3.2.1项目创建
启动eMbedded Visual C++ 3.0,选择文件/新建,弹出“新建”对话框(见图3.2.1.1),键入项目存储路径“D:\work”和项目名称MapZoom,点击“确定”按钮。
在步骤1中选择单个文档和语言设置,然后单击“下一步”(见图3.2.1.2)。
在步骤2中选择ActiveX控件,然后单击“下一步”按钮(参见图3.2.1.3)。
然后在剩下的步骤中选择默认设置(见图3.2.1.4 ~图3.2.1.5),项目就创建好了。
在创建的项目中设置WCE配置(设置见图3.2.1.6),编译项目以自动链接MFC CE300.DLL和OLE CE300.DLL或根据第2章2.5.2节进行设置。
6)将hmap类库的文件引入到项目中(见图3.2.1.6 ~图3.2.1.8),复制HMAP.h,HMAP。CPP,HMAWND。CPP到新建立的项目目录中,然后将其引入到项目中。用这四个。
至此,基于hmap开发的新项目已经成功立项。基本功能可以按照下一节的步骤实现。
图3.2.1.1设置项目路径和项目名称
图3.2.1.2选择单个文档
图3.2.1.3源文件和MFC库设置
图3.2.1.4创建的类
图3.2.1.5点击"确定"创建项目。
图3.2.1.6 WCE配置设置
图3.2.1.6控件类库文件介绍
图3.2.1.7选择要导入的文件。
图3.2.1.8引入文件后的工作区栏
数据和控制设置
按照第二章2.3节和2.4节的方法复制并注册示例数据和控件hmap.ocx的整个数据文件夹(武汉)。
3.2.3头文件添加和控件对象创建
1,加在stdafx.h后面
#包含“hmap.h”
#包含" hmapwnd.h "
2.在MapZoomView.h中添加
#包含" hmapwnd.h "
3,在MapZoomView.h中声明
//实现
_ DHMap m _ hMapCtl//声明一个对象
UINT m _ nCurTool//定义光标
4.在Resource.h中定义对象IDC_hMapCtl的ID值:
IDC_hMapCtl ×××
(“×××”代表ID值,根据Resource.h中的ID列表设置)。
5.在MapZoomView.cpp中创建控件对象。
int CMapZoomView::OnCreate(LPCREATESTRUCT LPCREATESTRUCT)
{
if(CView::OnCreate(lpCreateStruct)= =-1)
return-1;
//创建一个hmap控件
CRect rectClient
GetClientRect(& amp;rect client);
如果(!m_hMapCtl。Create(_T("hello "),WS_VISIBLE,
rectClient,this,IDC_hMapCtl,NULL,FALSE,NULL))
{
destroy window();
返回FALSE
}
返回0;
}
创建方法为class wizard-objectid \ CMP view-messages \ WM _ create-member-functions \ won create,然后编辑代码并添加以下代码:
//创建一个hmap控件
CRect rectClient
GetClientRect(& amp;rect client);
如果(!m_hMapCtl。Create(_T("hello "),WS_VISIBLE,
rectClient,this,IDC_hMapCtl,NULL,FALSE,NULL))
{
destroy window();
返回FALSE
}
这些代码就可以了。
上面做了控件对象的定义和创建,后面几节会实现基本功能。
3.2.4基本功能实现
3.2.4.1退出功能实现
添加退出菜单按钮,只需将退出ID设置为ID_APP_EXIT。
菜单项添加步骤如下:
在Workspace中打开ResourceView选项卡窗口,在菜单栏中选择IDR_MAINFRAME,双击它(见图3.2.3.1.1)。
在右侧工作区的下部,会显示一个菜单创建栏。双击空白菜单项,弹出菜单项属性窗口(见图3.2.3.1.2)。
在常规页签中填写ID和标题项(ID:ID_APP_EXIT Caption :Exit)(见图3.2.3.1.3)。
关闭菜单项属性窗口,退出菜单项被创建(见图3.2.3.1.4)。
图3.2.3.1.1工作区中的资源视图选项卡窗口
图3.2.3.1.2菜单项属性窗口
图3.2.3.1.3填写ID和标题。
图3.2.3.1.4创建退出菜单项的编号。
3.2.4.2地图开放功能的实现
菜单创建:创建方法与3.2.4.1节的菜单项添加步骤相同,只是第三步的ID和标题项是ID:ID _ zoom _ open map Caption:open map。
方法响应:class wizard-object sid \ IDR _ file _ open map-messages \ cammnd弹出对话框点OK(如果已经有函数,则该函数在成员函数中以蓝色显示或者自己选择已有函数),然后编辑MapZoomView.cpp中的代码:
//打开地图
void CMapZoomView::OnZoomOpenmap()
{
CWaitCursor等待;//进行长度处理。
等等。restore();//恢复等待光标。
IEmLayers层(m_hMapCtl。GetLayers());
//lyr river . setgeodataset(text(" \ \ my documents \ \ Xiamen \ \ water system . ds3 ");
{
IEmMapLayer lyr
lyr。CreateDispatch(TEXT("hMap。MapLayer "));
Lyr.setgeodataset (text ("\ \我的文档\ \武汉\ \ background . ds3 ");
层次。添加(lyr);
}
{
IEmMapLayer lyr
lyr。CreateDispatch(TEXT("hMap。MapLayer "));
Lyr.setgeodataset (text ("\ \我的文档\ \武汉\ \ road . ds3 ");
层次。添加(lyr);
}
IEmRectangle emRect(m_hMapCtl。getfull extent());
emRect。scale rectangle(0.3);
m_hMapCtl。set extent(em rect);
}
3.2.4.3放大功能的实现
菜单创建:创建方法与3.2.4.1节的菜单项添加步骤相同,只是第三步中的ID和标题项是ID: ID _ zoom _ zoom in标题:放大。
方法响应:class wizard-object sid \ IDR _ file _ zoom in-messages \ cammnd弹出一个对话框,确定(如果已经有一个函数,则该函数在成员函数中以蓝色显示或者自己选择已有的函数),然后编辑MapZoomView.cpp中的代码:
void CMapZoomView::OnZoomZoomin()
{
IAwryRectangle emRect(m_hMapCtl。GetAwryExtent());
emRect。scalerectangle(0.6);
m_hMapCtl。SetAwryExtent(em rect);
}
它实际上重写了CMapZoomView::OnZoomOpenmap()中的最后三行代码。
3.2.4.4收缩功能实现。
菜单创建:创建方法与3.2.4.1节的菜单项添加步骤相同,只是第三步的ID和标题项是ID: ID _ zoom _ zoom out标题:zoom out。
方法响应:编辑MapZoomView.cpp中的代码,类似于放大函数。
void CMapZoomView::onzoomzoomut()
{
IAwryRectangle emRect(m_hMapCtl。GetAwryExtent());
emRect。scalerectangle(1.5);
m_hMapCtl。SetAwryExtent(em rect);
}
3.2.4.5漫游功能的实现
菜单创建:创建方法与3.2.4.1节的菜单项添加步骤相同,只是第三步的ID和标题项是ID: ID _ zoom _ zoom caption: pan。
方法函数响应:需要响应一个事件,需要添加一个响应事件的函数(对于每个事件,需要添加一个响应事件的函数)。
在MapZoomView.h中添加声明
CMapZoomView类:公共CView
{
……
受保护:
……
//响应事件
afx _ msg void onemmousdown(OLE _ XPOS _ PIXELS x,OLE _ YPOS _ PIXELS y);
DECLARE_EVENTSINK_MAP()
};
将以下代码添加到CMapZoomView.cpp中
//响应事件
#define DISPID_EMMOUSEDOWN 6L
BEGIN _ event sink _ MAP(CMapZoomView,CView)
ON_EVENT(CMapZoomView,IDC_hMapCtl,DISPID_EMMOUSEDOWN,OnEmMouseDown,VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
END_EVENTSINK_MAP()
在CMapZoomView.cpp中定义OnZoomPan
void CMapZoomView::OnZoomPan()
{
m _ nCurTool = 1;//给出漫游状态。
}
在CMapZoomView.cpp中定义OnEmMouseDown事件。
//响应事件
void CMapZoomView::onemmousdown(OLE _ XPOS _ PIXELS x,
奥莱YPOS像素y)
{
if(m_nCurTool == 1)
m_hMapCtl。潘();
}
至此,你已经能够使用EVC工具进行简单的基于hMap的嵌入式开发,实现相对简单的功能。当然,随着学习的深入,你会发现hMap强大而神奇的功能。
第四章地图查询
鉴于地图查询功能比第3章中的基本功能更重要、更复杂,本简介将其作为单独一章进行介绍。
地图查询包括图形属性和属性查询。
图形转属性查询包括:点查询、矩形查询、多边形查询、圆查询等。
从属性到图形的查询主要是模糊查询。
4.1属性查询
调用层中的接口SearchExpression返回记录集。
例如:
IemLayer lyr
lyr。搜索表达式(表达式)
Expression = "NAME = sequoia "或
Expression = "名字像红杉"
4.2图形查询
相应的MouseDown事件获取一个图形对象,如点、线、面、矩形、圆(多边形表示)。
在hmap中调用trackline,trackrectangle,trackcircle,trackpolygon。
调用图层中的接口SearchShape(步骤1中获得的图形对象)并返回记录集。
例如:
//矩形搜索
void rect query(_ DH map & amp;hMapCtl,CMapSelection & amp选择)
{
IEmLayers层(hMapCtl。GetLayers());
IEmRectangle emRect(hMapCtl。track rectangle());
if(emRect.m_lpDispatch == NULL)
{
hMapCtl。RefreshNoRedraw();
返回;
}
HMAPSELECTED selectObject
for(int I = 0;我& lt层次。GetCount();i++)
{
IEmMapLayer lyr(图层。item(cole variant((short)I)));
LPDISPATCH pIUnknown = lyr。SearchShape(emRect,TEXT(" ");
if(pIUnknown == NULL)
继续;
IRecordset记录(pi unknown);
long nNameFieldIndex = recs。getfield index(TEXT(" NAME "));
if(nNameFieldIndex 0)
一次选举。add(select object);
}
}
hMapCtl。RefreshNoRedraw();
}
第五章常见问题
5.1Q:微软嵌入式可视化工具3.0到底是什么?
答:eMbedded Visual Tools 3.0是嵌入式开发者在微软Windows CE操作系统上为新一代32位设备编写软件应用的一套相关工具。提供微软嵌入式Visual C++ 3.0开发系统完整版,微软嵌入式Visual Basic 3.0开发系统完整版,SDK,远程工具及相关文档。
5.2问:嵌入式可视化工具3.0可以支持哪些微处理器?
答:eMbedded Visual C++提供以下微处理器类型的编译器:ARM 720、SA1100、MIPS、MIPS 16、MIPS FP、PPC、SH3、SH4、Thumb、x86、x86设备模拟器。
5.3问:嵌入式可视化工具3.0支持仿真操作吗?
答:是的。但是,只有在Microsoft Windows 2000 Professional或Microsoft Windows NT Workstation 4.0下运行时,才支持模拟操作。
5.4问:可以在Windows 98或Windows 98第二版下运行嵌入式可视化工具3.0吗?
答:嵌入式可视化工具3.0不能安装在Windows 98下。在Windows 98 Second Edition平台上运行时,将无法执行模拟操作。但它还有其他功能。
5.5问:在哪里可以获得嵌入式可视化工具3.0?
答:访问微软开发者工具箱网站。
下载网站:/do...CE_EMBDVTOOLS30.exe下载后,按照安装向导的说明完整安装后,可以得到以下软件:微软嵌入式可视化工具(包括EVC3.0和EVB 3.0),Pocket PC的SDK,SDK (HPC Pro),SDK(掌上电脑PC1.2)包含了一个可以在编译时加载运行,可以直接在桌面运行的仿真环境。下载的软件包总大小为304M,或者也可以获得以下地址:
Microsoft嵌入式可视化工具3.0下载页面
/mobile/downloads/emvt30.asp
CDKey(微软免费提供):TRT7H-KD36T-FRH8D-6QH8P-VFJHQ
Pocket PC 2002软件开发工具包
/download/pocket PC/Install/2002/NT5XP/EN-US/PPC 2002 _ SDK . exe
Pocket PC 2002模拟器图像(简体中文模拟器)
/download/pocket PC/Utility/2002.1/NT5XP/EN-US/CHS imp-noradio . exe
5.6问:为什么注册hmap.ocx时会弹出注册不成功对话框?
答:请确认hmap.ocx是否在\ windows ce tools \ wce 300 \ MS pocket PC \ Emulation \ palm 300 \ Windows的Windows目录下,还要确认MFC Ce300.DLL和OLE Ce300.DLL是否在同一个目录下,否则请按照2.4.2节设置库编译文件。
5.7问:代码正确但编译不成功怎么办?
答:首先检查数据路径设置是否正确(见2.2.2节),控制路径是否正确,注册是否成功(见2.5节)。然后,确定WCE配置工具栏中的设备类型、CPU类型和仿真器设置是否正确(参见第3.2.1节,步骤5),并检查代码是否正确。
附录:全球定位系统的使用
全球定位系统简介
GPS是由美国国防部开发的基于卫星的无线电导航系统。GPS每天24小时为全球海陆空用户提供三维位置、速度和时间。它比其他无线电导航系统更精确。随着全球定位系统软硬件的不断完善,其应用领域也在不断被探索,已经遍布国民经济的各个行业,并逐渐渗透到人们的日常生活中。
GPS系统包括三部分:空间段-GPS卫星星座;控制部分-地面监控系统;用户段-—GPS信号接收器。
第二,空间部分
空间部分由分布在6个轨道平面上的24颗卫星组成。卫星的轨道高度为20200公里,倾角为55度,周期为12小时。卫星的轨道分布确保在世界上任何时候都能看到至少6颗卫星。卫星不断向用户提供位置和时间信息。
第三,地面控制部分
控制部分由一个主控制站、五个监测站和三个注射站组成。主控制站位于科罗拉多州。监控站跟踪视野内的所有GPS卫星,收集卫星测距信息,并将收集到的信息发送给主站。主站计算卫星的精确轨道,生成每颗卫星的导航信息,通过注入站传输给卫星。
第四,用户细分
用户部分由接收机、处理器和天线组成。通过接收卫星广播信息来计算用户的位置、速度和时间。
GPS的概念是基于卫星测距的。用户可以通过测量他们到卫星的距离来计算他们的位置。卫星的位置是一个已知值。每个GPS卫星发送一个位置和时间信号。用户接收机测量信号到达接收机的时间延迟,相当于测量用户与卫星之间的距离。通过同时测量四颗卫星,可以解算出位置、速度和时间。
第五,GPS的应用
基于专网集群通信平台的移动目标监控管理系统
基于GSM短信功能的移动目标监控管理系统
GPS在国民经济建设中的应用
GPS在大地控制测量中的应用
GPS在地形、地籍和房产测量中的应用
GPS在公安交通系统中的应用
GPS在海洋测绘中的应用
GPS在航海和航空导航中的应用
GPS在农业、林业、旅游业和野外调查中的应用
手持GPS在军事领域的应用
设备类型
CPU类型
运行时环境
图1.2.2.1微软嵌入式Visual C++3.0工具栏(WCE配置)