2023年11月30日发(作者:)
GeoMap学习教程
GeoStar之二次开发工具(GeoMap)
一、 概述
GeoMap作为GeoStar NT版的二次开发工具,以COM (Component Object Model)为基础,
以“控件 + 对象”的形式,向二次开发用户提供GeoStar NT版的强大功能。
二次开发用户可以利用GeoMap以及其它软件供应商提供的大量构件,诸如绘图、多媒体
和数据库对象等,来根据终端用户的需要规划设计满足特定需求的应用程序。
GeoMap由一个OLE控件 —GeoMap和一组近20个OLE自动化对象构成,应用于标准
Windows开发环境,用户可以根据需要选择合适的开发工具。GeoMap是基于Windows NT 4.0
开发的,因而其开发平台也立足于Windows NT 4.0,Windows NT 4.0下的Visual Basic,Dephi,
PowerBuilder,Visual Foxpro等环境均适合利用GeoMap进行的软件开发。
用户可以利用GeoMap开发出具有如下功能的应用程序(未列出所有功能):
Ÿ 按照工程、工作区并且分层、地物类组织地图数据。
Ÿ 分层、地物类显示地图,如道路、河流、边界。
Ÿ 地图的漫游与缩放。
Ÿ 绘制几何地物,如点、圆、线、多边形等。
Ÿ 显示地图注记。
Ÿ 符号化显示地物。
Ÿ 点查询方式选中地物。
Ÿ 线穿越查询方式选中地物。
Ÿ 范围包含查询方式选中地物。
Ÿ 计算点、线或面边界的缓冲区。
Ÿ 缓冲方式查询地物,可以选中距离点、线或面边界一定距离内的所有地物。
Ÿ 利用SQL表达式选中地物。
Ÿ 对选中的地物进行统计。
Ÿ 专题制图
Ÿ 在矢量地图上叠加影象,进行影象与矢量图的匹配。
Ÿ 添加、修改、删除选中地物的属性数据。
Ÿ 添加、修改、删除各种几何类型的地物。
GeoMap学习教程
Ÿ 添加、修改、删除地图注记。
Ÿ 地图数据的打印与打印预览。
Ÿ GeoStar数据与其它GIS软件间数据的转换。
对GeoMap提供的功能进行分类如下:
功能名称描述
基本操作包括所有用户通过鼠标操作获得一个几何对象(圆、矩形框、折线、
数据的组织与维护包括系统中工作区、工程的创建、打开、关闭,工作区的提交,
可视化操作包括地图数据的缩放与漫游,地图数据的分层、地物类显示,显
缓冲分析计算包括点、折线、多边形缓冲区的计算。
地物查询包括按照点(Pick)、线(Cross)、面(Contain)的查询操作,利
编辑操作包括增加、修改、删除点、线、面、注记等地物对象;线、面边
专题制图根据来自各种数据源的属性数据的特征和制图目的,选用适当的
影象叠加以影象作为矢量图的背景,影象图与矢量坐标匹配,同步缩放。
打印输出包括打印输出到一页和按照给定的比例尺分页打印两种方式,提
数据交换实现其它GIS软件数据向GeoStar数据格式的转换,支持的外部
多边形等)的方法。
层的维护,地物类的维护等。
示比例尺的控制,显示范围的控制,层与地物类显示顺序的控制,
显示窗口的风格、属性的控制,地物的符号化显示、随图放大显
示、注记显示等。
用缓冲分析计算功能实现的缓冲查询操作,对查询结果的维护,
对查询结果的突出显示,空间对象与相应对象的属性数据数据之
间的联系的维护,并利用这种联系实现空间对象与属性数据的双
向查询等。
界的内点增加、移动、删除;线、面对象的分割、合并。
制图方法和图型以图形的方式再现属性数据的特征,包括分级统
计制图、分区统计制图、质底法制图。
供打印输出前的预览功能。
数据格式包括Arc/Info E00, MapInfo交换格式,AutoCAD DXF
格式,等。
2
GeoMap学习教程
二、 GeoMap的设计基础
传统的软件开发模式开发出的应用系统,往往缺乏结构性,其资源使用的效率低下,并且
难以与其它的应用程序实现真正的互用,系统的可靠性和可维护性在很大程度上取决于开发人
员的经验和能力。基于部件的新型的软件开发技术,为应用系统的开发提供了新的思路,开发
人员首先实现可靠的、小的对象模块(部件),或是直接从其他软件开发商获得需要的功能部
件;然后利用这些功能部件装配成更复杂的符合应用要求的系统。通过控制各个小部件的可靠
性和可维护性,实现对整个应用系统的可靠性及可维护性的控制。
目前,在如何编制部件的技术规范方面,存在着两个阵营:微软公司的部件对象模(COM)
和多厂商的公共对象请求中介结构(CORBA),这两个标准的目标都是让开发人员通过装配部
件来生成应用程序,这些部件带有可预测的标准接口,开发人员不必关心部件位于何处、是由
谁设计的。
武汉吉奥信息工程技术有限公司研制的GeoStar的部件开发平台GeoMap是基于微软公司
的Windows NT4.0,因而微软公司的COM及其分布式部件模型(DCOM)成为GeoMap开
发的技术基础。COM技术是一种面向对象的技术,与C这样的技术相比,它是一种二进制
++
的标准,所以当部件升级时,应用不需要编译,而且COM不局限于某一种开发语言,利用不
同语言开发的、支持COM的部件可以混合使用。新的COM标准有可能实现网络透明,也就
是说开发人员使用部件开发的应用,可以直接利用网络上的COM实现分布式应用而不需网络
编程。
OLE(ActiveX)技术可以看作是微软公司对其所提出的COM模型的具体实现,COM能
被广泛接受为部件软件开发模型的一个主要原因就是由于OLE,OLE使COM不再仅仅是一个
模型或规范,它使开发者能够真正体会到基于COM的软件设计方式的优越性。OLE/ActiveX
具有相当复杂的技术内容,它包括若干种适应不同需要然而有密切相关的技术,主要包括:结
构化存储(Structured Storage),单一数据传输(Uniform Data Transfer),拖放(Drag and Drop),
OLE复合文档(又分成嵌入(Embedding)、链接(Linking)和在线编辑(Visual Editing)),
假名(或称智能化名(Name and Binding)),自动化(OLE Automation)和控件(OLE Control)。
如图2-1所示。
3
GeoMap学习教程
OLE Control
OLE Documents
In-Place Activation
(Visual Editing)
Linking
PropertyProperty Change
PagesNotification
Events
Embedding
Drag and DropOLE Automation
Uniform Data TransferNaming and BindingConnectable Objects
Persistent Objects
Structured StorageType Information
Component Object Model:
Objects and Interfaces, Query Interface
图2-1 OLE技术构成
GeoMap的设计利用了OLE/ActiveX技术中的自动化技术及控件技术。GeoMap提供一
个可视化的控件和一组自动化对象,作为自动化服务器(Automation Servers),开发者利用自
动化控制器(Automation Controller),如Visual Basic, Delphi, Visual C, PowerBuilder和Visual
++
FoxPro等,编写代码操纵自动化服务器上提供的属性、方法,为自动化服务器的事件添加事
件处理例程,完成部件到应用软件的装配过程,生成适应用户要求的系统,这些系统即是使用
自动化服务器的客户(Automation clients)。
GeoMap为GIS应用提供了理想的开发工具,开发者可以用任何一种支持COM技术的开
发工具,如Visual Basic, Delphi, Visual C, PowerBuilder和Visual FoxPro等,来操纵GeoMap
++
中提供的控件和自动化对象,既可以实现满足自己应用要求的功能,又可以选择设计出体现自
4
GeoMap学习教程
己风格的应用程序界面,将功能化与个性化完美结合。
5
GeoMap学习教程
三、 GeoMap的结构
GeoMap采用GeoStar for NT 3.0(以下简称GeoStar)的数据,可以组织、浏览、查询、
打印输出GeoStar生成的GIS数据,并能进行空间分析,如缓冲分析;提供了与其它GIS软件
间的数据交换接口,GeoStar数据与Arc/Info, MapInfo等数据的转换。
GeoMap由一个OLE控件GeoMap和一组近20个OLE自动化对象构成,GeoMap控件提
供对GIS数据进行操纵的方法和属性,并且提供了GIS数据的可视化界面,自动化对象则帮
助用户实现对GIS数据的有效组织和访问。
GeoStar利用工程、工作区、层、地物类等概念组织数据,GeoMap则利用自动化对象将
这些概念封装起来,相应地提供了Project对象、WorkspaceSet对象、Workspace对象、Layer
对象和Feature对象,并且考虑到数据组织中大量出现集合类型的引用的情况,对这些对象的
集合也进行了封装。
(一)GeoMap对象
1. 数据组织、维护对象
如图3-1中所示的用于组织、管理和描述数据的对象,这些对象包括Project对象、
WorkspaceSet 对象、Workspace对象、Layer对象、Feature对象以及这些对象的集合对象,此
外还有CreateInfo对象用于描述工作区、工程的信息。
2.几何对象
包括Envelope对象、Circle对象、Polygon对象、Polycline对象、Point对象等。几何对象
用于反映GIS数据中具体地物对象的几何坐标数据,以及返回用户利用鼠标操作获得的对象,
例如,利用控件上的TrackEnvelope方法,进行鼠标的拉框操作时,用Envelope对象返回获得
矩形框。几何对象还可以作为传递给控件上的属性或方法的参数,例如,将TrackEnvelope获
得的Envelope对象传递给查询方法QueryObjectsByEnvelope,可以得到拉框查询的结果。
3.其它对象
QueryResults对象,该对象用于组织调用空间查询方法后返回的查询结果。
(二)GeoMap控件
GeoMap通过控件上的属性、方法以及事件提供了GeoStar中的大部分功能,下面将各个
属性、方法、事件等按照具体功能进行分类。
1.基本操作
用户通过鼠标操作获得一个几何对象(圆、矩形框、折线、多边形等)的方法。涉及TrackCircle,
TrackEnvelope, TrackPolyline, TrackPolygon等方法,CircleTracking, CircleTracked,
6
GeoMap学习教程
EnvelopeTracking, EnvelopeTracked, PolylineTracking, PolylineTracked, PolygonTracking,
PolygonTracked等事件。
A
GeoMap控制
B
C
工程或工作区集1
D
Projects对象或WorkspaceSets对象
Workspaces对象
Layers对象
Features对象
工程或工作区集2
工作区1
AB
工作区2
……
工作区N
地物层1
地物层2
……
地物层N
C
……
工程或工作区集N
D
地物类1
地物类2
……
地物类N
图3-1 GeoMap数据组织结构
D
B
D
2.数据的组织与维护
系统中工作区、工程的创建、打开、关闭,工作区的提交,层的维护,地物类的维护等。
涉及WorkspaceSets, Projects等属性,OpenWorkspace, CloseWorkspace, OpenProject, CloseProject,
CreateProject, CreateWorkspace ,WorkspaceCheckIn等方法,以及AfterWorkspaceOpen,
AfterWorkspaceClose等事件。
3.可视化操作
地图数据的缩放与漫游,地图数据的分层、地物类显示,显示比例尺的控制,显示范围的
控制,层与地物类显示顺序的控制,显示窗口的风格、属性的控制,地物的符号化显示、随图
7
GeoMap学习教程
放大显示、注记显示等。涉及Appearance, BackColor, MaskEnvelope, MaskEnvelopeColor,
FullEnvelope, ViewEnvelope, ViewScale, AnnotationVisible, Symbolization, Graphics Zooming等属
性,ViewCenterAt等方法,以及ViewEnvelopeChange, FullEnvelopeChange等事件。
4.缓冲分析计算
点、折线、多边形缓冲区的计算。涉及CalcBufferOfPoints, CalcBufferOfPolylines,
CalcBufferOfPolygons等方法。
5.地物查询
按照点(Pick)、线(Cross)、面(Contain)的查询操作,利用缓冲分析计算功能实现的
缓冲查询操作,对查询结果的维护,对查询结果的突出显示,空间对象与相应对象的属性数据
之间的联系的维护,并利用这种联系实现空间对象与属性数据的双向查询等,涉及PickTolerance
属性,GetPoint, GetPolylines, GetPolygons, QueryObjectsByPoint, QueryObjectsByPolyline,
QueryObjectsByPolygon, QueryObjectsByEnvelope, QueryObjectsByCircle等方法,以及前述基本
操作中有关的属性、方法、事件等。
6.打印输出
打印输出到一页和按照给定的比例尺分页打印两种方式,提供打印输出前的预览功能。涉
及PrintStyle, PrintScale, PrintMarginXXX, MarginColor等属性,DoPrint, DoPrintPreview方法。
8
GeoMap学习教程
使用GeoMap
(一)举个小例子:您好,中国!
本节我们以VB为开发平台(WindowsNT 4.0下的Visual Basic 6.0),开发一个小例子,
具体功能是用来打开一幅地图,说明利用GeoMap开发软件的简单和灵活性。
请在使用GeoMap之前先安装GeoMap,并注册许可证。阅读以后的章节,需要VB的基
础知识,限于篇幅就不多介绍VB 的内容。下面一步一步介绍如何完成此项功能。
第一步:将GeoMap控件加入VB的工具箱。
1、 选择【工程|部件】菜单项(如图4-1-1所示) :
图4-1-1
2、 在弹出的“部件”对话框中选中Geomap控件 (如图4-1-2所示):
图4-1-2
3、 点击“确定”,Geomap控件的就加入了VB工具箱。
9
GeoMap学习教程
第二步:将Geomap控件加入示例的Form中。(如图4-1-3所示)
图4-1-3
第三步:在Form上添加 “打开”、“关闭”按钮,在按钮的Click事件代码中写入如下
代码。
Option Explicit
Dim PathName As String '保存文件的路径信息
Private Sub BtnOpen_Click() '打开工作区
On Error GoTo endofsub
en
PathName = me
rkspace PathName
endofsub:
Exit sub
End Sub
Private Sub BtnClose_Click() ' 关闭
If PathName = "" Then Exit Sub
orkspace PathName
PathName = ""
End Sub
这样就完成了设计工作。让我们来看一下程序运行的效果。
运行示例Form,单击“打开”按钮,出现如图4-1-4对话框:
10
GeoMap学习教程
图4-1-4
选中您要打开的中国地图,单击“打开”按钮,一幅中国地图就显示出来了(如图4-1-5
所示)。
图4-1-5
从上面的小例子可以看到,几行代码就可以打开一个地图窗口。有了Geomap 这个易学、
便利的GIS开发工具,可以实现对地图的显示、查询、分析等,满足您GIS工程开发多样、
复杂的需求。
11
GeoMap学习教程
(二)Geomap 的文件管理
在Geomap中,数据组织是以工作区、工程进行分层管理的。一般地,一幅地图我们习
惯地将它作为一个工作区来管理,多幅地图可以分作多个工作区来管理,也可以建立工程来管
理。具体内容请参阅GeoStar手册。
在Geomap中,我们还引入一种新的文件——Geomap文档,它是保存上次打开工作区、
工程的状态,如:比例尺、地图窗口的中心等,用来快速显示需要多次使用的地图窗口。
下面介绍GeoMap的文件管理设计:
第一步:在示例Form中建立如下菜单,如图4-2-1所示:
图 4-2-1
在示例Form的代码窗口写下初始化代码:
Public pathname As String '打开文件的路径
Dim createWorkspaceFrm As basicBaseCreateForm ' basicBaseCreateForm 为创建
工程或工作区的窗体
Private WithEvents printsetFrm As PrintPageSetupFrm 'PrintPageSetupFrm 为设
置打印参数的窗体
第二步:在【文件|打开GeoMap文档】菜单中写入如下代码;
Private Sub mFileOpen_Click()
'打开GeoMap文档
Title = "打开GeoMap"
= cdlOFNHideReadOnly
= "GepMap(*.GMP)|*.GMP|(*.*)|*.*"
en
PathName = me
PathName
End Sub
运行示例Form,单击【文件|打开GeoMap文档】菜单项,系统打开上次打开的地图文件,
如图4-2-2 所示:
12
GeoMap学习教程
图4-2-2
第三步:在【文件|保存GeoMap文档】菜单中写入如下代码;
Private Sub mFilesave_Click()
'保存GeoMap
End Sub
运行示例Form,单击【文件|保存GeoMap文档】菜单项,系统保存当前打开的地图文
件的状态信息。以*.gmp文件保存。
第四步:在【文件|建立工作区】菜单中写入如下代码:
Dim createWorkspaceFrm As basicBaseCreateForm
' basicBaseCreateForm为用于创建工程或工作区的参数信息的窗体
Private Sub mFilereate_Click() '新建工作区
Set createWorkspaceFrm = New basicBaseCreateForm
n = "新建工作区参数"
Type = 0 '工作区
vbModal
If ssed Then
rkspace tPathName
End If
'创建工程调用Project CreateInfo方法, 创建工作区需调用
Workspace CreateInfo方法。其中CreateInfo 为创建工程或工作区参数信息的对
象,包括比例尺,坐标单位类型、投影参数、XYZ方向的坐标精度、坐标原点坐标等,可
参考示例Geosample加以声明。
End Sub
运行示例Form,单击【文件|建立工作区】菜单项,系统就可以建立工作区,如图4-2-3 所
示:
13
GeoMap学习教程
图4-2-3
第五步:在【文件|打开工程】菜单中写入如下代码;
Private Sub mFileGeoPrjOpen_Click() '打开工程
Title = "打开工程"
= cdlOFNHideReadOnly
= "吉奥工程(*.gpj)|*.gpj"
en
PathName = me
oject PathName
'此处可编写鼠标拉框选择打开工程中的工作区代码
End Sub
运行示例Form,单击【文件|打开工程】菜单项,系统就可以打开工程文件(*.gpj),如图
4-2-4 所示
图4-2-4
第六步:在【文件|关闭工程】菜单中写入如下代码;
Private Sub mFileGeoPrjClose_Click() '关闭工程
If PathName = "" Then Exit Sub
14
GeoMap学习教程
roject PathName
PathName = ""
End Sub
运行示例Form,单击【文件|关闭工程】菜单项,系统就可以关闭工程文件(*.gpj),如图
4-2-5 所示
图4-2-5
有关打开和关闭工作区的代码参考上节的内容。
接下来介绍GeoMap的图形打印输出设计。
图形的打印输出
Geomap的打印输出包括打印输出到一页和按照给定的比例尺分页打印两种方式,提供
打印输出前的预览功能。
第一步:在【文件|打印设置】菜单中写入如下代码;
Private Sub mnuPrintSetting_Click()
'打印设置
End Sub
运行示例Form,单击【文件|打印设置】菜单项,系统就弹出“打印设置”对话框,如
图4-2-6 所示,输入正确的打印参数,单击【确定】按钮即可。
15
GeoMap学习教程
图4-2-6
第二步:在【文件|打印预览】菜单中写入如下代码;
Private Sub mnuPrintPreview_Click()
'打印预览
tPreview
End Sub
运行示例Form,单击【文件|打印预览】菜单项,系统就弹出打印预览窗口,如图4-2-7 所
示。
图4-2-7
第三步:在【文件|打印】菜单中写入如下代码;
Private Sub mnuPrint_Click()
'打印
t
End Sub
运行示例Form,单击【文件|打印】菜单项,系统就弹出打印预览窗口,如图4-2-8 所示。
16
GeoMap学习教程
图4-2-8
本节我们学习了GeoMap的文件管理设计,下一节我们来学习视图设计。
17
GeoMap学习教程
(三)Geomap 的视图操作
Geomap控件的视图操作包括放大、缩小、漫游、注记显示、随图放大、地图符号化等
功能,现在介绍如下:
下面介绍GeoMap的视图操作设计:
第一步:在示例Form中建立如下菜单,如图4-3-1所示:
图4-3-1
第二步:在【视图|放大】菜单中写入如下代码;
Private Sub mnuZoomIn_Click()
'鼠标变为放大时的形状
ointer = geoZoomIn
End Sub
第二步:在【视图|缩小】菜单中写入如下代码;
Private Sub mnuZoomOut_Click()
'鼠标变为缩小时的形状
ointer = geoZoomOut
ale = ale * 2
End Sub
第三步:在【视图|漫游】菜单中写入如下代码;
Private Sub mnuGrabber_Click()
'鼠标变为漫游时的形状
ointer = geoZoomPan
End Sub
当您在GeoMap控件窗口中按下鼠标按键时,示例系统将您所指定的当前操作类型和鼠
标坐标送入GeoMap控件的geoMouseDown、geoMouseUp消息处理函数中,通过调用GeoMap
控件上的相应方法,您将可以实现放大、缩小、漫游等功能。
Private Sub Map_geoMouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X
18
GeoMap学习教程
As Long, ByVal Y As Long)
If ction <> geoTrackNop Then Exit Sub
If Button <> 1 Then Exit Sub
Select Case ointer
Case geoZoomIn
nvelope
Case geoZoomOut
ale = ale * 2
Case geoZoomPan
ewEnvelope
End Select
End Sub
Private Sub Map_EnvelopeTracked(ByVal Envelope As pe)
Select Case ointer
Case geoZoomIn
'判断鼠标拉框时
If = 0 Or = 0 Then
ale = ale / 2
Else
velope = Envelope
End If
Case geoZoomOut
End Select
End Sub
运行示例Form,单击【视图|放大】菜单项,在Geomap控件窗口中用鼠标拉个矩形框,
系统放大地图,如图4-3-2、图4-3-3 所示。
图4-3-2
GeoMap学习教程
图4-3-3
单击【视图|缩小】菜单项,在Geomap控件窗口单击鼠标,如图4-3-4 所示。
图4-3-4
单击【视图|漫游】菜单项,在Geomap控件窗口按下鼠标,拖动鼠标如图4-3-5 所示。
图4-3-5
20
GeoMap学习教程
第四步:在【视图|注记】菜单中写入如下代码;
Private Sub mnuMark_Click()
'显示注记
tionVisible = IIf(tionVisible, False, True)
End Sub
运行示例Form,单击【视图|注记】菜单项,在Geomap控件窗口地图注记显示出来,如
图4-3-6 所示。
图4-3-6
第四步:在【视图|随图放大】菜单中写入如下代码;
Private Sub mnuGraphicZoom_Click()
'随图放大
csZooming = IIf(csZooming, False, True)
End Sub
运行示例Form,单击【视图|随图放大】菜单项,在Geomap控件窗口地图内容随图放大
显示出来,如图4-3-7 所示。
21
GeoMap学习教程
图4-3-7
第五步:在【视图|地图符号化】菜单中写入如下代码;
Private Sub mnuSymbol_Click() '地图符号化
ization = IIf(ization, False, True)
End Sub
运行示例Form,单击【视图|符号化】菜单项,在Geomap控件窗口地图要素符号显示出
来,如图4-3-7 所示。
图4-3-8
影象叠加
初始化代码:
Dim mbImageSettingsChanged As Boolean
Dim gImageOrientKey As String
在【视图|加载影象】菜单中写入如下代码:
Private Sub mnuImageOn_Click()
Title = "选择需要加载的影像文件"
= "影像文件 (*.bmp)|*.bmp"
tExt = "*.bmp"
me = "*.bmp"
Error = True
On Error GoTo cancelPressed
en
On Error GoTo 0
Dim paramfilename As String
Dim pos As Long
GeoMap学习教程
gImageOrientKey = "单幅影象"
pos = ReverseInStr(1, paramfilename, ".bmp", vbTextCompare)
paramfilename = Left(paramfilename, pos - 1) + ".dom"
rientRemove gImageOrientKey
If rientLoad(me, paramfilename, gImageOrientKey) =
False Then
rientNew me, gImageOrientKey
MsgBox "请在GeoStar中对选定的影像文件进行定向。"
Else
mbImageSettingsChanged = False
h
End If
cancelPressed:
Exit Sub
End Sub
运行示例Form,单击【视图|加载影象】菜单项,系统弹出对话框。从对话框中选择需加
载的影象文件。在Geomap控件窗口将影象作为背景显示出来,如图4-3-8 所示。(注意:加
载影象之前,必须先要对影象进行定向。)
图4-3-8
在【视图|加载影象】菜单中写入如下代码:
Private Sub mnuImageOff_Click()
rientRemove gImageOrientKey
h
End Sub
运行示例Form,单击【视图|卸载影象】菜单项,在Geomap控件窗口将影象从背景中去
掉。
本节我们学习了GeoMap的视图操作设计,下一节我们来学习编辑功能设计。
23
GeoMap学习教程
(四)常用的编辑操作
人们通过地图数字化工作将图形数据输入到系统中,由于各种因素的影响,图形的质量总
会有各种的问题;另外,地图数据的不断更新,都需要大量的图形编辑工作。常用的编辑操作
包括:增加单点、增加线状地物对象(普通折线、矩形、三点圆等)、面状地物对象(普通多
边形面状地物、矩形面状地物等)。选中需要编辑的地物;移动、删除选中的对象等。
下面我们学习GeoMap的常用的编辑操作设计.
第一步:在GeoMap示例Form中建立【编辑】菜单,添加TreeView控件,作用是提供
选择当前要编辑、查询操作的地物类。如图4-4-1所示;
图4-4-1
初始化代码如下:
Dim curworkspace As ace
Dim Curfeature As e
Dim clicknode As Node
Dim feaIndex As String
Dim seltype As String
Dim curprj As String
Dim feakey As String '索引树
Dim prjNode As Node
Dim prj As t
在打开工作区或工程文件后,地物类索引树上罗列出所有的地物类,点击上面的节点,就
获得当前地物类的编号,供以后调用。
‘索引树初始化
Private Sub map_AfterWorkspaceSetOpen(ByVal PathName As String) '工作区集打开后
Dim wssNode As Node
GeoMap学习教程
Dim wss As aceSet
Dim lyr As
Dim fea As e
Set wss = aceSets(PathName)
Set wssNode = (, , PathName, PathName, "WSS")
, , PathName, PathName, "WSS"
= "wss"
Dim imgkey As String
lyrCount =
For i = 0 To lyrCount - 1
Set lyr = (i)
lyrkey = PathName + "" + ame
Set lyrNode = (wssNode, tvwChild, lyrkey, ame,
"LYR1")
feaCount =
GeoMap学习教程
ointer = geoCROSSBOX
seltype = "cycle"
End Sub
Private Sub mnuEditSelEnv_Click() '矩形选择
ointer = geoCROSSBOX
seltype = "envelope"
End Sub
Private Sub mnuEditSelpolygon_Click() '多边形选择
ointer = geoCross
seltype = "polygon"
End Sub
当您在GeoMap控件窗口中按下鼠标按键时,示例系统将您所指定的当前操作类型和鼠
标坐标送入GeoMap控件的geoMouseDown、geoMouseUp消息处理函数中,通过调用GeoMap
控件上的TrackPolyline方法、TrackCircle方法、TrackPolygon方法及TrackEnvelope方法,可
以获得矩形框、圆、多边形、折线对象;然后,利用上一步获得的几何对象(Point、Envelope、
Circle、Polygon、Polyline)分别作为EditSelectObjectsByPoint方法、EditSelectObjectsByEnvelope
方法、EditSelectObjectsByCircle方法、EditSelectObjectsByPolygon方法、
EditSelectObjectsByPolyline方法的参数,您可以选中指定地物类中的满足条件的地物对象。
图4-4-2
26
GeoMap学习教程
图4-4-3
第三步:在GeoMap示例Form【编辑|增加点】菜单中写入如下所述代码;
Private Sub mnuEditAddpoi_Click() '增加单点
If SelCur(curworkspace, Curfeature) Then
ackSinglePoint curworkspace, Curfeature
End If
End Sub
Private Sub mEditAddpoigroup_Click() '增加点群
If SelCur(curworkspace, Curfeature) Then
ackGroupPoint curworkspace, Curfeature
End If
End Sub
运行示例Form,单击【编辑|增加点】菜单项,在Geomap控件窗口用鼠标点击的方法将
线状的地物对象添加到地图窗口。
第四步:在GeoMap示例Form【编辑|增加线】菜单中写入如下所述代码;
Private Sub mnuEditAddlinepolyline_Click() '增加折线
If SelCur(curworkspace, Curfeature) Then
ackGeoLine curworkspace, Curfeature, geoLTCommon
End If
End Sub
Private Sub mnuEditAddlineEnvelope_Click() '增加矩形
If SelCur(curworkspace, Curfeature) Then
ackGeoLine curworkspace, Curfeature, geoLTRectangle
End If
End Sub
Private Sub mnuEditAddline3poicycle_Click() '增加三点圆
27
GeoMap学习教程
If SelCur(curworkspace, Curfeature) Then
ackGeoLine curworkspace, Curfeature, geoLT3PointCircle
End If
End Sub
运行示例Form,单击【编辑|增加线】菜单项,在Geomap控件窗口用鼠标点击的方法将
线状的地物对象添加到地图窗口。如图4-4-4所示
图4-4-4
第五步:在GeoMap示例Form【编辑|增加面】菜单中写入如下所述代码;
Private Sub mnuEditAddfurEnvelope_Click() '增加矩形面
If Not SelCur(curworkspace, Curfeature) Then Exit Sub
ackGeoSurface curworkspace, Curfeature, geoSTRectangle
End Sub
Private Sub mnuEditAddfursingfur_Click() '增加普通多边形面
If SelCur(curworkspace, Curfeature) Then
ackGeoSurface curworkspace, Curfeature, geoSTCommon
End If
End Sub
运行示例Form,单击【编辑|增加面】菜单项,在Geomap控件窗口用鼠标点击的方法将
面状的地物对象添加到地图窗口。如图4-4-5所示。
28
GeoMap学习教程
图4-4-5
增加地物,首先调用函数SelCur(workspace, feature)获取当前地物类,增加点状地物对象,
调用ackSinglePoint方法;增加线状地物对象, 调用ackGeoLine
方法;增加面状地物对象, 调用ackGeoSurface方法。
Function SelCur(workspace As ace, feature As e) As Boolean
Dim fealength As Long
Dim wss As WorkspaceSet
Dim prj As Project
Dim feakeylen As Long
Dim pos As Long
Dim ms As String
Dim ddd As Node
ointer = geoCross
feakeylen = Len(feakey)
pos = InStr(1, feakey, "&")
feaIndex = Mid(feakey, pos + 1, feakeylen - pos)
If Len(feaIndex) = 0 Then Exit Function
If curprj = "wss" Then
Set wss = aceSets(0)
Set curworkspace = aces(0)
Set Curfeature = es(feaIndex)
Else
Set prj = ts(0)
GeoMap学习教程
End Sub
运行示例Form,在选中了需要编辑的对象后,单击【编辑|移动】菜单项,在Geomap控
件窗口用鼠标拖动的方法将选中的地物对象移动位置。如图4-4-6所示。
图4-4-6
第七步:在GeoMap示例Form【编辑|删除】菜单中写入如下所述代码;
Private Sub mnuDel_Click() '删除选中的目标
lectObjectsDelete
End Sub
运行示例Form,在选中了需要编辑的对象后,单击【编辑|删除】菜单项,在Geomap控
件窗口将选中的地物对象删除。如图4-4-7 所示。
图4-4-7
本节学习了利用Geomap控件实现常用的一些编辑功能。接下来,我们学习Geomap常用
的查询功能设计。
30
GeoMap学习教程
(五)专题图
专题图以简明、完备的形式表达一种或几种相关联的社会、经济、自然现象的统计
数据,使统计数据的内涵可视化,易于分析和获取信息。它不仅可以表示现象的发展动态
变化和发展规律。专题图也是GIS的重要组成部分,既可以直接表示空间数据的特性,同
时也可以将空间查询或空间分析的结果以适当的图形方式表示出来,这将比数据、表格的
的表达更加简单、明了。
下面我们学习GeoMap的常用的专题图功能设计.本节内容包括创建、打开、修改专题图
等。
第一步:在示例Form中建立如下菜单,如图4-5-1所示:
图4-5-1
初始化代码:
Dim WithEvents geoengine As ine '用于处理外部属性数据源
Private Sub Form_Load()
…
Set geoengine = ine
…
End Sub
第二步:在GeoMap示例Form【专题图|生成专题图】菜单中写入如下所述代码;
Private Sub mnuThemeCreate_Click() '生成专题图
Dim wss As aceSet
Dim prj As t
Dim ws As ace
Dim fea As e
Dim isWSS As Boolean
If Not GetCurrentFeature(wss, prj, ws, fea, isWSS) Then Exit Sub
‘此函数(自己编写)作用在于获取用来生成专题图的地物类,必须是面状地物类。
If ws Is Nothing Then Exit Sub
icMapCreate ws, fea '调用Create函数开始创建
End Sub
31
GeoMap学习教程
' 调用icMapCreate方法,将产生geoengine_QueryDataSourceForFeature事
件。在该事件中加入指明属性表信息存放的路径。
Private Sub geoengine_QueryDataSourceForFeature(ByVal Workspace As
ace, ByVal Feature As e, connectString As String, tableName As
String)
Dim wss As aceSet
Dim prj As t
Dim dsn As String
Select Case ype
Case geoWorkspaceSet
Set wss = aceSets(athName)
dsn = ctory & "WORKATTR"
dsn = ConvertString(dsn)
dsn = "ODBC;DSN=" & dsn & ";UID=;PWD=;SourceDB=" &
ctory & "WORKATTR;Driver=MicroSoft Visual FoxPro
Driver;SourceType=DBF"
Case geoProject
Set prj = ts(athName)
dsn = ectory & "PRJATTR"
dsn = ConvertString(dsn)
dsn = "ODBC;DSN=" & dsn & ";UID=;PWD=;SourceDB=" & ectory &
"PRJATTR" & e & ".DBC;Driver=MicroSoft Visual FoxPro
GeoMap学习教程
图4-5-3
第三步:在GeoMap示例Form【专题图|打开专题图】菜单中写入如下所述代码;
Private Sub mnuThemeOpen_Click()
'打开的专题图
Title = "选择需要打开的专题图"
= "专题图文件 (*.them)|*.them"
tExt = "*.them"
me = "*.them"
Error = True
On Error GoTo cancelPressed
en
PathName = me
icMapOpen PathName
cancelPressed:
Exit Sub
End Sub
运行示例Form,单击【专题图|打开专题图】菜单项,弹出“选择打开的专题图”对话框
如图4-5-4所示,选择专题图,单击“打开”按钮。
33
GeoMap学习教程
图4-5-4
第四步:在GeoMap示例Form【专题图|修改专题图】菜单中写入如下所述代码;
Private Sub mnuThemeEdit_Click()
'修改专题图
icMapModify
h
End Sub
运行示例Form,单击【专题图|修改专题图】菜单项,弹出“选择修改项目”对话框,如
图4-5-5、图4-5-6所示,选择专题图,单击“打开”按钮。
图4-5-5
图4-5-6
本节学习了利用Geomap控件实现常用的一些专题制图功能,可以用来分析有关的GIS信
息,辅助决策。
34
GeoMap学习教程
(五)查询操作
GeoMap控件的查询操作,包括按照点(Pick)、线(Cross)、面(Contain)的查询
操作,利用缓冲分析计算功能实现的缓冲查询操作,对查询结果的维护,对查询结果的突
出显示,空间对象与相应对象的属性数据数据之间的联系的维护,并利用这种联系实现空
间对象与属性数据的双向查询等。
下面我们学习GeoMap的常用的查询功能的设计.
第一步:在示例Form中建立如下菜单,如图4-6-1所示:
图4-6-1
第二步:在GeoMap示例Form【查询|点查询】菜单中写入如下所述代码;
Private Sub mnuPointQuery_Click()
ointer = geoCross '点查询时鼠标形状变为十字丝
QueryType = "PointQry"
End Sub
当您在GeoMap控件窗口中按下鼠标按键时,示例系统将您所指定的当前操作类型和鼠
标坐标送入GeoMap控件的geoMouseDown、geoMouseUp消息处理函数中,通过调用GeoMap
控件上的QueryObjectsByPoint方法,可以获得点查询的结果。
运行示例Form,单击【查询|点查询】菜单项,在Geomap控件窗口用鼠标点击某一位置,
查询的结果显示如图4-6-2所示
35
GeoMap学习教程
图4-6-2
第三步:在GeoMap示例Form【查询|矩形查询】菜单中写入如下所述代码;
Private Sub mnuPolygonQuery_Click()
'矩形查询时鼠标形状变为十字丝
ointer = geoCross
QueryType = "PolygonQry"
olygon
End Sub
当您在GeoMap控件窗口中按下鼠标按键时,示例系统将您所指定的当前操作类型和鼠
标坐标送入GeoMap控件的geoMouseDown、geoMouseUp消息处理函数中,通过调用GeoMap
控件上的QueryObjectsByEnvelope方法、QueryObjectsByCircle方法或QueryObjectsByPolygon
方法,可以获得各种查询查询的结果。
运行示例Form,单击【查询|矩形查询】菜单项,在Geomap控件窗口用鼠标点击获得一
个矩形,查询的结果显示如图4-6-3、图4-6-4 所示
图4-6-3
图4-6-4
36
GeoMap学习教程
第四步:在GeoMap示例Form【查询|多边形查询】菜单中写入如下所述代码;
Private Sub mnuPolygonQuery_Click()
'矩形查询时鼠标形状变为十字丝
ointer = geoCross
QueryType = "PolygonQry"
olygon
End Sub
运行示例Form,单击【查询|多边形查询】菜单项,在Geomap控件窗口用鼠标点击获得
一个多边形,查询的结果显示如图4-6-5、图4-6-6所示
图4-6-5
图4-6-6
第五步:在GeoMap示例Form【查询|圆查询】菜单中写入如下所述代码;
Private Sub mnuCircleQuery_Click()
'圆查询时鼠标形状变为十字丝
37
GeoMap学习教程
ointer = geoCross
QueryType = "CircleQry"
End Sub
运行示例Form,单击【查询|圆查询】菜单项,在Geomap控件窗口用鼠标单击,获得一
个圆,查询的结果如图4-6-7、图4-6-8所示
图4-6-7
图4-6-8
第六步:在GeoMap示例Form【查询|清除查询结果】菜单中写入如下所述代码;
Private Sub mnuClearQuery_Click()
ghtClearAll '清除所有高亮度显示的查询结果
End Sub
运行示例Form,单击【查询|清除查询结果】菜单项,在Geomap控件窗口高亮度显示的
地图内容恢复原来显示状态,如图4-6-9 所示。
38
GeoMap学习教程
图4-6-9
本节学习了利用Geomap控件实现常用的一些查询功能设计。下一节介绍专题图常用功
能的设计。
39
GeoMap学习教程
七 结束语
通过前面各节的学习,GIS一步步功能的增加,一个小型的GIS 系统已经建成,如图4-7-
1所示。
图4-7-1
本教程所提供的示例仅为利用Geomap控件开发中常用的GIS功能,绝非Geomap 的全部
功能,仅供参考。多样化的具体功能还有待您来开发、丰富和完善。请参阅Geomap 安装光盘
所附带的Geomap 示例和Geomap 帮助文件。
以上我们简单介绍了部件化思想的GIS软件工具GeoMap的结构、功能及特点GeoMap
已经能适应许多GIS应用的需要,特别适应于与MIS系统结合的应用开发。随着DCOM技术
的成熟,GeoMap将致力于向用户提供方便简洁的分布式网络环境下的GIS解决方案。
40


发布评论