空间查询实验报告.docx
- 文档编号:28456205
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:15
- 大小:1.06MB
空间查询实验报告.docx
《空间查询实验报告.docx》由会员分享,可在线阅读,更多相关《空间查询实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
空间查询实验报告
本科学生实验报告
学号姓名
学院专业、班级
实验课程名称
教师及职称
开课学期至学年学期
填报时间年月日
云南师范大学教务处编印
实验序号
实验名称
空间查询
实验时间
2014年5月8日
实验室
GIS实验室
一.实验预习
1.实验目的
通过绘制图形实现对shapfile文件的查询
2.实验原理、实验流程或装置示意图(试验浓缩版步骤或者流程图)
借助VB工具和MO模块实现画点、线、面、多边形,shapfile文件的查询。
3.实验设备及材料
计算机,VB6.0软件,MO组件。
(1)实验方法步骤及注意事项
一:
利用VB工具制作界面(添加按钮,图像显示框,图像目录框架);
首先在部件里面加载:
ESRIMapObjects2.2;ESRIMapObjectsLegendControl;;MicrosoftCommonDialogControls6.0;MicrosoftWindowsCommonControls6.0。
等
窗体1界面;
窗体二界面:
二:
在代码窗口编写代码
窗体1代码如下:
OptionExplicit
DimpShapeAsObject
DimptAsMapObjects2.Point
DimpLineAsMapObjects2.Line
DimpRectangleAsMapObjects2.Rectangle
DimpPolygonAsMapObjects2.Polygon
DimrecsAsMapObjects2.Recordset
PrivateSubCommand1_Click()
frmAdSpatialSel.Show
EndSub
PrivateSubMap1_AfterTrackingLayerDraw(ByValhDCAsstdole.OLE_HANDLE)
DimpSymSelAsNewMapObjects2.Symbol
DimpSymAsNewMapObjects2.Symbol
IfNotptIsNothingThen
pSym.Color=moBlue
Map1.DrawShapept,pSym
EndIf
IfNotpLineIsNothingThen
pSym.Color=moBlue
Map1.DrawShapepLine,pSym
EndIf
IfNotpRectangleIsNothingThen
pSym.SymbolType=moFillSymbol
pSym.Style=moTransparentFill
pSym.Color=moBlue
pSym.OutlineColor=moBlue
Map1.DrawShapepRectangle,pSym
EndIf
IfNotpPolygonIsNothingThen
pSym.OutlineColor=moBlue
pSym.SymbolType=moFillSymbol
pSym.Style=moTransparentFill
Map1.DrawShapepPolygon,pSym
EndIf
IfNotpSelIsNothingThen
pSymSel.Color=moYellow
Map1.DrawShapepSel,pSymSel
EndIf
EndSub
PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IffrmAdSpatialSel.Toolbar1.Buttons("Points").Value=1Then
Setpt=Map1.ToMapPoint(X,Y)
SetpShape=pt
ExecuteSearch
DisplaySelFeature
ElseIffrmAdSpatialSel.Toolbar1.Buttons("Lines").Value=1Then
SetpLine=Map1.TrackLine
SetpShape=pLine
ExecuteSearch
DisplaySelFeature
ElseIffrmAdSpatialSel.Toolbar1.Buttons("Rectangles").Value=1Then
SetpRectangle=Map1.TrackRectangle
SetpShape=pRectangle
ExecuteSearch
DisplaySelFeature
ElseIffrmAdSpatialSel.Toolbar1.Buttons("Polygons").Value=1Then
SetpPolygon=Map1.TrackPolygon
SetpShape=pPolygon
ExecuteSearch
DisplaySelFeature
ElseIffrmAdSpatialSel.Toolbar1.Buttons("sel").Value=1Then
DimtheTolAsSingle
theTol=0.01
DimptsAsMapObjects2.Point
Setpts=Map1.ToMapPoint(X,Y)
Setrecs=Map1.Layers(frmAdSpatialSel.cboLayer.ListIndex).SearchByDistance(pts,theTol,"")
Ifrecs.EOF=FalseThen
SetpShape=recs("Shape").Value
ExecuteSearch
DisplaySelFeature
Else
EndIf
EndIf
Map1.Refresh
EndSub
SubExecuteSearch()
SetpSel=Nothing
SetpSel=Map1.Layers(frmAdSpatialSel.cboLayer.ListIndex).SearchShape(pShape,frmAdSpatialSel.cboMethod.ListIndex,"")
EndSub
'用表显示选中图形
SubDisplaySelFeature()
IfNotpSelIsNothingThen
DimtDescAsMapObjects2.TableDesc
DimiAsInteger
SettDesc=pSel.TableDesc
DimrecscountAsInteger
'**********************************************************
'以下代码用来填充msgflexgrid
DimmAsInteger
DimnAsInteger
pSel.MoveFirst
DoWhileNotpSel.EOF
pSel.MoveNext
recscount=recscount+1
Loop
'MsgBoxrecsCount
frmAdSpatialSel.MSFlexGrid1.Cols=tDesc.FieldCount+1
frmAdSpatialSel.MSFlexGrid1.Rows=recscount+1
frmAdSpatialSel.MSFlexGrid1.AllowUserResizing=flexResizeColumns
frmAdSpatialSel.MSFlexGrid1.Clear
frmAdSpatialSel.MSFlexGrid1.CellAlignment=flexAlignLeftCenter
Fori=1TotDesc.FieldCount
frmAdSpatialSel.MSFlexGrid1.ColWidth(i)=tDesc.FieldLength(i-1)*72
Nexti
'tofilledthefieldsnameintogrid
frmAdSpatialSel.MSFlexGrid1.TextMatrix(0,0)="特征ID"
Fori=1Torecscount
frmAdSpatialSel.MSFlexGrid1.TextMatrix(i,0)=i
frmAdSpatialSel.MSFlexGrid1.CellAlignment=flexAlignLeftCenter
Nexti
Fori=0TotDesc.FieldCount-1
frmAdSpatialSel.MSFlexGrid1.TextMatrix(0,i+1)=tDesc.FieldName(i)
frmAdSpatialSel.MSFlexGrid1.ColAlignment(i)=flexAlignLeftCenter
frmAdSpatialSel.MSFlexGrid1.ColWidth(i)=1200
Nexti
frmAdSpatialSel.MSFlexGrid1.ColAlignment(0)=flexAlignCenterCenter
frmAdSpatialSel.MSFlexGrid1.ColWidth(0)=680
pSel.MoveFirst
Form=1Torecscount
Forn=0TotDesc.FieldCount-1
frmAdSpatialSel.MSFlexGrid1.TextMatrix(m,n+1)=pSel.Fields(tDesc.FieldName(n)).Value
Nextn
pSel.MoveNext
Nextm
pSel.MoveFirst
frmAdSpatialSel.MSFlexGrid1.Refresh
EndIf
EndSub
窗体2代码如下:
PrivateSubcmdCenter_Click()
'OnErrorResumeNext
DimRectAsRectangle,Rect2AsRectangle
DimshapeXAsDouble,shapeYAsDouble
DimdeltaxAsDouble,deltayAsDouble
DimtheShapeAsObject,pinPointAsMapObjects2.Point
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
PrivateSubcmdFlash_Click()
CallMovePoint
Callflash_shape
EndSub
'***************************************************************
'闪烁
PrivateSubflash_shape()
'OnErrorResumeNext
Form1.Map1.FlashShapepSel("shape").Value,3
EndSub
'移动
PrivateSubMovePoint()
'OnErrorResumeNext
DimrecNoAsInteger
DimiAsInteger
recNo=MSFlexGrid1.Row-1
pSel.MoveFirst
'记录指针移动到属性数据表选择中的记录上
Fori=0TorecNo-1
pSel.MoveNext
Nexti
EndSub
'***************************************************************
PrivateSubForm_Load()
SetWindowPosMe.hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVEOrSWP_NOSIZE
DimlayerAsMapObjects2.MapLayer
Setlayer=NewMapObjects2.MapLayer
cboLayer.Clear
ForEachlayerInForm1.Map1.Layers
Iflayer.LayerType=0Then
cboLayer.AddItemlayer.Name
i=i+1
EndIf
Nextlayer
cboLayer.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
PrivateSubMSFlexGrid1_Click()
cmdCenter_Click
EndSub
PrivateSubToolbar1_ButtonClick(ByValButtonAsComctlLib.Button)
'清除选中的图形
IfButton.Key="Clean"Then
MSFlexGrid1.Clear
IfNotptIsNothingThenSetpt=Nothing
IfNotpLineIsNothingThenSetpLine=Nothing
IfNotpRectangleIsNothingThenSetpRectangle=Nothing
IfNotpPolygonIsNothingThenSetpPolygon=Nothing
IfNotpSelIsNothingThenSetpSel=Nothing
MSFlexGrid1.Cols=0
MSFlexGrid1.Rows=0
Form1.Map1.TrackingLayer.RefreshTrue
EndIf
EndSub
模块代码如下:
OptionExplicit
'窗体总位于最上边
PublicDeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValXAsLong,ByValYAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
PublicConstSWP_NOSIZE=&H1
PublicConstSWP_NOMOVE=&H2
PublicConstHWND_TOPMOST=-1
PublicConstHWND_NOTOPMOST=-2
PubliciAsInteger
PublicpSelAsMapObjects2.Recordset
第三步:
调试代码,直至得到实验要求的结果:
1、点查询
2、线查询
3、矩形查询:
4、多边形查询:
a)实验内容
1、对实验现象、实验结果的分析及其结论
实验达到预期效果。
教师评语及评分:
签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 空间 查询 实验 报告