📄 mapobject学习笔记-第一讲 mo概述及程序设计入门_魏国强 的 博客.htm
字号:
Single)</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>If Button =
vbLeftButton Then</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set Map1.Extent =
Map1.TrackRectangle</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>ElseIf Button =
vbRightButton Then</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map1.Pan</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End If</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End Sub</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt"><SPAN>基本操作综合练习(之前添加并设置好工具栏控件)</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Option
Explicit</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Dim r As
MapObjects2.Rectangle</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Private Sub
Command1_Click()</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>End</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>End Sub</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Private Sub
Command2_Click()</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Dim Bs As
String</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Bs =
"</SPAN><SPAN>选择工具栏,可以实现放大、缩小、移动和还原的功能。</SPAN><SPAN>" & vbCrLf &
vbCrLf & "</SPAN><SPAN>朱红春</SPAN><SPAN>,2005/4/1"</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>MsgBox Bs, ,
"</SPAN><SPAN>地图浏览系统帮助</SPAN><SPAN>"</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>End Sub</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Private Sub
Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>If
Toolbar1.Buttons(1).Value = 1 Then</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Set Map1.Extent =
Map1.TrackRectangle</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>ElseIf
Toolbar1.Buttons(3).Value = 1 Then</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Map1.Pan</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>ElseIf
Toolbar1.Buttons(2).Value = 1 Then</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Set r =
Map1.Extent</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>r.ScaleRectangle
1.5</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Map1.Extent =
r</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>ElseIf
Toolbar1.Buttons(4).Value = 1 Then</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Map1.Extent =
Map1.FullExtent</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>End If</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>End Sub</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>Private Sub
Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>If
Toolbar1.Buttons(1).Value = 1 Then</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Map1.MousePointer =
moZoomIn</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>ElseIf
Toolbar1.Buttons(3).Value = 1 Then</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Map1.MousePointer =
moPan</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>ElseIf
Toolbar1.Buttons(2).Value = 1 Then</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Map1.MousePointer =
moZoomOut</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>ElseIf
Toolbar1.Buttons(4).Value = 1 Then</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Set Map1.Extent =
Map1.FullExtent</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Map1.MousePointer =
moDefault</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>End If</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>End Sub</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN>上机作业:</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt"><SPAN>1</SPAN><SPAN>、练习地图控件的使用,参照上述图层加载和基本操作的代码,熟悉</SPAN><SPAN>MO</SPAN><SPAN>的基本操作。</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt"><SPAN>2</SPAN><SPAN>、完成思考联系(</SPAN><SPAN>1</SPAN><SPAN>)</SPAN></P></SPAN>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P><SPAN>几点说明</SPAN></P>
<P><SPAN><SPAN>l<SPAN>
</SPAN></SPAN></SPAN><SPAN>MapLayer</SPAN><SPAN>对象</SPAN></P>
<P><SPAN>表示地理坐标数据层,而这些地理坐标数据在</SPAN><SPAN>Map</SPAN><SPAN>控件中可以画出带</SPAN><SPAN>GeoDataset</SPAN><SPAN>的一类地理特征集。</SPAN></P>
<P><SPAN><SPAN>l<SPAN>
</SPAN></SPAN></SPAN><SPAN>GeoDataset</SPAN></P>
<P><SPAN>是</SPAN><SPAN>MapLayer</SPAN><SPAN>对象的属性,是一个只写属性,用来设置图层相对应的空间数据和属性数据的数据库。</SPAN></P>
<P><SPAN><SPAN>l<SPAN>
</SPAN></SPAN></SPAN><SPAN>DataConnection</SPAN><SPAN>对象</SPAN></P>
<P><SPAN>表示数据库的连接,属性包括</SPAN><SPAN>Database</SPAN><SPAN>:设置和读取数据库的连接,如果数据为</SPAN><SPAN>shape</SPAN><SPAN>文件时,此值表示</SPAN><SPAN>shape</SPAN><SPAN>文件所在的目录路径和目录名,自动产生</SPAN><SPAN>ODBC</SPAN><SPAN>连接。</SPAN></P>
<P><SPAN><SPAN>l<SPAN>
</SPAN></SPAN></SPAN><SPAN>在将对象的引用赋给变量、数据类型的元素或可写对象的属性时,须使用关键字“</SPAN><SPAN>set</SPAN><SPAN>”,在创建对象类的实例时,须使用关键字“</SPAN><SPAN>new</SPAN><SPAN>”。</SPAN></P>
<P><STRONG><SPAN>思考并作业(</SPAN><SPAN>1</SPAN></STRONG><STRONG><SPAN>)</SPAN></STRONG><SPAN>:利用以前所学的</SPAN><SPAN>VB</SPAN><SPAN>中的驱动器列表框控件、目录列表框控件和文件列表框控件来加载地图文件。</SPAN></P><SPAN>
<P><SPAN>二、地图操作的基本功能</SPAN></P>
<P><SPAN>1</SPAN><SPAN>、地图放大:</SPAN><SPAN>Map1.Extent</SPAN></P>
<P><SPAN>2</SPAN><SPAN>、地图移动:</SPAN><SPAN>Map1.pan</SPAN></P>
<P><SPAN>3</SPAN><SPAN>、地图缩小:预先设置缩小倍数</SPAN></P>
<P><SPAN>4</SPAN><SPAN>、恢复原始大小:</SPAN><SPAN>set map1.extent =
map1.fullextent</SPAN></P>
<P><SPAN>几点说明:</SPAN></P>
<P><SPAN><SPAN>l<SPAN>
</SPAN></SPAN></SPAN><SPAN>Extent</SPAN><SPAN>属性</SPAN></P>
<P><SPAN>这是表示当前图形显示范围的一个变量,可以修改和读取这个变量,这个变量的类型为矩形(</SPAN><SPAN>Rectangle</SPAN><SPAN>)类型。</SPAN></P>
<P><SPAN><SPAN>l<SPAN>
</SPAN></SPAN></SPAN><SPAN>Fullextent</SPAN><SPAN>属性</SPAN></P>
<P><SPAN>表示所有图层总的坐标范围,变量类型为矩形(</SPAN><SPAN>Rectangle</SPAN><SPAN>)类型,主要用于图形的全图显示。</SPAN></P>
<P><SPAN><SPAN>l<SPAN>
</SPAN></SPAN></SPAN><SPAN>MousePointer</SPAN></P>
<P><SPAN>鼠标指针类型变量,可以设置和读取,表示当鼠标在</SPAN><SPAN>Map</SPAN><SPAN>控件上移动时鼠标显示的类型。如:</SPAN><SPAN>Map1.MousePointer
= moZoomIn</SPAN><SPAN>。</SPAN></P>
<P><SPAN>例如:</SPAN><SPAN>Option Explicit</SPAN></P>
<P><SPAN>Private Sub Command1_Click()</SPAN></P>
<P><SPAN>Dim r As MapObjects2.Rectangle</SPAN></P>
<P><SPAN>Set r = Map1.Extent</SPAN></P>
<P><SPAN>r.ScaleRectangle 1.5</SPAN></P>
<P><SPAN>Map1.Extent = r</SPAN></P>
<P><SPAN>End Sub</SPAN></P>
<P><SPAN>Private Sub Command2_Click()</SPAN></P>
<P><SPAN>Set Map1.Extent = Map1.FullExtent</SPAN></P>
<P><SPAN>End Sub</SPAN></P>
<P><SPAN>Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X
As Single, Y As Single)</SPAN></P>
<P><SPAN>If Button = vbLeftButton Then</SPAN></P>
<P><SPAN>Set Map1.Extent = Map1.TrackRectangle</SPAN></P>
<P><SPAN>ElseIf Button = vbRightButton Then</SPAN></P>
<P><SPAN>Map1.Pan</SPAN></P>
<P><SPAN>End If</SPAN></P>
<P><SPAN>End Sub</SPAN></P>
<P><STRONG><SPAN>基本操作综合练习(之前添加并设置好工具栏控件)</SPAN></STRONG></P>
<P><SPAN>Option Explicit</SPAN></P>
<P><SPAN>Dim r As MapObjects2.Rectangle</SPAN></P>
<P><SPAN>Private Sub Command1_Click()</SPAN></P>
<P><SPAN>End</SPAN></P>
<P><SPAN>End Sub</SPAN></P>
<P><SPAN>Private Sub Command2_Click()</SPAN></P>
<P><SPAN>Dim Bs As String</SPAN></P>
<P><SPAN>Bs = "</SPAN><SPAN>选择工具栏,可以实现放大、缩小、移动和还原的功能。</SPAN><SPAN>" &
vbCrLf & vbCrLf &
"</SPAN><SPAN>朱红春</SPAN><SPAN>,2005/4/1"</SPAN></P>
<P><SPAN>MsgBox Bs, , "</SPAN><SPAN>地图浏览系统帮助</SPAN><SPAN>"</SPAN></P>
<P><SPAN>End Sub</SPAN></P>
<P></P>
<P><SPAN>Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X
As Single, Y As Single)</SPAN></P>
<P><SPAN>If Toolbar1.Buttons(1).Value = 1 Then</SPAN></P>
<P><SPAN><SPAN> </SPAN>Set Map1.Extent =
Map1.TrackRectangle</SPAN></P>
<P><SPAN>ElseIf Toolbar1.Buttons(3).Value = 1 Then</SPAN></P>
<P><SPAN><SPAN> </SPAN>Map1.Pan</SPAN></P>
<P><SPAN>ElseIf Toolbar1.Buttons(2).Value = 1 Then</SPAN></P>
<P><SPAN><SPAN> </SPAN>Set r = Map1.Extent</SPAN></P>
<P><SPAN><SPAN> </SPAN>r.ScaleRectangle 1.5</SPAN></P>
<P><SPAN><SPAN> </SPAN>Map1.Extent = r</SPAN></P>
<P><SPAN>ElseIf Toolbar1.Buttons(4).Value = 1 Then</SPAN></P>
<P><SPAN>Map1.Extent = Map1.FullExtent</SPAN></P>
<P><SPAN>End If</SPAN></P>
<P><SPAN>End Sub</SPAN></P>
<P></P>
<P><SPAN>Private Sub Toolbar1_ButtonClick(ByVal Button As
MSComctlLib.Button)</SPAN></P>
<P><SPAN>If Toolbar1.Buttons(1).Value = 1 Then</SPAN></P>
<P><SPAN><SPAN> </SPAN>Map1.MousePointer =
moZoomIn</SPAN></P>
<P><SPAN>ElseIf Toolbar1.Buttons(3).Value = 1 Then</SPAN></P>
<P><SPAN><SPAN> </SPAN>Map1.MousePointer =
moPan</SPAN></P>
<P><SPAN>ElseIf Toolbar1.Buttons(2).Value = 1 Then</SPAN></P>
<P><SPAN><SPAN> </SPAN>Map1.MousePointer =
moZoomOut</SPAN></P>
<P><SPAN>ElseIf Toolbar1.Buttons(4).Value = 1 Then</SPAN></P>
<P><SPAN><SPAN> </SPAN>Set Map1.Extent =
Map1.FullExtent</SPAN></P>
<P><SPAN><SPAN> </SPAN>Map1.MousePointer =
moDefault</SPAN></P>
<P><SPAN>End If</SPAN></P>
<P><SPAN>End Sub<BR></SPAN></P>
<P><SPAN><STRONG>ShapeFile文件生成(新建一个图层)</STRONG> <BR><BR>'新建一个polygon图层的示例;
<BR><BR><BR><BR>Option Explicit <BR><BR><BR><BR>Dim moSymbol As New
MapObjects2.Symbol <BR><BR>Dim moPolygons As New Collection
<BR><BR><BR><BR>Private Sub Command1_Click() <BR><BR>Dim gds As
MapObjects2.GeoDataset <BR><BR>Dim sName As String <BR><BR>Dim Desc As New
TableDesc <BR><BR>Dim dc As New DataConnection <BR><BR>Dim Lyr As New
MapObjects2.MapLayer <BR><BR>Dim lPoly As Long <BR><BR><BR><BR>If
moPolygons.Count < 1 Then <BR><BR>MsgBox "先在地图上画多边形" <BR><BR>Exit Sub
<BR><BR>End If <BR><BR><BR><BR>With CommonDialog1 <BR><BR>.Filter = "ESRI
Shapefiles (*.shp)|*.shp" <BR><BR>.DefaultExt = ".shp" <BR><BR>.ShowSave
<BR><BR><BR><BR>If Len(.FileName) = 0 Then Exit Sub <BR><BR>dc.Database =
CurDir <BR><BR>If Not dc.Connect Then Exit Sub <BR><BR><BR><BR>'取掉扩展名;
<BR><BR>sName = Left(.FileTitle, Len(.FileTitle) - 4) <BR><BR>End With
<BR><BR>MsgBox sName <BR><BR><BR><BR>With Desc <BR><BR>.FieldCount = 3
<BR><BR><BR><BR>'设置字段名; <BR><BR>.FieldName(0) = "Name"
<BR><BR>.FieldName(1) = "Area" <BR><BR>.FieldName(2) = "Perimeter"
<BR><BR><BR><BR>'设置字段类型; <BR><BR>.FieldType(0) = moString
<BR><BR>.FieldType(1) = moDouble <BR><BR>.FieldType(2) = moDouble
<BR><BR><BR><BR>'设置字段长度; <BR><BR>.FieldLength(0) = 16
<BR><BR>.FieldPrecision(1) = 15 <BR><BR>.FieldScale(1) = 3
<BR><BR>.FieldPrecision(2) = 15 <BR><BR>.FieldScale(2) = 3 <BR><BR>End
With <BR><BR><BR><BR>Set gds = dc.AddGeoDataset(sName, moPolygon, Desc)
<BR><BR>If gds Is Nothing Then Exit Sub <BR><BR><BR><BR>Set Lyr.GeoDataset
= gds <BR><BR>Map1.Layers.Add Lyr <BR><BR>Map1.Refresh <BR><BR><BR><BR>For
lPoly = 1 To moPolygons.Count <BR><BR>With Lyr.Records <BR><BR>.AddNew
<BR><BR>.Fields("Shape".Value = moPolygons(lPoly)
<BR><BR>.Fields("Name".Value = "Name " & lPoly
<BR><BR>.Fields("Area".Value = moPolygons(lPoly).Area
<BR><BR>.Fields("Perimeter".Value = moPolygons(lPoly).Perimeter
<BR><BR>.Update <BR><BR>End With <BR><BR>Next
<BR><BR>Lyr.Records.StopEditing <BR><BR>End Sub <BR><BR><BR><BR>Private
Sub Form_Load() <BR><BR>With moSymbol <BR><BR>.SymbolType = moFillSymbol
<BR><BR>.Style = moSolidFill <BR><BR>.Color = moRed <BR><BR>End With
<BR><BR>Command1.Caption = "保存" <BR><BR>Me.Caption = "Shape文件生成"
<BR><BR>End Sub <BR><BR><BR><BR>Private Sub
Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE) <BR><BR>Dim
oPoly As MapObjects2.Polygon <BR><BR>If moPolygons.Count <> 0 Then
<BR><BR>For Each oPoly In moPolygons <BR><BR>Map1.DrawShape oPoly,
moSymbol <BR><BR>Next <BR><BR>End If <BR><BR>End Sub
<BR><BR><BR><BR>Private Sub Map1_MouseDown(Button As Integer, Shift As
Integer, X As Single, Y As Single) <BR><BR>Dim oRect As
MapObjects2.Rectangle <BR><BR>Dim oPoly As New MapObjects2.Polygon
<BR><BR><BR><BR>Set oPoly = Map1.TrackPolygon <BR><BR>moPolygons.Add oPoly
<BR><BR>Map1.TrackingLayer.Refresh True <BR><BR>End Sub
<BR></SPAN></P></SPAN></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章
href="http://hi.baidu.com/laowei/blog/category/ĬÈÏ·ÖÀà">类别:默认分类</A> | <A
title=将此文章添加到百度搜藏 onclick="return addToFavor();"
href="http://cang.baidu.com/do/add" target=_blank>添加到搜藏</A> | 浏览(<SPAN
id=result></SPAN>) | <A
href="http://hi.baidu.com/laowei/blog/item/582db03596daad8fa61e125c.html#send">评论</A> (0)
<SCRIPT language=javascript>
/*<![CDATA[*/
var pre = [true,'071207今天干什么去了', '071207今天干什么去了','/laowei/blog/item/9fe70bd1082a12d0562c846f.html'];
var post = [true,'MapObject学习笔记-第二讲 图层的基本功能开发','MapObject学习笔记-第二讲 图层...', '/laowei/blog/item/7c31730e3adbf8ce7bcbe124.html'];
if(pre[0] || post[0]){
document.write('<div style="height:5px;line-height:5px;"> </div><div id="in_nav">');
if(pre[0]){
document.write('上一篇:<a href="' + pre[3] + '" title="' + pre[1] + '">' + pre[2] + '</a> ');
}
if(post[0]){
document.write('下一篇:<a href="' + post[3] + '" title="' + post[1] + '">' + post[2] + '</a>');
}
document.write('</div>');
}
/*]]>*/
</SCRIPT>
</DIV>
<DIV class=line></DIV>
<STYLE type=text/css>#in_related_doc A {
TEXT-DECORATION: none
}
</STYLE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -