什么是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配置)