mapobjects实验.docx
- 文档编号:3635162
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:17
- 大小:478.32KB
mapobjects实验.docx
《mapobjects实验.docx》由会员分享,可在线阅读,更多相关《mapobjects实验.docx(17页珍藏版)》请在冰豆网上搜索。
mapobjects实验
本科学生验证性
实验报告
姓名查建勋学号104130101_
专业_GIS_班级10地信_
实验课程名称_GIS设计与开发__
指导教师及职称彭双云____
开课学期2013至2014学年第一学期
上课时间2013年10月9日
云南师范大学旅游与地理科学学院地理信息系统系
一、实验设计
实验名称:
SearchByDistance和SearchShape联合空间数据查询功能的实现
实验时间:
2013-11-19
小组合作:
是()否(√)
小组成员:
无
1、实验内容(含实验原理介绍):
1.1设计软件界面和添加需要的空间
1.2进行编程并进行调试
1.3对程序进行优化并进行调试
1.4实现如下界面功能
功能解析:
1.4.1能够通过绘制点线面等图形,基于MO提供的空间关系进行查询,并显示查询结果;
1.4.2能够根据图上选择的地理要素,基于MO提供的空间关系进行查询,并显示查询结果;
1.4.3根据查询出来的结果进行空间定位与显示。
2、实验目的:
学会使用SearchByDistance和SearchShape方法,能利用这两种方法进行空间查询,并将查询结果进行显示,根据查询记录定位、显示相关的地理要素。
3、设计实验相关情况介绍(包含使用软件以及实验设备等):
(1)使用软件:
MO软件和VB软件
(2)实验设备:
计算机、Windowsxp系统、
4、实验过程、方法步骤:
4.1设计软件界面
首先添加一个窗体,然后在添加一个按钮,作为空间查询点击的入口按钮
然后新建一个查询窗体,并设计其界面
4.2进行代码的编写与调试
4.2.1空间查询功能各个的实现
把窗体至于最上边:
PublicDeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValXAsLong,ByValYAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
PublicConstSWP_NOSIZE=&H1
PublicConstSWP_NOMOVE=&H2
PublicConstHWND_TOPMOST=-1
PublicConstHWND_NOTOPMOST=-2
PublicRecordsetAsMapObjects2.Recordset
PublicpSelAsMapObjects2.Recordset
PublicpShapeAsObject
画图查询功能:
PublicSubExecuteSearch()
IfNotpShapeIsNothingThenSet
pSel=Form1.Map1.Layers(frmSpatialQ.Combo1.ListIndex).SearchShape(pShape,frmSpatialQ.cboMethod.ListIndex,"")
EndIf
EndSub
查询显示属性表信息的功能:
PrivateSubCommand1_Click()
DimRectAsRectangle,Rect2AsRectangle
DimshapeXAsDouble,shapeYAsDouble
DimdeltaxAsDouble,deltayAsDouble
DimtheShapeAsObject,pinPointAsMapObjects2.Point
DimiAsInteger
DimrecNoAsInteger
recNo=MSFlexGrid1.Row-1
pSel.MoveFirst
'记录指针移动到属性数据表选择中的记录上
Fori=0TorecNo-1
pSel.MoveNext
Nexti
SettheShape=pSel("shape").Value
IfpSel("shape").Type=moPointThen
SetRect2=Form1.Map1.Extent
shapeX=pSel("shape").Value.X
shapeY=pSel("shape").Value.Y
deltax=shapeX-Rect2.Center.X
deltay=shapeY-Rect2.Center.Y
Rect2.Offsetdeltax,deltay
Rect2.ScaleRectangle0.1
Form1.Map1.Extent=Rect2
Else
SetRect=pSel("shape").Value.Extent
Rect.ScaleRectangle1.1
Form1.Map1.Extent=Rect
EndIf
SetRect2=Nothing
SettheShape=Nothing
EndSub
'用表显示选中图形:
PublicSubDisplaySelFeature()
IfNotpSelIsNothingThen
DimtDescAsMapObjects2.TableDesc
DimiAsInteger
SettDesc=pSel.TableDesc
DimrecscountAsInteger
'**********************************************************
'以下代码用来填充msgflexgrid
DimmAsInteger
DimnAsInteger
pSel.MoveFirst
DoWhileNotpSel.EOF
pSel.MoveNext
recscount=recscount+1
Loop
'MsgBoxrecsCount
frmSpatialQ.MSFlexGrid1.Cols=tDesc.FieldCount+1
frmSpatialQ.MSFlexGrid1.Rows=recscount+1
frmSpatialQ.MSFlexGrid1.AllowUserResizing=flexResizeColumns
frmSpatialQ.MSFlexGrid1.Clear
frmSpatialQ.MSFlexGrid1.CellAlignment=flexAlignLeftCenter
Fori=1TotDesc.FieldCount
frmSpatialQ.MSFlexGrid1.ColWidth(i)=tDesc.FieldLength(i-1)*72
Nexti
'tofilledthefieldsnameintogrid
frmSpatialQ.MSFlexGrid1.TextMatrix(0,0)="特征ID"
Fori=1Torecscount
frmSpatialQ.MSFlexGrid1.TextMatrix(i,0)=i
frmSpatialQ.MSFlexGrid1.CellAlignment=flexAlignLeftCenter
Nexti
Fori=0TotDesc.FieldCount-1
frmSpatialQ.MSFlexGrid1.TextMatrix(0,i+1)=tDesc.FieldName(i)
frmSpatialQ.MSFlexGrid1.ColAlignment(i)=flexAlignLeftCenter
frmSpatialQ.MSFlexGrid1.ColWidth(i)=1200
Nexti
frmSpatialQ.MSFlexGrid1.ColAlignment(0)=flexAlignCenterCenter
frmSpatialQ.MSFlexGrid1.ColWidth(0)=680
pSel.MoveFirst
Form=1Torecscount
Forn=0TotDesc.FieldCount-1
frmSpatialQ.MSFlexGrid1.TextMatrix(m,n+1)=pSel.Fields(tDesc.FieldName(n)).Value
Nextn
pSel.MoveNext
Next
pSel.MoveFirst
frmSpatialQ.MSFlexGrid1.Refresh
EndIf
EndSub
查询方式的调用:
PrivateSubForm_Load()
SetWindowPosMe.hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVEOrSWP_NOSIZE
DimlayerAsNewMapObjects2.MapLayer
ForEachlayerInForm1.Map1.Layers
Combo1.AddItemlayer.Name
Nextlayer
Combo1.ListIndex=0
'初始化空间搜索方法
cboMethod.AddItem"重叠"
cboMethod.AddItem"有一个公共点"
cboMethod.AddItem"边缘相交"
cboMethod.AddItem"有一条公共边"
cboMethod.AddItem"有公共点或边缘相交"
cboMethod.AddItem"有交集"
cboMethod.AddItem"内交"
cboMethod.AddItem"内交,但边缘不相交"
cboMethod.AddItem"特征包含形"
cboMethod.AddItem"形包含特征"
cboMethod.AddItem"特征完全包含形"
cboMethod.AddItem"形完全包含特征"
cboMethod.AddItem"特征包含形的第一个点"
cboMethod.AddItem"形包含特征的中心"
cboMethod.AddItem"特征和形相同"
cboMethod.ListIndex=5
EndSub
画图功能:
PrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)
DimpSymRecordsetAsNewMapObjects2.Symbol
DimpSymSelAsNewMapObjects2.Symbol
pSymSel.Color=moYellow
pSymRecordset.Color=moRed
IfNotpSelIsNothingThenMap1.DrawShapepSel,pSymSel
IfNotRecordsetIsNothingThenMap1.DrawShapeRecordset,pSymRecordset
DimpSymAsNewMapObjects2.Symbol
IfNotpRectangleIsNothingThen
pSym.SymbolType=moFillSymbol
pSym.Style=moTransparentFill
pSym.OutlineColor=moRed
Map1.DrawShapepRectangle,pSym
EndIf
IfNotpPolygonIsNothingThen
pSym.SymbolType=moFillSymbol
pSym.Style=moTransparentFill
pSym.OutlineColor=moRed
Map1.DrawShapepPolygon,pSym
EndIf
EndSub
点击鼠标后查询结果的显示:
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IffrmSpatialQ.Toolbar1.Buttons
(1).Value=tbrPressedThen
Setpt=Map1.ToMapPoint(X,Y)
SetpShape=pt
ExecuteSearch
DisplaySelFeature
ElseIffrmSpatialQ.Toolbar1.Buttons
(2).Value=tbrPressedThen
SetpLine=Map1.TrackLine
SetpShape=pLine
ExecuteSearch
DisplaySelFeature
ElseIffrmSpatialQ.Toolbar1.Buttons(3).Value=tbrPressedThen
SetpRectangle=Map1.TrackRectangle
SetpShape=pRectangle
ExecuteSearch
DisplaySelFeature
ElseIffrmSpatialQ.Toolbar1.Buttons(4).Value=tbrPressedThen
SetpPolygon=Map1.TrackPolygon
SetpShape=pPolygon
ExecuteSearch
DisplaySelFeature
ElseIffrmSpatialQ.Toolbar1.Buttons(6).Value=tbrPressedThen
Setpt=Map1.ToMapPoint(X,Y)
SetpShape=pt
DimdistolAsDouble
distol=0.1
SetRecordset=Form1.Map1.Layers(frmSpatialQ.Combo1.ListIndex).SearchByDistance(pShape,distol,"")
IfRecordset.EOF=FalseThen
SetpShape=Recordset("shape").Value
ExecuteSearch
DisplaySelFeature
EndIf
EndIf
Map1.Refresh
EndSub
4.2.2空间查询功能的集成
主窗体的代码
空间查询窗体的代码:
公共模块的代码:
4.2.3调试运行结果
画图查询功能
以点查询结果:
以线查询结果:
以面查询结果:
多边形查询:
任意点击查询结果:
5、实验小结(出现过的问题或错误、原因分析):
5.1在实验过程中,没有很好的理解程序代码,故写代码时很费力。
5.2在实验过程中,由于对很多函数的作用不了解,很多时候需要查看帮助。
5.3在实验过程中,出现多次语法等错误导致结果出不来。
还得需要老师的帮助或看老师的代码才能解决问题,要多次调节才能够解决实验中的错误。
5.4程序写得少,对写程序没感觉。
指导老师评语:
指导老师签名:
2013年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mapobjects 实验