学 生 实 验 报 告
实验课程名称 地理信息系统软件二次开发
开课实验室 空间数据处理实验室
学 院 河海学院 年级 2008 专业班 1
学 生 姓 名 学 号 08260117
开 课 时 间 2011 至 2012 学年第 1 学期
总 成 绩 教师签名
1
目录
实验四 GIS应用系统中图形的操作 ............................................................................................. 3
一、实验内容 ........................................................................................................................... 3 二、实验要求 ........................................................................................................................... 3 三、实验步骤 ........................................................................................................................... 3
1、系统完善; ................................................................................................................. 3 2、图形求交 ..................................................................................................................... 4 3、图形求并 ..................................................................................................................... 7 4、图形求差 ................................................................................................................... 11 5、图形异或 ................................................................................................................... 14 四、实验成果 ......................................................................................................................... 18 五、实验心得 ......................................................................................................................... 18
2
实验四 GIS应用系统中图形的操作
一、实验内容
1、学习运用代码在所编系统中进行图形的基本操作; 2、完善系统。
二、实验要求
1、完善系统,实现在主窗体中调用多个窗体; 2、运用代码实现图形相交; 3、运用代码实现在图形求并; 4、运用代码实现在图形求差; 5、运用代码实现在图形异或;
三、实验步骤
1、系统完善;
在主界面窗体中完善系统界面,在“图形操作”菜单栏下添加图形求并、图
形求差、图形求交、图形异或等选项,如图4-1(系统界面)
3
图4-1(系统界面)
2、图形求交
由于学生水平局限,不能够在一个窗体中完成所有功能的,因此此实验在多个窗体中实现,添加名为“frmintersection”的窗口,设置其界面,如图4-2
图4-2(frmintersection窗体界面)
在代码窗口中写入以下代码: Dim Poly As MapObjects2.Polygon Dim Poly1 As MapObjects2.Polygon
4
Dim Poly2 As MapObjects2.Polygon Private Sub Command1_Click() Dim p As Point
Dim Pts As MapObjects2.Points '第一个Polygon
Set Poly1 = New MapObjects2.Polygon Set Pts = New MapObjects2.Points Set p = Map1.ToMapPoint(100, 100) Pts.Add p
Set p = Map1.ToMapPoint(5500, 1500) Pts.Add p
Set p = Map1.ToMapPoint(800, 3200) Pts.Add p
Poly1.Parts.Add Pts '第二个Polygon
Set Poly2 = New MapObjects2.Polygon Set Pts = New MapObjects2.Points Set p = Map1.ToMapPoint(500, 500) Pts.Add p
Set p = Map1.ToMapPoint(3500, 1500) Pts.Add p
Set p = Map1.ToMapPoint(2000, 3000) Pts.Add p
Poly2.Parts.Add Pts Set Poly = Nothing
Map1.TrackingLayer.Refresh True End Sub
Private Sub Command2_Click() If Not Poly1 Is Nothing Then Set Poly = Poly1.Difference(Poly2)
5
Map1.TrackingLayer.Refresh True Else
MsgBox \"先点击“显示Polygon”按钮!\" End If End Sub
Private Sub Form_Load() frmintersection.WindowState = 2 Map1.Width = Screen.Width - 3400 Map1.Height = Screen.Height - 2450 End Sub Private
Sub
Map1_AfterTrackingLayerDraw(ByVal
hDC
stdole.OLE_HANDLE)
Dim sym As New Symbol, sym1 As New Symbol, sym2 As New Symbol sym.Color = moRed sym1.Color = moGreen sym2.Color = moCyan If Not Poly Is Nothing Then Set Poly1 = Nothing Set Poly2 = Nothing Map1.DrawShape Poly, sym Else
If Not Poly1 Is Nothing Then Map1.DrawShape Poly1, sym1 End If
If Not Poly2 Is Nothing Then Map1.DrawShape Poly2, sym2 End If End If End Sub
As
6
运行,如图4-3,图4-4
图4-3(显示多边形)
图4-4(多边形求交后的图像)
3、图形求并
添加名为“Frmunion”的窗口,界面如图4-5,,
7
图4-5(Frmunion窗体界面)
在代码窗口中写入以下代码: Dim boo As Boolean
Dim Poly As MapObjects2.Polygon Dim Poly1 As MapObjects2.Polygon Dim Poly2 As MapObjects2.Polygon Private Sub Command1_Click() Dim p As Point
Dim Pts As MapObjects2.Points '第一个Polygon
Set Poly1 = New MapObjects2.Polygon Set Pts = New MapObjects2.Points Set p = Map1.ToMapPoint(1000, 100) Pts.Add p
Set p = Map1.ToMapPoint(5500, 1500) Pts.Add p
Set p = Map1.ToMapPoint(800, 3200) Pts.Add p
Poly1.Parts.Add Pts
8
'第二个Polygon
Set Poly2 = New MapObjects2.Polygon Set Pts = New MapObjects2.Points Set p = Map1.ToMapPoint(5000, 5000) Pts.Add p
Set p = Map1.ToMapPoint(3500, 1500) Pts.Add p
Set p = Map1.ToMapPoint(2000, 3000) Pts.Add p
Poly2.Parts.Add Pts Set Poly = Nothing
Map1.TrackingLayer.Refresh True End Sub
Private Sub Command2_Click() If Not Poly1 Is Nothing Then Set Poly = Poly1.Union(Poly2) Map1.TrackingLayer.Refresh True Else
MsgBox \"先点击“显示Polygon”按钮!\" End If End Sub
Private Sub Form_Load() Frmunion.WindowState = 2 Map1.Width = Screen.Width - 3400 Map1.Height = Screen.Height - 2450 End Sub
Private Sub Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE) Dim sym As New Symbol, sym1 As New Symbol, sym2 As New Symbol sym.Color = moRed sym1.Color = moGreen
9
sym2.Color = moCyan If Not Poly Is Nothing Then Set Poly1 = Nothing Set Poly2 = Nothing Map1.DrawShape Poly, sym Else
If Not Poly1 Is Nothing Then Map1.DrawShape Poly1, sym1 End If
If Not Poly2 Is Nothing Then Map1.DrawShape Poly2, sym2 End If End If End Sub
运行,如图4-6,4-7
图4-6(显示多边形)
10
图4-7(合并多边形后的图像)
4、图形求差
添加名为“Frmdifference”的窗口,设置其界面,如图4-8,
图4-8(Frmdifference窗体界面)
在代码窗口中写入以下代码: Dim Poly As MapObjects2.Polygon Dim Poly1 As MapObjects2.Polygon Dim Poly2 As MapObjects2.Polygon
11
Private Sub Command1_Click() Dim p As Point
Dim Pts As MapObjects2.Points '第一个Polygon
Set Poly1 = New MapObjects2.Polygon Set Pts = New MapObjects2.Points Set p = Map1.ToMapPoint(100, 100) Pts.Add p
Set p = Map1.ToMapPoint(5500, 1500) Pts.Add p
Set p = Map1.ToMapPoint(800, 3200) Pts.Add p
Poly1.Parts.Add Pts '第二个Polygon
Set Poly2 = New MapObjects2.Polygon Set Pts = New MapObjects2.Points Set p = Map1.ToMapPoint(5000, 500) Pts.Add p
Set p = Map1.ToMapPoint(3500, 1500) Pts.Add p
Set p = Map1.ToMapPoint(200, 3000) Pts.Add p
Poly2.Parts.Add Pts Set Poly = Nothing
Map1.TrackingLayer.Refresh True End Sub
Private Sub Command2_Click() If Not Poly1 Is Nothing Then Set Poly = Poly1.Difference(Poly2) Map1.TrackingLayer.Refresh True
12
Else
MsgBox \"先点击“显示Polygon”按钮!\" End If End Sub
Private Sub Form_Load() Frmdifference.WindowState = 2 Map1.Width = Screen.Width - 3400 Map1.Height = Screen.Height - 2450 End Sub Private
Sub
Map1_AfterTrackingLayerDraw(ByVal
hDC
stdole.OLE_HANDLE)
Dim sym As New Symbol, sym1 As New Symbol, sym2 As New Symbol sym.Color = moRed sym1.Color = moGreen sym2.Color = moCyan If Not Poly Is Nothing Then Set Poly1 = Nothing Set Poly2 = Nothing Map1.DrawShape Poly, sym Else
If Not Poly1 Is Nothing Then Map1.DrawShape Poly1, sym1 End If
If Not Poly2 Is Nothing Then Map1.DrawShape Poly2, sym2 End If End If End Sub
运行,如图4-9,图4-10
As
13
图4-9(显示多边形)
图4-10(求差后的图形)
5、图形异或
添加名为“FrmXor”的窗口,设置其界面,如图4-11,
14
图4-11 (FrmXor窗体界面)
在代码窗口中写入以下代码: Dim Poly As MapObjects2.Polygon Dim Poly1 As MapObjects2.Polygon Dim Poly2 As MapObjects2.Polygon Private Sub Command1_Click() Dim p As Point
Dim Pts As MapObjects2.Points '第一个Polygon
Set Poly1 = New MapObjects2.Polygon Set Pts = New MapObjects2.Points Set p = Map1.ToMapPoint(100, 100) Pts.Add p
Set p = Map1.ToMapPoint(5500, 1500) Pts.Add p
Set p = Map1.ToMapPoint(800, 3200) Pts.Add p
Poly1.Parts.Add Pts '第二个Polygon
Set Poly2 = New MapObjects2.Polygon
15
Set Pts = New MapObjects2.Points Set p = Map1.ToMapPoint(500, 500) Pts.Add p
Set p = Map1.ToMapPoint(3500, 1500) Pts.Add p
Set p = Map1.ToMapPoint(200, 3000) Pts.Add p
Poly2.Parts.Add Pts Set Poly = Nothing
Map1.TrackingLayer.Refresh True End Sub
Private Sub Command2_Click() If Not Poly1 Is Nothing Then Set Poly = Poly1.Xor(Poly2) Map1.TrackingLayer.Refresh True Else
MsgBox \"先点击“显示Polygon”按钮!\" End If End Sub
Private Sub Form_Load() FrmXor.WindowState = 2 Map1.Width = Screen.Width - 3400 Map1.Height = Screen.Height - 2450 End Sub
Private Sub Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE) Dim sym As New Symbol, sym1 As New Symbol, sym2 As New Symbol sym.Color = moRed sym1.Color = moGreen sym2.Color = moCyan If Not Poly Is Nothing Then
16
Set Poly1 = Nothing Set Poly2 = Nothing Map1.DrawShape Poly, sym Else
If Not Poly1 Is Nothing Then Map1.DrawShape Poly1, sym1 End If
If Not Poly2 Is Nothing Then Map1.DrawShape Poly2, sym2 End If End If End Sub
运行,如图4-12,图4-13
图4-12(显示多边形)
17
图4-13(求异域后的图形)
四、实验成果
此程序成果需实际操作、运行,见实验步骤。
五、实验心得
1、此实验中,对系统界面进行了一系列完善,使其菜单选项变多; 2、此实验存在很大的不足,其所有功能最好在同一个窗体中实现,但是没有实现;
3、此实验结果需操作运行;
4、图形操作还包括缓冲区、图形偏移、计算长度、计算面积,计算距离等操作,但是,此实验中没有进一步完成。
18
因篇幅问题不能全部显示,请点此查看更多更全内容