基于组件的GIS开发——VisualBasic和MapObjects实现课件.ppt
《基于组件的GIS开发——VisualBasic和MapObjects实现课件.ppt》由会员分享,可在线阅读,更多相关《基于组件的GIS开发——VisualBasic和MapObjects实现课件.ppt(205页珍藏版)》请在三一办公上搜索。
1、基于组件的GIS开发Visual Basic和MapObjects实现,第一章 MapObjects介绍,技术的产生,利用GIS支撑软件进行二次开发可以充分利用支撑软件所具有的强大功能,开发比较容易,但开发的系统要在支撑软件的环境中运行,系统往往比较庞大,相应成本也高,对某些地图和空间分析只是部分功能的系统来说,二次开发就不太适合。此外二次开发受到原有软件的限制,灵活性没有底层开发大。,1,基于上述原因,用户希望GIS支撑软件能组件化,在开发系统时,根据需要利用功能组件。为此,一些GIS公司相继开发了供应用开发人员使用的制图与GIS功能组件,如ESRI公司的MapObjects、MapInfo
2、公司的MapX、中科院地理信息中心的SuperMap等。,MapObjects产品,MapObjects简称MO,是ESRI公司开发的一组供开发人员使用的制图与GIS功能组件(ActiveX控件)。ActiveX是当今得到最广泛支持的面向目标的软件集成技术。用户象用砖块盖房子一样利用ActiveX组件开发和集成Windows应用。,2,MO目前使用的主要版本为2.0、2.1和2.2。MO2.0于1999年发布;MO2.1于2001年3月,增加了CAD、ArcSDE、StreetMap等文件格式的支持功能;MO2.2发布于2003年1月,主要增加直接读取GIF和TIFF文件等功能。,MapObj
3、ects 2.0由一个Map控件和46个可编程ActiveX对象所组成,可以直接插入到许多标准开发环境的工具集中,包括VB、Delphi、Visual C+、PowerBuilder等流行的程序设计环境。MapObjects 2.2增加了Legend和Scalebar控件。,MapObjects功能,利用MapObjects,开发人员可以实现如下的GIS功能:显示具有多个图层的地图地图的放大、缩小和漫游增加点、线、圆和多边形等各种图形增加文本显示特征的属性利用图形选择特征利用邻近分析选择特征,3,利用SQL表达式选择特征 选择特征的统计查询和更新选择特征的属性数据各种专题制图按字段的高程或测量
4、值显示按字段值对特征进行标号显示遥感图像,实时或时间序列数据的动态显示地理编码利用特征的测量值显示点和线事件地图坐标转换地图的空间操作地图的旋转,在Visual Basic下使用MapObjects,打开Visual Basic的程序开发环境,增加MapObjcts控件(Map控件)到控件工具框中。如果要在应用程序中加入地图,则在控件栏中选择Map控件,利用该控件画一个图框用于显示地图。Map控件属性设置,包括所要显示的图层、显示顺序、每一图层的显示特性等。根据需要增加其他控件,并利用MO提供的对象进行编程。,4,Map控件属性设置,图层属性设置,程序运行界面,如何学习MO,利用MapObje
5、cts在线帮助在地图控件处于活动(选中)状态下,按F1将打开MO在线帮助。MO在线帮助含有每个对象的特性、方法、事件和变量的详细文档。学习MapObjects的最好方法是在在线帮助中利用编码例子。大多数帮助条目含有可以在VB工程中执行的例子。,5,阅读开发实例MO还有许多实例(ESRIMapObjectsSamplesVB),它们的Form设计和代码可以参考。,第二章 MapObjects对象,MO中有46个对象,可以划分成5个大类:数据操作对象类(10个)地图显示对象类(17个)投影对象类(8个)图形对象类(7个)地址匹配对象类(4个),对象是根据需要而产生的。对象可以是具体的实体(如学生)
6、,也可以是反映实体性质的特征(如成绩)。通过对象的属性(或方法)可以得到新的对象或属性信息(如通过学生的成绩属性可以得到成绩对象,通过成绩对象的属性又可以得到具体的成绩信息,如数学成绩);可以利用对象或值对对象的属性进行赋值(如定义一个成绩对象并把它赋给一个学生的成绩属性;通过把具体的值赋给一个成绩对象来定义一个成绩对象)。,DataConnection对象,GeoDatasets集合,GeoDataset对象,Recordset对象,Fields集合,Field对象,Statistics对象,TableDesc对象,Table对象,Strings集合,通过GeoDatasets属性,通过It
7、em方法,通过Fields属性,通过Item方法,通过CalculateStatistics方法,通过TableDesc属性,通过Records属性,通过Database等属性与数据库或文件目录建立连接,数据操作对象类,MapLayer对象,通过GeoDataset属性,通过Records属性,通过定义DataConnection对象可以确定连接的数据库或文件目录。利用DataConnection对象的GeoDatasets属性可以得到图层数据的集合对象(GeoDatasets)。利用GeoDatasets的Item方法可以得到其中的一个图层文件。利用Layers集合的Add方法可以把图层文件
8、增加到地图控件中,并作为一个MapLayer对象。,利用MapLayer对象的Records属性可以得到Recordset对象。通过Recordset对象的Fields属性可以得到Fields集合;通过Fields集合的Item方法可以得到其中的一个Field对象。通过Recordset对象的MoveFirst、MoveNext、MovePrevious方法可以对Recordset对象中的记录进行定位。,Map控件,Layers集合,MapLayer对象,ImageLayer对象,TrackingLayer对象,GeoEvent对象,通过Item方法,通过TrackingLayers属性,通过
9、Layers属性,通过Event属性,地图显示对象类,Event Renderer对象,ZRenderer对象,Chart Renderer对象,TextSymbol对象,Symbol对象,ClassBreaks Renderer对象,ValueMap Renderer对象,DotDensity Renderer对象,Label Renderer对象,Group Renderer对象,LabelPlacer对象,Map Control上的图层包括MapLayer、ImageLayer和TrackingLayer。一个Map Control只有一个TrackingLayer。MapLayer和I
10、mageLayer的集合所对应的对象为Layers。MapLayer有不同的显示方式,通过给MapLayer的Symbol属性赋值,使MapLayer以新的符号显示;通过给MapLayer的Renderer属性赋值,使MapLayer以新的显示方式显示。,GeoTransformation对象,GeoCoordSys对象,ProjCoordSys对象,Projection对象,Prime Meridian对象,Datum对象,Unit对象,Spheroid对象,Map控件,MapLayer对象,投影对象类,有两种类型坐标系;地理坐标系和投影坐标系。通过Prime-Meridian、Datum和
11、Unit三个对象可以定义一个地理坐标系,其中,Datum包括Spheroid对象的定义。通过GeoCoord、SysProjCoordSys和Unit三个对象可以定义一个投影坐标系。Map控件和MapLayer对象有CoordinateSystem属性,该属性可以用GeoCoordSys对象或ProjCoordSys对象来赋值。同时GeoCoordSys对象和ProjCoordSys对象又可以通过Type属性定义具体的坐标类型。MapLayer对象有GeographicTransformation属性,该属性可以用GeoTransformation对象来赋值,GeoTransformation
12、对象有type属性用于定义坐标变换类型。,图形对象类,Point对象,Points对象,Line对象,Polygon对象,Rectangle对象,Ellipse对象,通过Item方法,Parts 集合,通过Parts属性,通过Add方法,通过Bottom、Left、Top和Right四个属性可以定义一个Rectangle对象Ellipse对象,通过Point对象的x、y属性可以定义一个点。通过Points对象的Add方法可以把一个点增加到Points对象中。一个线对象和一个多边形对象可以是多个部分(Parts)组成,通过Parts属性可以得到Parts集合。Parts集合的Add方法可以把Po
13、ints对象增加到Parts集合。,AddressLocation对象,Standardizer对象,Geocoder对象,PlaceLocator对象,地址匹配对象类,第三章 地图与图层,在MO中,Map Control(地图控件)是一个载体,可以在地图控件上增加一个或多个图层。MO支持三种类型图层:矢量图层、栅格图层和动态(Tracking)图层,所对应的对象分别为MapLayer、ImageLayer和TrackingLayer。矢量图层和栅格图层分别用于显示矢量数据和栅格数据,栅格图层和动态图层的集合所对应的对象为Layers(图层集合对象)。,动态图层用于显示动态数据,如通过GPS采
14、集到的车辆移动中的位置数据。在TrackingLayer层显示的对象称为GeoEvent对象。一个地图控件只有一个TrackingLayer层。当在窗体中增加一个地图控件时,就会有一个TrackingLayer层,这时,没有GeoEvent对象,GeoEvent对象的EventCount属性为0。,增加矢量图层,矢量图层是和具体的数据相关联,要增加矢量图层,首先要确定(连接)对应的数据。连接的方法是利用DataConnection和GeoDataset两个对象。利用DataConnection对象的Database属性可以定义矢量数据所在的路径。利用DataConnection对象的FindG
15、eoDataset(“文件名”)方法可以得到指定路径下的文件,并返回GeoDataset对象。利用该对象对MapLayer的GeoDataset属性进行赋值,使MapLayer与具体的数据文件关联。在图层集合中增加该图层。,1,Dim dConn As New MapObjects2.DataConnection Dim mLayer As New MapObjects2.MapLayer dConn.Database=c:“Set mLayer.GeoDataset=dConn.FindGeoDataset(landuse)Map1.Layers.Add mLayer,增加栅格图层,增加图像
16、文件相对简单,只要声明一个新的Imagelayer对象,利用Imagelayer对象的File属性确定对应的图像文件,再在图层集合对象中利用Add方法增加该Imagelayer对象。,2,Dim iLayer As New ImageLayer iLayer.File=c:p1.jpg Map1.Layers.Add iLayer,Tracking层的操作,利用AddEvent方法可在Tracking层中增加一个新的GeoEvent对象:TrackingLayer.AddEvent(shape,SymbolIndex)Shape可以是点、线、多边形等图形对象,SymbolIndex是Track
17、ingLayer符号列表中符号索引,0表示缺省符号。,3,Dim pt As New MapObjects2.Point pt.X=Rnd pt.Y=Rnd Map1.TrackingLayer.AddEvent pt,0,在TrackingLayer中增加一个点事件的代码,Rnd表示产生一个随机数(01之间),Private Sub Form_Load()Timer1.Interval=1000End Sub Private Sub Timer1_Timer()Dim pt As New MapObjects2.Point pt.X=Rnd pt.Y=Rnd Map1.TrackingLay
18、er.AddEvent pt,0End Sub,以一定的时间间隔增加点事件的代码,如要清除前面的点,可以在一开始增加Map1.TrackingLayer.ClearEvents,在窗体上设置两个按钮,可以启动和暂停动态显示。Private Sub Command1_Click()Timer1.Enabled=TrueEnd SubPrivate Sub Command2_Click()Timer1.Enabled=FalseEnd Sub,利用对话框选择需要增加的图层,CommonDialog1.Filter=“ESRI Shapefiles(*.shp)|*.shp“,对对话框中显示的文件进
19、行过滤。CommonDialog1.ShowOpen,打开对话框。CurDir,返回用户选中文件的路径。name=CommonDialog1.FileTitle,只返回用户选中的文件,不包括路径。,4,Dim dc As New DataConnectionDim name As StringDim layer As New MapObjects2.MapLayer CommonDialog1.Filter=Shapefiles(*.shp)|*.shp CommonDialog1.ShowOpen dc.Database=CurDir Name=CommonDialog1.FileTitle
20、 Set layer.GeoDataset=dc.FindGeoDataset(name)Map1.Layers.Add layer,利用图例操作图层,在工程/部件下选中ESRI MapObjects Legend Control,图例控件将显示在控件栏中。利用图例控件在Form上画图例框架。利用legend1.setMapSource Map1使图例与相应的地图控件关联。当增加图层或删除图层时,利用legend1.LoadLegend True更新图例。当在图例上设置图层可见或不可见时,利用Map1.Refresh刷新地图。,5,Private Sub Form_Load()legend1.
21、setMapSource Map1End SubPrivate Sub Map1_AfterLayerDraw()legend1.LoadLegend TrueEnd SubPrivate Sub legend1_AfterSetLayerVisible()Map1.RefreshEnd Sub,程序运行后,在图例框架上将显示各个图层,通过拖动图层可以改变图层的显示顺序,点击图层的复选框可以设置图层是否可见。,删除选中图层利用legend控件的getActiveLayer方法得到选中图层的索引号。利用Layers的Remove(n)方法删除第n个图层。,Dim n As Integer n=l
22、egend1.getActiveLayer Map1.Layers.Remove(n),第四章 坐标系,控件坐标和地图坐标,地图控件的坐标系与VB窗体的坐标系一样,原点在左上角,从左到右,x坐标逐渐增加;从上到下,y坐标逐渐增加。坐标的缺省单位为twip。当我们定义了一个地图控件,该控件的坐标范围将保持不变。地图坐标系是笛卡尔坐标系,从左到右,x坐标逐渐增加;从下到上,y坐标逐渐增加。地图控件的地图坐标范围不是固定的,随着地图的放大、缩小和漫游发生变化。,1,据地图控件的坐标范围以及地图的坐标范围,我们可以对控件坐标和地图坐标进行转换。控件坐标转为地图坐标,利用ToMapPoint方法。地图坐
23、标转为控件坐标,利用FromMapPoint方法。,Dim mapx As SingleDim mapy As Single Text1.Text=x:&X&,&y:&Y mapx=Map1.ToMapPoint(X,Y).X mapy=Map1.ToMapPoint(X,Y).Y Text2.Text=mapx:&mapx&,&mapy:&mapy,显示矢量图层的坐标系信息,矢量图层的坐标系信息保存在prj文件中,它记录坐标系类型(地理坐标或投影坐标)、Datum、单位等信息。利用MapLayer的CoordinateSystem属性可得到GeoCoordSys对象或ProjCoordSys
24、对象,可通过返回对象的IsProjected属性来判断是GeoCoordSys对象还是ProjCoordSys对象。,2,如是GeoCoordSys对象,通过该对象的Datum属性得到Datum对象,进一步可得到Datum的详细信息;同样可以得到Unit等其它属性的详细信息。如是ProjCoordSys对象,通过该对象的GeoCoordSys属性得到投影前的地理坐标系信息;利用Projection属性得到有关的投影信息,同样可以得到其它属性的详细信息。,Dim ly As MapObjects2.MapLayerDim gcs As New MapObjects2.GeoCoordSysDim
25、 pcs As New MapObjects2.ProjCoordSys Set ly=Map1.Layers(0)If ly.CoordinateSystem.IsProjected Then Set pcs=ly.CoordinateSystem Text1.Text=投影坐标系 Text2.Text=pcs.GeoCoordSys.Datum.Name Text3.Text=pcs.Unit.Name Text4.Text=pcs.Projection.Name Else Set gcs=ly.CoordinateSystem Text1.Text=地理坐标系 Text2.Text=gc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 组件 GIS 开发 VisualBasic MapObjects 实现 课件

链接地址:https://www.31ppt.com/p-3971226.html