基于组件的GIS开发――Visual Basic和MapObjects实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于组件的GIS开发——VisualBasic和MapObjects实现第一章MapObjects介绍技术的产生•利用GIS支撑软件进行二次开发可以充分利用支撑软件所具有的强大功能,开发比较容易,但开发的系统要在支撑软件的环境中运行,系统往往比较庞大,相应成本也高,对某些地图和空间分析只是部分功能的系统来说,二次开发就不太适合。此外二次开发受到原有软件的限制,灵活性没有底层开发大。1•基于上述原因,用户希望GIS支撑软件能组件化,在开发系统时,根据需要利用功能组件。•为此,一些GIS公司相继开发了供应用开发人员使用的制图与GIS功能组件,如ESRI公司的MapObjects、MapInfo公司的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文件等功能。•MapObjects2.0由一个Map控件和46个可编程ActiveX对象所组成,可以直接插入到许多标准开发环境的工具集中,包括VB、Delphi、VisualC++、PowerBuilder等流行的程序设计环境。•MapObjects2.2增加了Legend和Scalebar控件。MapObjects功能•利用MapObjects,开发人员可以实现如下的GIS功能:–显示具有多个图层的地图–地图的放大、缩小和漫游–增加点、线、圆和多边形等各种图形–增加文本–显示特征的属性–利用图形选择特征–利用邻近分析选择特征3–利用SQL表达式选择特征–选择特征的统计–查询和更新选择特征的属性数据–各种专题制图–按字段的高程或测量值显示–按字段值对特征进行标号–显示遥感图像–实时或时间序列数据的动态显示–地理编码–利用特征的测量值显示点和线事件–地图坐标转换–地图的空间操作–地图的旋转在VisualBasic下使用MapObjects•打开VisualBasic的程序开发环境,增加MapObjcts控件(Map控件)到控件工具框中。•如果要在应用程序中加入地图,则在控件栏中选择Map控件,利用该控件画一个图框用于显示地图。•Map控件属性设置,包括所要显示的图层、显示顺序、每一图层的显示特性等。•根据需要增加其他控件,并利用MO提供的对象进行编程。4Map控件属性设置图层属性设置程序运行界面如何学习MO•利用MapObjects在线帮助–在地图控件处于活动(选中)状态下,按F1将打开MO在线帮助。MO在线帮助含有每个对象的特性、方法、事件和变量的详细文档。学习MapObjects的最好方法是在在线帮助中利用编码例子。大多数帮助条目含有可以在VB工程中执行的例子。5•阅读开发实例–MO还有许多实例(ESRI\MapObjects\Samples\VB),它们的Form设计和代码可以参考。第二章MapObjects对象•MO中有46个对象,可以划分成5个大类:–数据操作对象类(10个)–地图显示对象类(17个)–投影对象类(8个)–图形对象类(7个)–地址匹配对象类(4个)•对象是根据需要而产生的。•对象可以是具体的实体(如学生),也可以是反映实体性质的特征(如成绩)。•通过对象的属性(或方法)可以得到新的对象或属性信息(如通过学生的成绩属性可以得到成绩对象,通过成绩对象的属性又可以得到具体的成绩信息,如数学成绩);•可以利用对象或值对对象的属性进行赋值(如定义一个成绩对象并把它赋给一个学生的成绩属性;通过把具体的值赋给一个成绩对象来定义一个成绩对象)。DataConnection对象GeoDatasets集合GeoDataset对象Recordset对象Fields集合Field对象Statistics对象TableDesc对象Table对象Strings集合通过GeoDatasets属性通过Item方法通过Fields属性通过Item方法通过CalculateStatistics方法通过TableDesc属性通过Records属性通过Database等属性与数据库或文件目录建立连接数据操作对象类MapLayer对象通过GeoDataset属性通过Records属性•通过定义DataConnection对象可以确定连接的数据库或文件目录。•利用DataConnection对象的GeoDatasets属性可以得到图层数据的集合对象(GeoDatasets)。•利用GeoDatasets的Item方法可以得到其中的一个图层文件。•利用Layers集合的Add方法可以把图层文件增加到地图控件中,并作为一个MapLayer对象。•利用MapLayer对象的Records属性可以得到Recordset对象。•通过Recordset对象的Fields属性可以得到Fields集合;通过Fields集合的Item方法可以得到其中的一个Field对象。•通过Recordset对象的MoveFirst、MoveNext、MovePrevious方法可以对Recordset对象中的记录进行定位。Map控件Layers集合MapLayer对象ImageLayer对象TrackingLayer对象GeoEvent对象通过Item方法通过TrackingLayers属性通过Layers属性通过Event属性地图显示对象类EventRenderer对象ZRenderer对象ChartRenderer对象TextSymbol对象Symbol对象ClassBreaksRenderer对象ValueMapRenderer对象DotDensityRenderer对象LabelRenderer对象GroupRenderer对象LabelPlacer对象•MapControl上的图层包括MapLayer、ImageLayer和TrackingLayer。•一个MapControl只有一个TrackingLayer。•MapLayer和ImageLayer的集合所对应的对象为Layers。•MapLayer有不同的显示方式,通过给MapLayer的Symbol属性赋值,使MapLayer以新的符号显示;通过给MapLayer的Renderer属性赋值,使MapLayer以新的显示方式显示。GeoTransformation对象GeoCoordSys对象ProjCoordSys对象Projection对象PrimeMeridian对象Datum对象Unit对象Spheroid对象Map控件MapLayer对象投影对象类•有两种类型坐标系;地理坐标系和投影坐标系。–通过Prime-Meridian、Datum和Unit三个对象可以定义一个地理坐标系,其中,Datum包括Spheroid对象的定义。–通过GeoCoord、SysProjCoordSys和Unit三个对象可以定义一个投影坐标系。•Map控件和MapLayer对象有CoordinateSystem属性,该属性可以用GeoCoordSys对象或ProjCoordSys对象来赋值。同时GeoCoordSys对象和ProjCoordSys对象又可以通过Type属性定义具体的坐标类型。•MapLayer对象有GeographicTransformation属性,该属性可以用GeoTransformation对象来赋值,GeoTransformation对象有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方法可以把Points对象增加到Parts集合。AddressLocation对象Standardizer对象Geocoder对象PlaceLocator对象地址匹配对象类第三章地图与图层•在MO中,MapControl(地图控件)是一个载体,可以在地图控件上增加一个或多个图层。MO支持三种类型图层:矢量图层、栅格图层和动态(Tracking)图层,所对应的对象分别为MapLayer、ImageLayer和TrackingLayer。•矢量图层和栅格图层分别用于显示矢量数据和栅格数据,栅格图层和动态图层的集合所对应的对象为Layers(图层集合对象)。•动态图层用于显示动态数据,如通过GPS采集到的车辆移动中的位置数据。在TrackingLayer层显示的对象称为GeoEvent对象。•一个地图控件只有一个TrackingLayer层。当在窗体中增加一个地图控件时,就会有一个TrackingLayer层,这时,没有GeoEvent对象,GeoEvent对象的EventCount属性为0。增加矢量图层•矢量图层是和具体的数据相关联,要增加矢量图层,首先要确定(连接)对应的数据。连接的方法是利用DataConnection和GeoDataset两个对象。•利用DataConnection对象的Database属性可以定义矢量数据所在的路径。•利用DataConnection对象的FindGeoDataset(―文件名”)方法可以得到指定路径下的文件,并返回GeoDataset对象。•利用该对象对MapLayer的GeoDataset属性进行赋值,使MapLayer与具体的数据文件关联。•在图层集合中增加该图层。1DimdConnAsNewMapObjects2.DataConnectionDimmLayerAsNewMapObjects2.MapLayerdConn.Database=c:\―SetmLayer.GeoDataset=dConn.FindGeoDataset(landuse)Map1.Layers.AddmLayer增加栅格图层•增加图像文件相对简单,只要声明一个新的Imagelayer对象,利用Imagelayer对象的File属性确定对应的图像文件,再在图层集合对象中利用Add方法增加该Imagelayer对象。2DimiLayerAsNewImageLayeriLayer.File=c:\p1.jpgMap1.Layers.AddiLayerTracking层的操作•利用AddEvent方法可在Tracking层中增加一个新的GeoEvent对象:TrackingLayer.AddEvent(shape,SymbolIndex)Shape可以是点、线、多边形等图形对象,SymbolIndex是TrackingLayer符号列表中符号索引,0表示缺省符号。3DimptAsNewMapObjects2.Pointpt.X=Rndpt.Y=RndMap1.TrackingLayer.AddEventpt,0在TrackingLayer中增加一个点事件的代码Rnd表示产生一个随机数(0—1之间)PrivateSubForm_Load()Timer1.Interval=1000EndSubPrivateSubTimer1_Timer()DimptAsNewMapObjects2.Pointpt.X=Rndpt.Y=RndMap1.TrackingL

1 / 205
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功