用VC++实现矢量地图背景下的实时显示.docx
上传人:sy****28 上传时间:2024-09-14 格式:DOCX 页数:6 大小:18KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

用VC++实现矢量地图背景下的实时显示.docx

用VC++实现矢量地图背景下的实时显示.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

标题:用VC++实现矢量地图背景下的实时显示摘要本文介绍了在VC++实现的实时显示系统中,用OLE方式嵌入MapInfo矢量地图的编程方法,简要叙述了其实现过程。一、前言电子地图应用作为一门新兴学科,已不仅限于地图制作中。本文利用VC++和OLE(ObjectLinkingandEmbedding,对象连接和嵌入)编程技术,实现了实时信息在矢量地图背景上的显示。程序应用于显示处理终端,接收并处理网络信息的部分在不同的系统中有不同的要求,这里不再赘述。MapInfo矢量地图用图层方式进行存储和管理,每个图层对应地图上的一类要素(如居民地,水系,铁路,公路等),对于每个包含图形信息的图层,需要有4个文件(.dat,.tab,.map,.id)支持。MapInfo地图允许嵌入一个地图窗口到任何能接受OLE对象的应用程序中。从服务器(如MapInfo)插入一个OLE对象到容器应用程序(如MicrosoftWord),并在该应用程序中对这个对象进行处理。被嵌入的对象是来自服务器应用程序的对象的一个副本。对象一旦位于容器中,它将不再被链接到源对象。在VC++应用程序中用OLE方式嵌入MapInfo进程,需定义了一个MapInfo对象(DMapInfo类),DMapInfo类在MapInfo类型库(Mapinfow.tlb)中定义。MapInfo软件提供了自己的编程语言MapBasic,VC++对地图进程的操作主要通过发送MapBasic命令来实现。二、创建程序框架程序框架是用MFC实现的,MFC应用程序向导(AppWizard)生成了大部分的代码,然后加入MapInfo进程。步骤如下:1.创建一个新项目,项目类型选择MFCAppWizard(exe),项目名称设为MapApp,其它按照提示进行设置即可。应用程序向导自动生成了三个类:CmapAppApp应用程序类CmapAppDoc文档类CmapAppView视图类CmainFrame主框架类2.添加MapInfo类型库运行类向导,单击增加类按钮(AddClass…),选择"Fromatypelibrary",找到"Mapinfow.tlb"文件并打开,在"ConfirmClasses"中选择"DMapInfo"类,单击OK确认输入并关闭对话框。现在MapApp应用程序中已添加了DMapInfo类,并增加了"mapinfow.h"和"mapinfow.cpp"两个源文件。3.用OLE方式嵌入MapInfo进程在"mapApp.cpp"中CMapAppApptheApp语句下面加入下面的语句:DMapInfomapinfo;file://mapinfo对象在CMapAppApp::InitInstance()函数中增加OLE的初始化,代码如下:程序清单1MapApp.cpp文件BOOLCMapAppApp::InitInstance(){if(!AfxOleInit())file://OLE初始化{file://失败AfxMessageBox("OLE失败!");returnFALSE;}if(!mapinfo.CreateDispatch("MapInfo.Application"))file://地图窗口处理进程{file://失败AfxMessageBox("FailedtocreateMapInfodispatchclass!");file://::MessageBox(0,mapinfo.GetFullName(),"Amazing!",MB_OK);returnFALSE;}/*本处省略MFC自动生成的代码*/}将"mapbasic.h"文件拷贝到本项目的目录中,在"stdafx.h"中增加以下代码,把mapinfo说明为全局变量:#include"mapbasic.h"#include"mapinfow.h"externDMapInfomapinfo;file://全局变量,地图窗口对象4.显示地图窗口为CmapAppView类增加地图窗口的标识和句柄变量,在MapAppView.h文件中添加如下代码:unsignedlongm_lWindowid;file://地图窗口标识HWNDm_hWindowHwnd;file://地图窗口句柄打开类向导窗口,在ClassName下拉列表框中选择类CmapAppView,ObjectIds列表框中选择CmapAppView,Messages列表框中选择OnInitialUpdate,单击AddFunction为CmapAppView重载OnInitialUpdate()函数,然后在函数中添加显示地图窗口的代码。程序清单2MapAppView.cpp文件voidCMapAppView::OnInitialUpdate(){charstr[