mo+vb开发docWord格式.docx
- 文档编号:19437030
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:36
- 大小:353.13KB
mo+vb开发docWord格式.docx
《mo+vb开发docWord格式.docx》由会员分享,可在线阅读,更多相关《mo+vb开发docWord格式.docx(36页珍藏版)》请在冰豆网上搜索。
6)利用图形选择特征
7)利用邻近分析选择特征
8)利用SQL表达式选择特征
9)选择特征的统计
10)查询和更新选择特征的属性数据
11)各种专题制图
12)按字段的高程或测量值显示
13)按字段值对特征进行标号
14)显示遥感图像
15)实时或时间序列数据的动态显示
16)地理编码
17)利用特征的测量值显示点和线事件
18)地图坐标转换
19)地图的空间操作
20)地图的旋转
4、在VisualBasic下使用MapObjects
安装MapObjcts之后,打开VisualBasic的程序开发环境,在左边的控件面板上点击右键将弹出控件选择框,选择ERSIMapObjcts2.2,控件中将增加一个名叫Map的控件。
如果要在应用程序中加入地图,则在控件栏中选择Map控件,利用该控件画一个图框用于显示地图。
设置Map控件属性,包括所要显示的图层、显示顺序、每一图层的显示特性等(图1—1)。
根据需要增加其他控件,并利用MO提供的对象进行编程。
图1—1Map控件属性和图层属性设置
程序运行界面如图1—2所示。
图1—2程序运行界面
5、利用MapObjects在线帮助和实例
在地图控件处于活动状态下,按F1将打开MapObjects在线帮助。
MapObjects在线帮助含有每个对象、特性、方法、事件和变量的详细文档。
学习MapObjects的最好方法是在在线帮助中利用编码例子。
大多数帮助条目含有可以在VB工程中执行的例子。
此外,MO还有许多实例,它们的Form设计和代码可以参考。
二、MO对象
MO中有46个对象,可以划分成5个大类:
数据操作对象类(10个)、地图显示对象类(17个)、投影对象类(8个)、图形对象类(7个)和地址匹配对象类(4个)。
1、数据操作对象类
数据操作对象类中各个对象的关系如图2—1所示。
通过定义DataConnection对象可以确定连接的数据库或文件目录。
利用DataConnection对象的GeoDatasets属性可以得到图层数据的集合对象(GeoDatasets)。
利用GeoDatasets的Item方法可以得到其中的一个图层文件。
利用Layers集合的Add方法可以把图层文件增加到地图控件中,并作为一个MapLayer对象。
利用MapLayer对象的Records属性可以得到Recordset对象。
通过Recordset对象的Fields属性可以得到Fields集合;
通过Fields集合的Item方法可以得到其中的一个Field对象。
通过Recordset对象的MoveFirst、MoveNext、MovePrevious方法可以对Recordset对象中的记录进行定位。
图2—1数据操作对象类中各个对象的关系
2、地图显示对象类
地图显示对象类中各个对象的关系如图2—2所示。
MapControl上的图层包括MapLayer、ImageLayer和TrackingLayer。
一个MapControl只有一个TrackingLayer。
MapLayer和ImageLayer的集合所对应的对象为Layers。
MapLayer有不同的显示方式,通过给MapLayer的Symbol属性赋值,使MapLayer以新的符号显示;
通过给MapLayer的Renderer属性赋值,使MapLayer以新的显示方式显示。
LabelPlacer对象
Symbol对象
Map控件
TextSymbol对象
通过Layers属性
EventRenderer对象
Layers集合
ZRenderer对象
MapLayer对象
ChartRenderer对象
通过Item方法
ImageLayer对象
ClassBreaksRenderer对象
通过TrackingLayers属性
ValueMapRenderer对象
GeoEvent对象
TrackingLayer对象
DotDensityRenderer对象
通过Event属性
LabelRenderer对象
GroupRenderer对象
图2—2地图显示对象类中各个对象的关系
3、投影对象类
投影对象类中各个对象的关系如图2—3所示。
有两种类型坐标系;
地理坐标系和投影坐标系。
通过Prime-Meridian、Datum和Unit三个对象可以定义一个地理坐标系,其中,Datum包括Spheroid对象的定义。
通过GeoCoord、SysProjCoordSys和Unit三个对象可以定义一个投影坐标系。
Map控件和MapLayer对象有CoordinateSystem属性,该属性可以用GeoCoordSys对象或ProjCoordSys对象来赋值。
同时GeoCoordSys对象和ProjCoordSys对象又可以通过Type属性定义具体的坐标类型。
MapLayer对象有GeographicTransformation属性,该属性可以用GeoTransformation对象来赋值,GeoTransformation对象有type属性用于定义坐标变换类型。
图2—3投影对象类中各个对象的关系
4、图形对象类
图形对象类中各个对象的关系如图2—4所示
通过Point对象的x、y属性可以定义一个点。
通过Points对象的Add方法可以把一个点增加到Points对象中。
一个线对象和一个多边形对象可以是多个部分(Parts)组成,通过Parts属性可以得到Parts集合。
Parts集合的Add方法可以把Points对象增加到Parts集合。
图2—4投影对象类中各个对象的关系
5、地址匹配对象类
地址匹配对象类共有4个对象(图2—5)。
图2—5地址匹配对象类
三、地图与图层操作
在MO中,MapControl(地图控件)是一个载体,可以在地图控件上增加一个或多个图层。
Mo支持三种类型图层:
矢量图层、栅格图层和动态(Tracking)图层,所对应的对象分别为MapLayer、ImageLayer和TrackingLayer。
矢量图层和栅格图层分别用于显示矢量数据和栅格数据,栅格图层和动态图层的集合所对应的对象为Layers(图层集合对象)。
动态图层用于显示动态数据,如通过GPS采集到的车辆移动中的位置数据。
在TrackingLayer层显示的对象称为GeoEvent对象。
当在窗体中增加一个地图控件时,就会有一个TrackingLayer层,这时,没有GeoEvent对象,GeoEvent对象的EventCount属性为0。
1、增加矢量图层
矢量图层是和具体的数据相关联,要增加矢量图层,首先要确定(连接)对应的数据。
连接的方法是利用DataConnection和GeoDataset两个对象。
DataConnection对象表示与包含shapefiles的文件夹或包含SDE数据库的服务器的连接。
如要连接到包含shapefiles的文件夹,把DataConnection对象的Database属性设置为文件夹名(字符串,包括路径),然后应用Connect方法,如果返回值为True,表明连接成功。
如要连接到SDE数据库,则需要设置数据库、口令、服务器和用户特性,然后应用Connect方法检查是否连接成功。
如果连接成功,就可以利用FindGeoDataset方法把文件夹中的一个shapefile文件或SDE数据库中的一个层的数据赋给新创建图层的GeoDataset。
接着,在图层集合中增加该图层。
以下的代码显示在地图控件中增加矢量图层。
DimdConnAsNewMapObjects2.DataConnection
DimmLayerAsNewMapObjects2.MapLayer
dConn.Database="
c:
\"
SetmLayer.GeoDataset=dConn.FindGeoDataset("
landuse"
)
Map1.Layers.AddmLayer
2、增加栅格图层
增加图像文件相对简单,只要声明一个新的Imagelayer对象,利用Imagelayer对象的File属性确定对应的图像文件,再在图层集合对象中利用Add方法增加该Imagelayer对象。
DimiLayerAsNewImageLayer
iLayer.File="
\p1.jpg"
Map1.Layers.AddiLayer
3、Tracking层的操作
利用AddEvent方法可在Tracking层中增加一个新的GeoEvent对象:
TrackingLayer.AddEvent(shape,SymbolIndex)
Shape可以是点、线、多边形等图形对象,SymbolIndex是TrackingLayer符号列表中符号索引,0表示缺省符号。
下面的代码将在Tracking层中增加一个新的GeoEvent对象。
DimptAsNewMapObjects2.Point
pt.X=Rnd
pt.Y=Rnd
Map1.TrackingLayer.AddEventpt,0
下面的代码将演示动态显示图形。
1)利用Timer控件的Interval属性来控制执行操作的时间间隔。
Interval的单位为ms,即千分之一秒。
PrivateSubForm_Load()
Timer1.Interval=1000
EndSub
PrivateSubTimer1_Timer()
DimptAsNewMapObjects2.Point
pt.X=Rnd
pt.Y=Rnd
Map1.TrackingLayer.AddEventpt,0
Rnd函数返回0和1之间的随机数。
如要清除前面的点,增加Map1.TrackingLayer.ClearEvents
在窗体上设置两个按钮,可以启动和暂停动态显示。
PrivateSubCommand1_Click()
Timer1.Enabled=True
PrivateSubCommand2_Click()
Timer1.Enabled=False
4、利用对话框选择需要增加的图层
增加VisualBasic的CommonDialog控件(MicrosoftCommonDialogControl6.0)以便确定文件的路径和文件名。
双击“增加图层”按钮进行编程。
增加以下的VisualBasic语句。
PrivateSubCommand1_Click()
DimdcAsNewDataConnection
DimgsAsGeoDataset
DimnameAsString
DimlayerAsNewMapObjects2.MapLayer
CommonDialog1.Filter="
Shapefiles(*.shp)|*.shp"
CommonDialog1.ShowOpen
dc.Database=CurDir
Name=CommonDialog1.FileTitle
Setgs=dc.FindGeoDataset(name)
layer.GeoDataset=gs
Map1.Layers.Addlayer
EndSub
执行程序,点击增加图层按钮,并选择所要显示的Shape文件,选择的图层将显示在地图中。
CurDir[(Drive)],指定一个存在的驱动器。
如果没有指定驱动器,或drive是零长度字符串(“”),则CurDir会返回当前驱动器的路径。
5、利用图例操作图层
在工程/部件下选中ESRIMapObjectsLegendControl,图例控件将显示在控件栏中。
利用图例控件在Form上画图例框架。
1)利用legend1.setMapSourceMap1使图例与相应的地图控件关联。
2)当增加图层或删除图层时,利用legend1.LoadLegendTrue更新图例。
3)当在图例上设置图层可见或不可见时,利用Map1.Refresh刷新地图。
legend1.setMapSourceMap1
PrivateSubMap1_AfterLayerDraw(ByValindexAsInteger,ByValcanceledAsBoolean,ByValhDCAsstdole.OLE_HANDLE)
legend1.LoadLegendTrue
PrivateSublegend1_AfterSetLayerVisible(IndexAsInteger,isVisibleAsBoolean)
Map1.Refresh
程序运行后,在图例框架上将显示各个图层,通过拖动图层可以改变图层的显示顺序,点击图层的复选框可以设置图层是否可见。
删除选中图层
DimnAsInteger
n=legend1.getActiveLayer
Map1.Layers.Remove(n)
四、坐标系
1、控件坐标和地图坐标
地图控件的坐标系与VB窗体的坐标系一样,原点在左上角,从左到右,x坐标逐渐增加;
从上到下,y坐标逐渐增加。
坐标的缺省单位为twip。
当我们定义了一个地图控件,该控件的坐标范围将保持不变。
地图坐标系是笛卡尔坐标系,从左到右,x坐标逐渐增加;
从下到上,y坐标逐渐增加。
地图控件的地图坐标范围不是固定的,随着地图的放大、缩小和漫游发生变化。
根据地图控件的坐标范围以及地图的坐标范围,我们可以对控件坐标和地图坐标进行转换。
控件坐标转为地图坐标,利用ToMapPoint方法。
地图坐标转为控件坐标,利用FromMapPoint方法。
DimmapxAsSingle
DimmapyAsSingle
Text1.Text="
x:
"
&
X&
"
"
y:
Y
mapx=Map1.ToMapPoint(X,Y).X
mapy=Map1.ToMapPoint(X,Y).Y
Text2.Text="
mapx:
mapx&
mapy:
mapy
2、显示矢量图层的坐标系信息
矢量图层的坐标系信息保存在prj文件中,它记录坐标系类型(地理坐标或投影坐标)、Datum、单位等信息。
利用MapLayer的CoordinateSystem属性可得到GeoCoordSys对象或ProjCoordSys对象,可通过返回对象的IsProjected属性来判断是GeoCoordSys对象还是ProjCoordSys对象。
如是GeoCoordSys对象,通过该对象的Datum属性得到Datum对象,进一步可得到Datum的详细信息;
同样可以得到Unit等其它属性的详细信息。
如是ProjCoordSys对象,通过该对象的GeoCoordSys属性得到投影前的地理坐标系信息;
利用Projection属性得到有关的投影信息,同样可以得到其它属性的详细信息。
下面的代码是在文本框中显示图层的相关坐标系信息。
DimlyAsMapObjects2.MapLayer
DimgcsAsNewMapObjects2.GeoCoordSys
DimpcsAsNewMapObjects2.ProjCoordSys
Setly=Map1.Layers(0)
Ifly.CoordinateSystem.IsProjectedThen
Setpcs=ly.CoordinateSystem
投影坐标系"
Text2.Text=pcs.GeoCoordSys.Datum.Name
Text3.Text=pcs.Unit.Name
Text4.Text=pcs.Projection.Name
Else
Setgcs=ly.CoordinateSystem
地理坐标系"
Text2.Text=gcs.Datum.Name
Text3.Text=gcs.Unit.Name
Text4.Text="
EndIf
3、改变Map控件的坐标系
改变Map控件的坐标系将使控件中的地图以新的坐标系来显示。
改变Map控件坐标系的方法是先定义一个坐标系对象(GeoCoordSys对象或ProjCoordSys对象),然后赋与Map控件的CoordinateSystem属性。
下面的代码是把Map控件的坐标系改变成地理坐标系(图4—1)。
gcs.Type=moGeoCS_WGS1984
Map1.CoordinateSystem=gcs
下面的代码是把Map控件的坐标系改变成投影坐标系(图4—2)。
pcs.Type=moProjCS_World_WinkelII
Map1.CoordinateSystem=pcs
图4—1Map控件的坐标系改变成地理坐标系
图4—2Map控件的坐标系改变成投影坐标系
五、地图显示范围操作
1、地图显示范围
在Map控件上显示的地图范围可以通过Map控件的Extent属性来得到和设置。
Map控件的“Extent”属性返回rectangle对象,反映在Map控件中显示的地图范围,由Top(左上角y坐标)、Left(左上角x坐标)、Bottom(右下角y坐标)和Right(右下角x坐标)四个坐标值组成。
通过“Extent”设置地图的显示范围,有如下几种方法:
1)通过坐标赋值设置地图范围
WithMap1.Extent
.Left=20000
.Bottom=45000
.Right=32000
.Top=57000
EndWith
2)设置为所有图层的最大范围
SetMap1.Extent=Map1.FullExtent
3)对目前的范围乘以一个比例因子,改变范围的大小
SetMap1.Extent=Map1.Extent.ScaleRectangle(.5)
4)通过地图交互改变显示范围的位置(地图漫游)
SetMap1.Extent=Map1.Pan
5)使地图的中心点定位在某一位置
SetMap1.Extent=Map1.CenterAt(55000,65000)
改变显示范围的大小实际上改变地图的显示比例尺。
地图比例尺是Map控件的屏幕范围(长度或高度)与实际范围(长度或高度)的比值。
在VB中,窗体的缺省单位是twips,是1英寸的1/1440。
通过Map控件的Width和height属性可得到Map控件的宽度和高度(屏幕范围,单位是twips),通过换算并与地图实际的宽度或高度比较即可得到地图比例尺(利用宽度或高度结果一致)。
2、地图的放大、缩小和全图显示(按钮方式)
地图的放大、缩小和全图显示实际上是改变地图的显示范围。
在同一Map控件中,显示范围越大,则比例尺越小;
反之,比例尺越大。
即:
地图放大是通过缩小地图范围;
地图缩小是通过扩大地图范围。
定义地图范围的Rectangle对象可以利用ScaleRectangle(ScaleFactor)方法来改变,如比例因子为2,则Rectangle的高度和宽度都乘以2,地图缩小1倍。
如地图放大1倍,则比例因子为0.5。
在Form上增加三个按钮(command1、command2和command3),
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mo vb 开发 doc