1、mo+vb程序设计报告本科学生验证性实验报告姓名 学号 专业 GIS 班级 10地信 实验课程名称 GIS设计与开发 指导教师及职称 开课学期 2013 至 2014 学年 第一 学期上课时间 2013 年 12 月 15 日云南师范大学旅游与地理科学学院地理信息系统系一、实验设计实验名称:条件查询 实验时间:2013-12-15小组合作:是()否()小组成员:无1、 实验内容(含实验原理介绍):1.1设计软件界面1.2进行编程并进行调试1.3对程序进行优化并进行调试1.4实现如下界面功能:功能解析:1.4.1能够通过点击条件组合得到查询条件,基于MO提供的空间关系进行查询,并显示查询结果;1
2、.4.2能够根据查询结果得到属性表,并显示查询结果;1.4.3根据查询出来的结果进行空间定位与显示。2、 实验目的:学会使用SearchExpression方法,能利用这种方法进行条件查询,并能将查询结果进行显示,能根据查询记录定位、显示地理要素。3、 设计实验相关情况介绍(包含使用软件以及实验设备等):(1)使用软件:MO软件和VB软件(2)实验设备:计算机、Windows7系统、键盘、鼠标等。4、 实验过程、方法步骤: 4.1设计软件界面首先新建一个查询窗体,并设计其界面然后添加一个窗体,在添加一个按钮,作为空间查询点击的入口按钮4.2进行编程并进行调试4.2.1在主窗体中点击“条件查询”
3、,显示条件查询窗体代码如下:Private Sub Command1_Click()Form1.ShowEnd Sub4.2.2使地图的各图层的名在下拉菜单combo1中显示,并使下拉菜单字段名在list1中显示,即得到如下结果的功能代码如下:使地图的各图层的名在下拉菜单combo1中显示Private Sub Form_Load()Dim plyr As New MapObjects2.MapLayerFor Each plyr In Form2.Map1.Layers Combo1.AddItem plyr.NameNext plyrCombo1.ListIndex = 0Text1.Te
4、xt = End Sub使下拉菜单字段名在list1中显示Private Sub Combo1_Click()Set lyr = Form2.Map1.Layers(Combo1.ListIndex)Set precord = lyr.RecordsDim ptable As New MapObjects2.TableDescSet ptable = precord.TableDesclist1.ClearDim i As IntegerFor i = 0 To ptable.FieldCount - 1 list1.AddItem ptable.FieldName(i)Next iEnd S
5、ub4.2.3在list1中点击属性,在list2显示属性值,即得到如下结果的功能代码如下:在list1中点击属性,在list2显示属性值Private Sub list1_Click()Dim pfldname As Stringpfldname = list1.List(list1.ListIndex)list2.Clearprecord.MoveFirstWhile Not precord.EOF list2.AddItem precord.Fields(pfldname).ValueAsString precord.MoveNextWendEnd Sub4.2.4在text1中获得查询
6、条件(即双击list1字段名,双击list2字段名,然后在text1中显示,单击表达式构造符号按钮在text1中显示),即得到如下结果的功能代码如下:双击list1字段名,在text中显示Private Sub list1_DblClick() Text1.Text = Text1.Text + list1.List(list1.ListIndex)End Sub双击list2字段名,在text中显示Private Sub list2_DblClick() Text1.Text = Text1.Text + list2.List(list2.ListIndex)End Sub单击各个符号在te
7、xt1中进行显示Private Sub Command5_Click()Text1.Text = Text1.Text + Command5.CaptionEnd SubPrivate Sub Command6_Click()Text1.Text = Text1.Text + Command5.captionEnd SubPrivate Sub Command7_Click()Text1.Text = Text1.Text + and End SubPrivate Sub Command8_Click()Text1.Text = Text1.Text + Command8.captionEnd
8、 SubPrivate Sub Command9_Click()Text1.Text = Text1.Text + Command9.captionEnd SubPrivate Sub Command10_Click()Text1.Text = Text1.Text + or End SubPrivate Sub Command11_Click()Text1.Text = Text1.Text + Command11.captionEnd SubPrivate Sub Command12_Click()Text1.Text = Text1.Text + Command12.captionEnd
9、 SubPrivate Sub Command13_Click()Text1.Text = Text1.Text + not End SubPrivate Sub Command14_Click()Text1.Text = Text1.Text + Command14.captionEnd SubPrivate Sub Command15_Click()Text1.Text = Text1.Text + Command15.captionEnd SubPrivate Sub Command16_Click()Text1.Text = Text1.Text + like End Sub4.2.5
10、获得查询条件,进行查询并在地图中进行显示以及获得属性表,得到如下结果代码如下:Public record As MapObjects2.Recordset 定义查询的记录集Public ponoff As Boolean 定义一个开关,(由于在差un提运行时就开始查询,所以要定义开关,在窗体运行时处于关状态,点击查询时才开始查询)窗体运行时开关处于关状态Private Sub Form_Load()ponoff = FalseEnd Sub查询及其显示(由于AfterTrackingLayerDraw是Map的方法,所以应该在Map1下进行编辑代码)Private Sub Map1_After
11、TrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE)If ponoff = True ThenSet record =Form2.Map1.Layers(Form1.Combo1.ListIndex).SearchExpression(Form1.Text1.Text) Dim psym As New MapObjects2.Symbol psym.Color = moRed Form2.Map1.DrawShape record, psymEnd IfEnd Sub点击查询时,属性表的显示Public Sub DisplaySelFeature(
12、) If Not record Is Nothing Then Dim tDesc As MapObjects2.TableDesc Dim i As Integer Set tDesc = record.TableDesc Dim recscount As Integer * 以下代码用来填充msgflexgrid Dim m As Integer Dim n As Integer record.MoveFirst Do While Not record.EOF record.MoveNext recscount = recscount + 1 Loop MsgBox recsCount F
13、orm1.MSFlexGrid1.Cols = tDesc.FieldCount + 1 Form1.MSFlexGrid1.Rows = recscount + 1 Form1.MSFlexGrid1.AllowUserResizing = flexResizeColumns Form1.MSFlexGrid1.Clear Form1.MSFlexGrid1.CellAlignment = flexAlignLeftCenter For i = 1 To tDesc.FieldCount Form1.MSFlexGrid1.ColWidth(i) = tDesc.FieldLength(i
14、- 1) * 72 Next i to filled the fields name into grid Form1.MSFlexGrid1.TextMatrix(0, 0) = 特征 ID For i = 1 To recscount Form1.MSFlexGrid1.TextMatrix(i, 0) = i Form1.MSFlexGrid1.CellAlignment = flexAlignLeftCenter Next i For i = 0 To tDesc.FieldCount - 1 Form1.MSFlexGrid1.TextMatrix(0, i + 1) = tDesc.
15、FieldName(i) Form1.MSFlexGrid1.ColAlignment(i) = flexAlignLeftCenter Form1.MSFlexGrid1.ColWidth(i) = 1200 Next i Form1.MSFlexGrid1.ColAlignment(0) = flexAlignCenterCenter Form1.MSFlexGrid1.ColWidth(0) = 680 record.MoveFirst For m = 1 To recscount For n = 0 To tDesc.FieldCount - 1 Form1.MSFlexGrid1.T
16、extMatrix(m, n + 1) = record.Fields(tDesc.FieldName(n).Value Next n record.MoveNext Next record.MoveFirst Form1.MSFlexGrid1.Refresh End IfEnd Sub点击查询按钮进行查询(实际查询过程在 Map1_AfterTrackingLayerDraw过程中,这里点击查询按钮,用开关进行控制查询)Private Sub Command1_Click() ponoff = True Form2.Map1.Refresh DisplaySelFeatureEnd Sub
17、4.2.6清除功能的实现,点击清除功能,对text1以及属性表MSFlexGrid1中的条件进行清除代码如下:清除功能:Private Sub Command2_Click()Text1.Text = Form1.MSFlexGrid1.ClearSet record = NothingForm2.Map1.RefreshEnd Sub4.2.7闪烁功能的实现,对选择出来的结果进行闪烁代码如下:进行闪烁Private Sub Command3_Click() Form2.Map1.FlashShape record(shape).Value, 3End Sub4.2.8居中共能的实现,即对选中
18、的结果进行居中显示代码如下:进行居中显示Private Sub Command4_Click() Dim Rect As Rectangle, Rect2 As Rectangle Dim shapeX As Double, shapeY As Double Dim deltax As Double, deltay As Double Dim theShape As Object, pinPoint As MapObjects2.Point Dim i As Integer Dim recNo As Integer recNo = MSFlexGrid1.Row - 1 record.Move
19、First 记录指针移动到属性数据表选择中的记录上 For i = 0 To recNo - 1 record.MoveNext Next i Set theShape = record(shape).Value If record(shape).Type = moPoint Then Set Rect2 = Form2.Map1.Extent shapeX = record(shape).Value.X shapeY = record(shape).Value.Y deltax = shapeX - Rect2.Center.X deltay = shapeY - Rect2.Center.
20、Y Rect2.Offset deltax, deltay Rect2.ScaleRectangle 0.1 Form2.Map1.Extent = Rect2 Else Set Rect = record(shape).Value.Extent Rect.ScaleRectangle 1.1 Form2.Map1.Extent = Rect End If Set Rect2 = Nothing Set theShape = NothingEnd Sub5、 实验结果:5.1查询功能运行的结果面查询:线查询:点查询:5.2清除功能的实现查询:然后再清除:5.3闪烁功能的实现先查询后闪烁5.4居中功能的实现先查询后居中6、 实验小结(出现过的问题或错误、原因分析):6.1在实验过程中,对VB编程的不熟悉,导致速度很慢。6.2在实验过程中,由于对很对函数的作用不了解,很多时候需要查看帮助。6.3在实验过程中,出现多次语法等错误导致结果出不来。还得需要老师的帮助或看老师的代码才能解决问题,自主编程能力差,还需要多家练习。6.4功能不完善,在进行调试的时候,出现很多问题和漏洞还不能解决。 指导老师评语:指导老师签名: 2013年 月 日
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2