MapObject学习笔记-第一讲 MO概述及程序设计入门

 

第一讲 MO概述及程序设计入门

一、概述

1、简介

MapObject是由美国的ESRIEnvironment System Research Institute,环境系统研究所)开发,是当今流行的组件式GIS开发软件。MapObject是一组地图软件的组件(ActiveX控件),利用它可以在普通的编程语言(如VBVCDelphi)上实现主要的地理信息系统(其中主要的就是电子地图的功能)的功能。MapObject简称MO。通过MapObjects你可灵活地建立适合用户的地图接口。在小内存空间中,你能用多种工业标准程序环境之一去建立应用程序,你能够联合使用MapObjects与其它软件去实现地图与用户信息的联系。

2MapObjects的功能

           显示一张多图层地图(道路,河流,边界)

           放大,缩小,漫游。

           生成、绘制图形元素,如点,线,圆,多边形。

           绘制图形化文字。

           可以用点击选择不同的对象(点、线、面)。

           通过线,方框,区域,多边形,圆来拾取物体。

           可以选择对象的指定位置。

           通过SQL描述来选择物体。

           对选取物体进行基本统计。

           对所选地图元素的属性进行更新,查询。

           绘制专题图。

           用特殊方法渲染图层,如数值、类别、密度、图表、事件或Z值。

           从航片或卫星图片上截取图像。

           动态显示实时或系列时间组数据。

           在图上标注地址或定位。

           把数据投影到不同的坐标下。

二、MO的基本操作

1、图层加载

进行电子地图系统显示、操作、处理和GIS开发之前,首先要有ArcInfo格式的GIS图层数据文件。这些文件可以从ArcInfo中产生,也可以从其他地理信息系统,如MapInfoGeoMediaMapGIS等系统中转换而来。在MO中可以使用的数据文件格式主要有ShapefileCoverageSDEVFP和各种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

几点说明

l         MapLayer对象

表示地理坐标数据层,而这些地理坐标数据在Map控件中可以画出带GeoDataset的一类地理特征集。

l         GeoDataset

MapLayer对象的属性,是一个只写属性,用来设置图层相对应的空间数据和属性数据的数据库。

l         DataConnection对象

表示数据库的连接,属性包括Database:设置和读取数据库的连接,如果数据为shape文件时,此值表示shape文件所在的目录路径和目录名,自动产生ODBC连接。

l         在将对象的引用赋给变量、数据类型的元素或可写对象的属性时,须使用关键字“set”,在创建对象类的实例时,须使用关键字“new”。

思考并作业(1):利用以前所学的VB中的驱动器列表框控件、目录列表框控件和文件列表框控件来加载地图文件。

 

二、地图操作的基本功能

1、地图放大:Map1.Extent

2、地图移动:Map1.pan

3、地图缩小:预先设置缩小倍数

4、恢复原始大小:set map1.extent = map1.fullextent

几点说明:

l         Extent属性

这是表示当前图形显示范围的一个变量,可以修改和读取这个变量,这个变量的类型为矩形(Rectangle)类型。

l         Fullextent属性

表示所有图层总的坐标范围,变量类型为矩形(Rectangle)类型,主要用于图形的全图显示。

l         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 Sub

 

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

End Sub

几点说明

l         MapLayer对象

表示地理坐标数据层,而这些地理坐标数据在Map控件中可以画出带GeoDataset的一类地理特征集。

l         GeoDataset

是MapLayer对象的属性,是一个只写属性,用来设置图层相对应的空间数据和属性数据的数据库。

l         DataConnection对象

表示数据库的连接,属性包括Database:设置和读取数据库的连接,如果数据为shape文件时,此值表示shape文件所在的目录路径和目录名,自动产生ODBC连接。

l         在将对象的引用赋给变量、数据类型的元素或可写对象的属性时,须使用关键字“set”,在创建对象类的实例时,须使用关键字“new”。

思考并作业(1:利用以前所学的VB中的驱动器列表框控件、目录列表框控件和文件列表框控件来加载地图文件。

 

二、地图操作的基本功能

1、地图放大:Map1.Extent

2、地图移动:Map1.pan

3、地图缩小:预先设置缩小倍数

4、恢复原始大小:set map1.extent = map1.fullextent

几点说明:

l         Extent属性

这是表示当前图形显示范围的一个变量,可以修改和读取这个变量,这个变量的类型为矩形(Rectangle)类型。

l         Fullextent属性

表示所有图层总的坐标范围,变量类型为矩形(Rectangle)类型,主要用于图形的全图显示。

l         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 Sub

 

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




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值