GIS二次开发程序设计.docx

上传人:b****6 文档编号:6725440 上传时间:2023-01-09 格式:DOCX 页数:24 大小:490.37KB
下载 相关 举报
GIS二次开发程序设计.docx_第1页
第1页 / 共24页
GIS二次开发程序设计.docx_第2页
第2页 / 共24页
GIS二次开发程序设计.docx_第3页
第3页 / 共24页
GIS二次开发程序设计.docx_第4页
第4页 / 共24页
GIS二次开发程序设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

GIS二次开发程序设计.docx

《GIS二次开发程序设计.docx》由会员分享,可在线阅读,更多相关《GIS二次开发程序设计.docx(24页珍藏版)》请在冰豆网上搜索。

GIS二次开发程序设计.docx

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、运用按值渲染中的固定渲染数值的原理和代码来进行图层渲染。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1