GIS二次开发程序设计.docx
《GIS二次开发程序设计.docx》由会员分享,可在线阅读,更多相关《GIS二次开发程序设计.docx(24页珍藏版)》请在冰豆网上搜索。
![GIS二次开发程序设计.docx](https://file1.bdocx.com/fileroot1/2023-1/9/670aeb58-d225-4a44-a09e-d9883f646d21/670aeb58-d225-4a44-a09e-d9883f646d211.gif)
GIS二次开发程序设计
重庆交通大学
GIS二次开发程序设计
班级:
姓名:
学号:
2013年7月4日
一界面设计
(1)目的要求
1、学会对MO进行安装。
2、熟悉VisualBasic和MapObject程序的基本操作。
3、掌握toolbar的操作步骤。
4、设置GIS二次开发的界面,要求界面具有菜单、工具条及设计程序时用到的各种控件等。
(2)内容
1、利用VisualBasic相应控件和操作以及MapObject完成界面设计,运用所安装的MO的控件进行所需界面设计。
2、在设计的界面上一次添加菜单、工具条、图例控件、map控件、状态栏等,并熟练掌握其操作步骤。
(3)操作步骤
1、在有MO和VB的环境中进行所设计的界面设计。
菜单的设计。
要求具有一些常用的功能。
如下图所示:
图1菜单编辑
2、对toolbar进行设计。
在菜单栏下面进行插入Button按钮,并在按钮上插入相应图像。
步骤如下图:
图2编辑toolbar
3、插入map、legend、status等控件,并调整其大小。
得到最后成果图如下图所示:
图3界面
二加载图层
(1)目的要求
1、熟悉MapObject中commondialog控件的调用方法。
2、掌握在VisualBasic中利用MapObject二次开发软件实现command控件、菜单、类模块和toolbar加载Shape图层的操作。
(2)内容
1、用菜单的方法加载Shape图层。
2、用toolbar的方法加载Shape图层。
3、用命令按钮command的方法加载Shape图层。
4、用类模块的方式加载Shape图层。
(3)操作步骤
在设计好的界面环境中的菜单、toolbar、command、类模块中分别写入打开图层的代码。
进行打开图层的操作。
1、运用菜单代开代码:
PrivateSubdakaituceng_Click()
'第一步,定义一个新的MO对象组的DataConnection对象
DimdConnAsNewMapObjects2.DataConnection
'第二步,定义一个新的MO对象组的MapLayer对象
DimshpLayerAsNewMapObjects2.MapLayer
DimfilenameAsString
'''第三步,设置DataConnection对象的方法Connection连接到指定的存放数据的地方
''dConn.Database="H:
\MODevelopDemo\MOandVBDemo\L4-Exam-AddShape\Data"
'''第三步,利用DataConnection对象的方法Connect进行数据连接
''dConn.Connect
'''第四步,将MapLayer对象的GeoDataset属性设置为DataConnection对象的FindGeoDataset方法(用Shape文件名作参数)的返回值。
''SetshpLayer.GeoDataset=dConn.FindGeoDataset("STATES")
'''第五步,用地图控件Layers对象的方法Add向地图控件中添加Shape图层
''Map1.Layers.AddshpLayer
'设置对话框过滤器
CommonDialog1.Filter="ESRIShape文件(*.shp)|*.shp"
'对话框显示为打开类型的对话框
CommonDialog1.ShowOpen
'如果打开文件名的长度为0,则终止这个过程
IfLen(CommonDialog1.filename)=0ThenExitSub
'设置DataConnection对象的方法Connection连接到当前目录
dConn.Database=CurDir'App.path
IfNotdConn.ConnectThenExitSub
'MsgBoxdConn.Connect
'得到从对话框返回的文件名
filename=Left(CommonDialog1.FileTitle,Len(CommonDialog1.FileTitle)-4)
'设置图层的数据集
'SetshpLayer.GeoDataset=dConn.FindGeoDataset(FileName)
SetshpLayer.GeoDataset=dConn.FindGeoDataset(filename)
'增加新图层
EndSub
图4窗口
结果如下图:
图5加载
2、用toolbar的方式代开图层代码:
首先在设置Button时将打开图层的key值标为打开图层。
PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)
SelectCaseButton.Key
Case"打开图层"
Calldakaituceng_Click
EndSelect
EndSub
3、用command方式进行打开的代码:
PrivateSubCommand5_Click()
Calldakaituceng_Click
EndSub
得到如下结果:
图6效果
4、用类模块方式打开图层的代码:
SubClass1_Initialize()
'第一步,定义一个新的MO对象组的DataConnection对象
DimdConnAsNewMapObjects2.DataConnection
'第二步,定义一个新的MO对象组的MapLayer对象
DimshpLayerAsNewMapObjects2.MapLayer
DimfilenameAsString
'''第三步,设置DataConnection对象的方法Connection连接到指定的存放数据的地方
''dConn.Database="H:
\MODevelopDemo\MOandVBDemo\L4-Exam-AddShape\Data"
'''第三步,利用DataConnection对象的方法Connect进行数据连接
''dConn.Connect
'''第四步,将MapLayer对象的GeoDataset属性设置为DataConnection对象的FindGeoDataset方法(用Shape文件名作参数)的返回值。
''SetshpLayer.GeoDataset=dConn.FindGeoDataset("STATES")
'''第五步,用地图控件Layers对象的方法Add向地图控件中添加Shape图层
''Map1.Layers.AddshpLayer
'设置对话框过滤器
Form1.CommonDialog1.Filter="ESRIShape文件(*.shp)|*.shp"
'对话框显示为打开类型的对话框
Form1.CommonDialog1.ShowOpen
'如果打开文件名的长度为0,则终止这个过程
IfLen(Form1.CommonDialog1.filename)=0ThenExitSub
'设置DataConnection对象的方法Connection连接到当前目录
dConn.Database=CurDir'App.path
IfNotdConn.ConnectThenExitSub
'MsgBoxdConn.Connect
'得到从对话框返回的文件名
filename=Left(Form1.CommonDialog1.FileTitle,Len(Form1.CommonDialog1.FileTitle)-4)
'设置图层的数据集
'SetshpLayer.GeoDataset=dConn.FindGeoDataset(FileName)
SetshpLayer.GeoDataset=dConn.FindGeoDataset(filename)
'增加新图层
Form1.Map1.Layers.AddshpLayer
EndSub
得到结果如图:
图7结果
三放大、缩小、平移和全视图
(1)目的要求
学会在菜单、toolbar中添加相应的程序代码实现所加载图层的放大、缩小、平移以及全视图操作。
(2)内容
1、用程序代码实现图层的放大操作功能。
2、用程序代码实现图层的缩小操作功能。
3、用程序代码实现图层的平移操作功能。
4、用程序代码实现图层的全视图操作功能。
(3)操作步骤
1、实现图层的放大功能代码:
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Ifi=1Then
SetMap1.Extent=Map1.TrackRectangle
EndIf
EndSub
PrivateSubfangda_Click()
bZoomOrPan=True
'标志放大状态
i=1
'设置鼠标指针
Map1.MousePointer=moZoomIn
EndSub
结果如图所示:
图8放大
2、图层缩小功能代码:
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Ifi=2Then
DimrAsMapObjects2.rectangle
Setr=Map1.Extent
r.ScaleRectangle1.5'显示框放大1.5倍
Map1.Extent=r
EndIf
EndSub
PrivateSubsuoxiao_Click()
i=2
Map1.MousePointer=moZoomOut
EndSub
结果如图所示:
图9缩小
3、图层平移功能代码:
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Ifi=3Then
Map1.Pan
EndIf
EndSub
PrivateSubpingyi_Click()
i=3'标志平移状态
Map1.MousePointer=moPan'设置鼠标指针
EndSub
结果如图所示:
图10平移
4、图层全视图功能代码:
PrivateSubquanshitu_Click()
'设置mainmap的当前显示范围是全图
SetMap1.Extent=Map1.FullExtent
EndSub
结果如图所示:
图11全视图
四设计鹰眼
(1)目的要求
在窗体中添加新的map控件作为鹰眼,并在鹰眼内画红色矩形框。
框要求鹰眼与图层能进行联动,红色方框内的内容为图层的显示内容。
(2)内容
1、设置Birdeye的属性及位置大小。
2、birdeye与mainmap联动,在birdeye内画出红色矩形框并实现Birdeye的拖拽功能。
(3)操作步骤
1、添加一个map控件作为鹰眼。
图12添加鹰眼
2、添加代码,实现鹰眼与图层的联动机鹰眼的拖拽功能。
PrivateSubdakai_Click()
DimdConnAsNewMapObjects2.DataConnection
DimshpLayerAsNewMapObjects2.MapLayer
DimfilenameAsString
CommonDialog1.Filter="ESRIShape文件(*.shp)|*.shp"
CommonDialog1.ShowOpen
IfLen(CommonDialog1.filename)=0ThenExitSub
dConn.Database=CurDir
IfNotdConn.ConnectThenExitSub
filename=Left(CommonDialog1.FileTitle,Len(CommonDialog1.FileTitle)-4)
SetshpLayer.GeoDataset=dConn.FindGeoDataset(filename)
Map1.Layers.AddshpLayer
Map1.Refresh
legend1.setMapSourceMap1
'让图层控制控件的作用生效
legend1.LoadLegendTrue
Map2.Layers.AddshpLayer
Map2.Refresh
EndSub
'====================================================
PrivateSubMap1_AfterLayerDraw(ByValIndexAsInteger,ByValcanceledAsBoolean,ByValhdcAsstdole.OLE_HANDLE)
IfIndex=0Then
Map2.TrackingLayer.RefreshTrue
EndIf
EndSub
'====================================================
PrivateSubMap2_AfterTrackingLayerDraw(ByValhdcAsstdole.OLE_HANDLE)
DimsymAsNewSymbol
sym.OutlineColor=moRed
sym.Style=moTransparentFill
Map2.DrawShapeMap1.Extent,sym
EndSub
PrivateSubMap2_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
DimcurRectangleAsMapObjects2.rectangle
DimptAsNewMapObjects2.point
'画方框改变Map1窗口
SetcurRectangle=Map2.TrackRectangle
SetMap1.Extent=curRectangle
'点击改变Map1位置
Setpt=Map2.ToMapPoint(x,y)
Map1.CenterAtpt.x,pt.y
EndSub
3、最终结果图:
图13实现鹰眼
五画点
(1)目的要求
用一定的程序在图层上进行画点操作。
(2)内容
1、在菜单中设计代码进行画点操作功能。
2、用toolbar中的Button进行画点操作。
(3)操作步骤
1、用菜单画点代码:
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Ifi=4Then
DimpointAsNewMapObjects2.point
DimevpointAsNewMapObjects2.GeoEvent
Setpoint=Map1.ToMapPoint(x,y)
SettrackShape=point
Setevpoint=Map1.TrackingLayer.AddEvent(point,0)
WithMap1.TrackingLayer.Symbol(0)
.SymbolType=moFillSymbol
.Style=moGrayFill
.Color=moRed
.OutlineColor=moRed
EndWith
EndSub
PrivateSubhuadian_Click()
i=4
Map1.MousePointer=moPencil
EndSub
1、用toolbar中的Button进行画点操作代码:
PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)
SelectCaseButton.Key
Case"画点"
Callhuadian_Click
EndSelect
EndSub
2、实验结果:
图14画点
六画线
(1)目的要求
用一定的程序在图层上进行画点操作。
(2)内容
1、在菜单中设计代码进行画点操作功能。
2、用toolbar中的Button进行画点操作。
(3)操作步骤
1、用菜单画点代码:
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Ifi=5Then
DimlineAsNewMapObjects2.line
DimevlineAsNewMapObjects2.GeoEvent
Setline=Map1.TrackLine
SettrackShape=line
Setevline=Map1.TrackingLayer.AddEvent(line,0)
WithMap1.TrackingLayer.Symbol(0)
.SymbolType=moFillSymbol
.Style=moGrayFill
.Color=moGreen
.OutlineColor=moGreen
EndWith
EndIf
Endsub
2、用toolbar中的Button进行画点操作代码:
PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)
SelectCaseButton.Key
Case"画线"
Callhuaxian_Click
EndSelect
EndSub
3、实验结果:
图15画线
七画面
(1)目的要求
用一定的程序在图层上进行画点操作。
(2)内容
1、在菜单中设计代码进行画点操作功能。
2、用toolbar中的Button进行画点操作。
(3)操作步骤
1、用菜单画点代码:
1)画圆:
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Ifi=6Then
DimellipseAsNewMapObjects2.ellipse
DimevellipseAsNewMapObjects2.GeoEvent
Setellipse=Map1.TrackCircle
SettrackShape=ellipse
Setevellipse=Map1.TrackingLayer.AddEvent(ellipse,0)
WithMap1.TrackingLayer.Symbol(0)
.SymbolType=moFillSymbol
.Style=moGrayFill
.Color=moBlue
.OutlineColor=moBlue
EndWith
EndIf
2)画矩形:
Ifi=7Then
DimrectangleAsNewMapObjects2.rectangle
DimevrectangleAsNewMapObjects2.GeoEvent
Setrectangle=Map1.TrackRectangle
SettrackShape=rectangle
Setevrectangle=Map1.TrackingLayer.AddEvent(rectangle,0)
WithMap1.TrackingLayer.Symbol(0)
.SymbolType=moFillSymbol
.Style=moGrayFill
.Color=moBlack
.OutlineColor=moBlack
EndWith
EndIf
3)画多边形:
Ifi=8Then
DimpolygonAsNewMapObjects2.polygon
DimevpolygonAsNewMapObjects2.GeoEvent
Setpolygon=Map1.TrackPolygon
SettrackShape=polygon
Setevpolygon=Map1.TrackingLayer.AddEvent(polygon,0)
WithMap1.TrackingLayer.Symbol(0)
.SymbolType=moFillSymbol
.Style=moGrayFill
.Color=moYellow
.OutlineColor=moYellow
EndWith
EndIf
EndSub
Endsub
2、用toolbar中的Button进行画点操作代码:
PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)
SelectCaseButton.Key
Case"画圆"
Callhuayuan_Click
Case"画矩形"
Callhuajuxing_Click
Case"画多边形"
Callhuaduobianxing_Click
EndSelect
EndSub
3、实验结果:
图16画面
八按值渲染
(1)目的要求
了解图层渲染的方法,掌握Renderer属性设置的语法,掌握按值渲染(ValueMapRenderer)的原理,体会按值渲染的特点,并运用程序代码将图层进行按值渲染。
(2)内容
1、运用按值渲染中的固定渲染数值的原理和代码来进行图层渲染。