第一讲 MO概述及程序设计入门
一、概述
1、简介
MapObject是由美国的ESRI(Environment System Research Institute,环境系统研究所)开发,是当今流行的组件式GIS开发软件。MapObject是一组地图软件的组件(ActiveX控件),利用它可以在普通的编程语言(如VB、VC、Delphi)上实现主要的地理信息系统(其中主要的就是电子地图的功能)的功能。MapObject简称MO。通过MapObjects你可灵活地建立适合用户的地图接口。在小内存空间中,你能用多种工业标准程序环境之一去建立应用程序,你能够联合使用MapObjects与其它软件去实现地图与用户信息的联系。
2、MapObjects的功能
星星中文•显示一张多图层地图(道路,河流,边界)。
•放大,缩小,漫游。
最后一次的温柔 蓝雨
•生成、绘制图形元素,如点,线,圆,多边形。
•绘制图形化文字。
•可以用点击选择不同的对象(点、线、面)。
•通过线,方框,区域,多边形,圆来拾取物体。
•可以选择对象的指定位置。
•通过SQL描述来选择物体。
•对选取物体进行基本统计。
•对所选地图元素的属性进行更新,查询。
•绘制专题图。
小黑屋进行曲•用特殊方法渲染图层,如数值、类别、密度、图表、事件或Z值。
•从航片或卫星图片上截取图像。
•动态显示实时或系列时间组数据。
•在图上标注地址或定位。
•把数据投影到不同的坐标下。
二、MO的基本操作
1、图层加载
进行电子地图系统显示、操作、处理和GIS开发之前,首先要有ArcInfo格式的GIS图层数据文件。这些文件可以从ArcInfo中产生,也可以从其他地理信息系统,如MapInfo、GeoMedia、
MapGIS等系统中转换而来。在MO中可以使用的数据文件格式主要有Shapefile、Coverage、SDE、VFP和各种CAD文件。这里主要介绍针对Shapefile文件的电子地图开发。
Shapefile文件采用早期的dBase数据库管理模式,一个文件夹是一个数据库,文件夹的不同文件就是数据库中的表,每个表代表GIS图中的一个图层。每个图层文件必须包括3个以上的特征文件,才能在MO中使用,它们分别是空间特征数据文件(即图形文件).shp、索引文件.shx 和属性数据文件.dbf。
图层又分为点状图层、线状图层和面状图层3类,图层加载的时候要使点状图层在最上面,线状图层在中间,面状图层在最下面,否则面状图层会把点状和线状图层都覆盖掉。要注意在MO中,最先加载的在下面,最后加载的在上面。
2、添加Map控件
3、手工加载图层:通过控件的属性添加图层文件
闹姑4、程序加载图层:(1)利用dc.Database = "文件路径"设置图层文件所在目录,其中,
dc.Database = app.path为设置与程序存在的文件夹一样的目录例如:Option Explicit  ‘在窗体模块中强制声明变量’
Private Sub Form_Load()
Dim dc As New mapobjects2.DataConnection  ‘创建了对象变量的同时创建实例’
Dim layer As MapLayer  ‘创建了一个空的对象变量而未创建实例’
Set layer = New MapLayer
dc.Database = "F:\MO实验\程序加载"
If dc.Connect Then
layer.GeoDataset = dc.FindGeoDataset("country")
Map1.Layers.Add layer
Map1.Refresh
Else
MsgBox "在指定文件夹下面没有到相应图层数据文件!"
End If
End Sub
几点说明
MapLayer对象
表示地理坐标数据层,而这些地理坐标数据在Map控件中可以画出带GeoDataset的一类地理特征集。
●GeoDataset
是MapLayer对象的属性,是一个只写属性,用来设置图层相对应的空间数据和属性数据的数据库。
●DataConnection对象
表示数据库的连接,属性包括Database:设置和读取数据库的连接,如果数据为shape 文件时,此值表示shape文件所在的目录路径和目录名,自动产生ODBC连接。
●在将对象的引用赋给变量、数据类型的元素或可写对象的属性时,须使用关键字
“set”,在创建对象类的实例时,须使用关键字“new”。
思考并作业(1):利用以前所学的VB中的驱动器列表框控件、目录列表框控件和文件列表框控件来加载地图文件。
二、地图操作的基本功能
1、地图放大:Map1.Extent
2、地图移动:Map1.pan
3、地图缩小:预先设置缩小倍数
4、恢复原始大小: = map1.fullextent
几点说明:
●Extent属性
这是表示当前图形显示范围的一个变量,可以修改和读取这个变量,这个变量的类型为矩形(Rectangle)类型。
●Fullextent属性
表示所有图层总的坐标范围,变量类型为矩形(Rectangle)类型,主要用于图形的全图显示。
●MousePointer
鼠标指针类型变量,可以设置和读取,表示当鼠标在Map控件上移动时鼠标显示的类型。如:Map1.MousePointer = moZoomIn。
例如:Option Explicit
Private Sub Command1_Click()
Dim r As MapObjects2.Rectangle
Set r = Map1.Extent
r.ScaleRectangle 1.5
Map1.Extent = r
End Sub
Private Sub Command2_Click()
Set Map1.Extent = Map1.FullExtent
End Sub
Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Set Map1.Extent = Map1.TrackRectangle
ElseIf Button = vbRightButton Then
Map1.Pan
End If
End Sub
基本操作综合练习(之前添加并设置好工具栏控件)
Option Explicit
Dim r As MapObjects2.Rectangle
Private Sub Command1_Click()
End
End Sub
Private Sub Command2_Click()
Dim Bs As String
Bs = "选择工具栏,可以实现放大、缩小、移动和还原的功能。" & vbCrLf & vbCrLf & "朱红春,2005/4/1"
MsgBox Bs, , "地图浏览系统帮助"
End Sub
Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Toolbar1.Buttons(1).Value = 1 Then
Set Map1.Extent = Map1.TrackRectangle
ElseIf Toolbar1.Buttons(3).Value = 1 Then
Map1.Pan
ElseIf Toolbar1.Buttons(2).Value = 1 Then
Set r = Map1.Extent
r.ScaleRectangle 1.5
Map1.Extent = r
ElseIf Toolbar1.Buttons(4).Value = 1 Then
Map1.Extent = Map1.FullExtent
End If
End Sublol冬阳
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
If Toolbar1.Buttons(1).Value = 1 Then
Map1.MousePointer = moZoomIn
ElseIf Toolbar1.Buttons(3).Value = 1 Then
Map1.MousePointer = moPan
ElseIf Toolbar1.Buttons(2).Value = 1 Then
Map1.MousePointer = moZoomOut
ElseIf Toolbar1.Buttons(4).Value = 1 Then
Set Map1.Extent = Map1.FullExtent
Map1.MousePointer = moDefault
End If
伤了心的女人怎么了
End Sub
上机作业:
1、练习地图控件的使用,参照上述图层加载和基本操作的代码,熟悉MO的基本操作。
2、完成思考联系(1)