鹰眼

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于MAPX控件的鹰眼图实现

许士敏

摘要:MapX控件是一个常用的GIS功能组件,而鹰眼图是GIS中一个基本的功能。本文简介了MapX并详细说明在Visual Basic和Visual C++开发环境下利用MapX控件实现鹰眼图的方法。

关键词:MapX控件GIS VB VC

一、引言

地理信息系统 (GIS)是计算机技术和信息系统共同发展的产物,但是最初的 GIS系统过于专业化,主要运用于地理、地质等专业部门,加上处理设备的昂贵,一度曾阻碍了它的发展[1]。随着计算机技术的发展和用户需求的不断提高,特别是 GIS系统在军事及其它非专业领域内的应用,更是加快了它的发展,使其在世人面前重放光彩,新的信息可视化地图信息系统自重并成为计算机信息系统的一种发展趋势[2]。结合GIS工具软件与当今可视化开发语言的集成二次开发方式就成为GIS应用开发的主流。它的优点是既可以充分利用GIS工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,而且可靠性好、易于移植、便于维护。尤其是使用OCX技术利用GIS功能组件进行集成开发,更能表现出这些优势。Map Info公司顺应这一发展潮流,该公司开发的 MapX就是一种受到用户广泛欢迎的功能强大的地图分析功能的 ActiveX控件,本文将对该控件作简要的介绍。

二、 Map X的功能简介

Map Info公司吸取了传统 GIS系统的精华,并借助于计算机技术的发展,及时将 GIS概念从大中型计算机的专用工作站上普及到普通桌面 PC上,开创了一种崭新的信息系统模式。MapX是 Map Info公司的能向用户提供强大地图分析功能的 Active X控件产品。MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX控件产品。由于它是一种基于Windows操作系统的标准控件,因而能支持绝大多数标准的可视化开发环境如Visual C++、Visual Basic、Delphi、PowerBuilder等。编程人员在开发过程中可以选用自己最熟悉的开发语言,轻松地将地图功能嵌入到应用中,并且可以脱离MapInfo的软件平台运行。利用MapX,能够简单快速地在企业应用中嵌入地图化功能,增强企业应用的空间分析能力,实现企业应用的增值。MapX采用基于MapInfo Professional的相同的地图化技术,可以实现MapInfo Professional具有的绝大部分地图编辑和空间分析功能。而且MapX提供了各种工具、属性和方法,实现这些功能是非常容易的。

鹰眼图是GIS中一个基本的功能,鹰眼图又名缩略图,顾名思义,在鹰眼图上可以象从空中俯视一样查看地图框中所显示的地图在整个图中的位置。如图1所示:以北京市地图为例,鹰眼的大小可分为北京市城区和北京市全区两个等级。Windows下的可视化开发工具现在大家接触得最多的就是VC,VB,下面将详细介绍在VC与VB环境下鹰眼图的具体实现,从这也可以看出利用MapX开发GIS应用程序的方法和技巧。

图1 鹰眼图示意图

三、VB下鹰眼图的实现

VB下鹰眼图实现的思路是这样的:在某一Form上放两个MapX控件:Map1(主图),Map2(鹰眼图);然后在鹰眼图上创建一个图层,在该图层上添加一个矩形Feature,该矩形的大小随着主图边界而变化。

具体实现参考下面详细代码。

Dim m_Layer As Layer ’鹰眼图上临时图层

Dim m_Fea As MapXLib.Feature ’鹰眼图上反映主地图窗口位置的Feature

Private Sub Form_Load()

Set m_Layer = yers.CreateLayer("Rectlayer") ’在Map2创建图层End Sub

’根据map1的Bounds在Map2上绘制矩形Feature

Private Sub Map1_MapViewChanged()

Dim tempFea As MapXLib.Feature ’声明Feature变量

Dim tempPnts As MapXLib.Points ’声明Points变量

Dim tempStyle As MapXLib.Style ’声明Style变量

’矩形边框还没有创建时

If m_Layer.AllFeatures.Count = 0 Then

’设置矩形边框样式

Set tempStyle = New MapXLib.Style ’创建Style对象

tempStyle.RegionPattern = miPatternNoFill ’设置Style的矩形内部填充样式

tempStyle.RegionBorderColor = 255 ’设置Style的矩形边框颜色

tempStyle.RegionBorderWidth = 2 ’设置Style的矩形边框宽度

'在图层创建大小为Map1的边界的Rectangle对象

Set tempFea = Map2.FeatureFactory.CreateRegion(Map1.Bounds, tempStyle)

Set m_Fea = m_Layer.AddFeature(tempFea) ’添加矩形边框

Else ’否则,根据Map1的视野变化改变矩形边框的大小和位置

With m_Fea.Parts.Item(1)

.RemoveAll ’除去已有的矩形边框的顶点

’添加大小和位置已变化的矩形边框的四个顶点

.AddXY Map1.Bounds.XMin, Map1.Bounds.YMin

.AddXY Map1.Bounds.XMax, Map1.Bounds.YMin

.AddXY Map1.Bounds.XMax, Map1.Bounds.YMax

.AddXY Map1.Bounds.XMin, Map1.Bounds.YMax

End With

m_Fea.Update ’更新显示

End If

End Sub

’鹰眼图上鼠标单击用来导航主图,其方法是把鼠标处的坐标设置为主图的中心

Private Sub Map2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim MapX As Double ’定义x坐标变量

Dim MapY As Double ’定义y坐标变量

’把屏幕坐标转换为地图坐标

Map2.ConvertCoord X, Y, MapX, MapY, miScreenToMap

’设置主图的中心x坐标和y坐标

Map1.CenterX = MapX

Map1.CenterY = MapY

End Sub

四、VC下鹰眼图的实现

VC下鹰眼图实现的思路与VB是一样的,只不过VC的可视化程序没有VB高,VC更多的是利用代码来实现一定的功能。如利用下面的两句代码创建两个控件,分别用来显示主图和鹰眼图。

m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,300,300), this, IDC_MAP1);

m_eagleMapx.Create(NULL, WS_VISIBLE, CRect(0,0,400,400), this,IDC_MAP2);

另外在初始化程序时,还需创建一个图层,用于显示鹰眼图上矩形Feature。

m_eagleMapx.GetLayers().CreateLayer("RectLayer");

鹰眼图的主要功能是在主图发生变化时,在鹰眼图上用变化的矩形框来显示当前主图显示的边界。这里主要利用MapX 控件内置的消息MAPX_DISPID_MAPVIEWCHANGED映射的函数来完成该功能,当主视图发生变化时,MapX 控件发出消息,调用OnMapViewChanged()函数进行相应的处理,所以主要的代码在OnMapViewChanged()函数中实现。

ON_EVENT(CMapXSampleView, IDC_MAP1, MAPX_DISPID_MAPVIEWCHANGED, OnMapViewChanged, VTS_NONE)

//主视图发生变化时,调用如下的函数

void CMapXSampleView::OnMapViewChanged()

相关文档
最新文档