GIS二次开发程序设计.docx
- 文档编号:28044738
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:24
- 大小:22.50KB
GIS二次开发程序设计.docx
《GIS二次开发程序设计.docx》由会员分享,可在线阅读,更多相关《GIS二次开发程序设计.docx(24页珍藏版)》请在冰豆网上搜索。
GIS二次开发程序设计
成绩
批阅
日期
重庆交通大学
测量与空间信息处理实验报告
实验课程:
GIS二次开发程序设计
实验名称:
GIS二次开发
班级:
学号:
姓名:
实验日期:
2012年6月25日
实验一界面设计
一、实验目的和要求
1、学会对MO进行安装。
2、熟悉VisualBasic和MapObject程序的基本操作。
3、掌握toolbar的操作步骤。
4、设置GIS二次开发的界面,要求界面具有菜单、工具条及设计程序时用到的各种控件等。
二、实验内容
1、利用VisualBasic相应控件和操作以及MapObject完成界面设计,运用所安装的MO的控件进行所需界面设计。
2、在设计的界面上一次添加菜单、工具条、图例控件、map控件、状态栏等,并熟练掌握其操作步骤。
3、实验步骤
1、在有MO和VB的环境中进行所设计的界面设计。
1)菜单的设计。
要求具有一些常用的功能。
如下图所示:
2、对toolbar进行设计。
在菜单栏下面进行插入Button按钮,并在按钮上插入相应图像。
步骤如下图:
3、插入map、legend、status等控件,并调整其大小。
得到最后成果图如下图所示:
四、实验总结
4.1、实验中遇到的困难
在进行界面设计时,会遇到一些意想不到的困难,比如在插入toolbar中的Button时,如果没有加入imagelist控件时,就不能在Button上插入图像。
还有在进行菜单操作时,有时会因为空格运行不当,而不能得到理想的下拉菜单。
4.2、处理方法和技巧
在进行设计时,一定要记住操作的先后顺序,不然不能不到效果。
插入map和legend等控件时,适当调节其大小,使界面更美观。
4.3、经验体会和收获
刚开始做实验时感觉好难,不知怎么下手,可在完成这几次实验后我熟悉了MO的最基本功能,发现用VB对GIS进行二次开发没有想象中的那么难,但关于控件的问题很多,而且大家都不是很懂,只能多多交流,从网上搜素相关资料。
现如今地理信息系统的应用越来越广发,对它进行二次开发可以更大的发挥此软件的功能。
经过这次实习,我学会了MO得使用和安装,也学会了简单的界面设计。
使用菜单编辑器,在窗体中插入toolbar,插入map,legend,imagelist等多种控件。
初次操作时,很多东西不知道,很多东西不懂,所以做起来比较难,也考验一个人的耐心,但是要不灰心,不气馁,会发现一切变得容易很多。
所以不管做什么都要有耐心,沉得住气,才能成功。
实验二加载图层(四种方法)
一、实验目的和要求
1、熟悉MapObject中commondialog控件的调用方法。
2、掌握在VisualBasic中利用MapObject二次开发软件实现command控件、菜单、类模块和toolbar加载Shape图层的操作。
二、实验内容
1、用菜单的方法加载Shape图层。
2、用toolbar的方法加载Shape图层。
3、用命令按钮command的方法加载Shape图层。
4、用类模块的方式加载Shape图层。
三、实验步骤
在设计好的界面环境中的菜单、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
结果如下图:
2、用toolbar的方式代开图层代码:
首先在设置Button时将打开图层的key值标为打开图层。
PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)
SelectCaseButton.Key
Case"打开图层"
Calldakaituceng_Click
EndSelect
EndSub
得到结果图如下图:
3、用command方式进行打开的代码:
PrivateSubCommand5_Click()
Calldakaituceng_Click
EndSub
得到如下结果:
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
得到结果如图:
四、实验总结
4.1、实验中遇到的困难
实验中有时操作不当时会加载不了图层。
还有在菜单编辑中,由于没在窗体加入对话框,在程序运行的时候就出错。
4.2、处理方法和技巧
仔细寻找出错的原因,并解决问题。
程序不能出错,一旦出错就得不到结果。
我们还可以采取一些我们喜欢的而方法,对图层进行设置。
比如我们可以进行一些操作,是所加载的图层颜色唯一。
4.3、经验体会和收获
经过这次实习,我学会了不少东西,比如熟悉MapObject中commondialog控件的调用方法。
同时也掌握了在VisualBasic中利用MapObject二次开发软件实现command控件、菜单、类模块和toolbar加载Shape图层的操作。
通过对各种打开程序代码的学习,我基本能够自己读懂字里行间的意思,并能对程序代码进行操作,实现打开图层的功能。
在实验中会遇到一些意象不到的困难,有时候甚至根本不知道哪里出错,只能反反复复查看,试运行,知道找出错误并修正它,使工作量大大增加,只有肯多花时间在上面,才能很好地完成任务。
实验三放大、缩小、平移和全视图
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
结果如图所示:
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
结果如图所示:
3、图层平移功能代码:
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Ifi=3Then
Map1.Pan
EndIf
EndSub
PrivateSubpingyi_Click()
i=3'标志平移状态
Map1.MousePointer=moPan'设置鼠标指针
EndSub
结果如图所示:
4、图层全视图功能代码:
PrivateSubquanshitu_Click()
'设置mainmap的当前显示范围是全图
SetMap1.Extent=Map1.FullExtent
EndSub
结果如图所示:
四、实验总结
4.1、实验中遇到的困难
在实验过程中,有时候因不够严谨二导致某些功能不够完善。
使系统不够健壮,操作起来不是很方便。
4.2、处理方法和技巧
在试验过程中要小心仔细地做好每一步,例如在进行放大功能制作时,不仅要使放大的功能得以实现,而且同时鼠标的箭头也要变成放大图标格式。
4.3、经验体会和收获
通过此次试验,我学会了在菜单、toolbar中添加相应的程序代码实现所加载图层的放大、缩小、平移以及全视图操作。
刚开始操作时,不能真正理解代码的意思和内涵,会造成代码没有完全实现所需功能,比如点放大操作时,所化框的起点往往不能到到理想状态,后面经过考虑,发现此功能应该放到mousedown里面实现。
才能使鼠标第一次按键能在任何位置。
此类问题虽然不大,但是很多,所以比较花费精力。
经过几次试验后,却来却发现编程开发其实是很有意思的一门课,希望以后更加努力,弄的更好。
实验四设计鹰眼
1、实验目的和要求
在窗体中添加新的map控件作为鹰眼,并在鹰眼内画红色矩形框。
框要求鹰眼与图层能进行联动,红色方框内的内容为图层的显示内容。
2、实验内容
1、设置Birdeye的属性及位置大小。
2、birdeye与mainmap联动,在birdeye内画出红色矩形框并实现Birdeye的拖拽功能。
3、实验步骤
1、添加一个map控件作为鹰眼。
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、最终结果图:
四、实验总结
4.1、实验中遇到的困难
有时候因为马虎,使map1与鹰眼不能联动和拖拽。
4.2、处理方法和技巧
在加载图层时要用程序代码进行图层与鹰眼的同时显示图像,
Map1.Layers.AddshpLayer
Map1.Refresh
legend1.setMapSourceMap1
'让图层控制控件的作用生效
legend1.LoadLegendTrue
Map2.Layers.AddshpLayer
Map2.Refresh
4.3、经验体会和收获
设计鹰眼时不仅要对其代码熟练掌握,还要对所加的map1.map2,以及legend控件进行比例设计,要使窗体里面的局面看起来更加协调,更加美观。
在代码方面,基本没有什么大问题,所以操作此次实验比较轻松。
没有多长时间便完成了。
经过试验,我的自信心增强不少,很期待下一次的实验。
实验五画点
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、实验结果:
四、实验总结
4.1、实验中遇到的困难
若实验中语句使用不当,会导致不能画点,或者只能画一个点。
4.2、处理方法和技巧
书本上的第一种方法只能画一个点,但只要我们能改变其中一些程序,就能实现全面的画点功能。
4.3、经验体会和收获
这次试验做的是运用菜单栏和toolbar中的button进行画点,也就是说用两种方法进行画点操作。
在用书中的第一种画点方法进行画点时,只能画一个点,画第二个点时,第一个点会被覆盖。
反复查看也找不到原因。
因此就用event方式进行画点,才能在窗体上进行画多个点的操作。
经过实验,我明白了做事不能只是照抄课本,要学会思考,学会举一反三,才能把事情做好。
实验六画线
1、实验目的和要求
用一定的程序在图层上进行画点操作。
2、实验内容
1、在菜单中设计代码进行画点操作功能。
2、用toolbar中的Button进行画点操作。
三、实验步骤
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
.Colo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GIS 二次开发 程序设计