基于组件的GIS开发——VisualBasic和MapObjects实现
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• MapObjects 2.0由一个Map控件和46个 可编程ActiveX对象所组成,可以直接 插入到许多标准开发环境的工具集中, 包括VB、Delphi、Visual C++、 PowerBuilder等流行的程序设计环境。 • MapObjects 2.2增加了Legend和Scalebar 控件。
• 对象是根据需要而产生的。 • 对象可以是具体的实体(如学生),也可以是 反映实体性质的特征(如成绩)。 • 通过对象的属性(或方法)可以得到新的对象 或属性信息(如通过学生的成绩属性可以得到 成绩对象,通过成绩对象的属性又可以得到具 体的成绩信息,如数学成绩); • 可以利用对象或值对对象的属性进行赋值(如 定义一个成绩对象并把它赋给一个学生的成绩 属性;通过把具体的值赋给一个成绩对象来定 义一个成绩对象)。
• 动态图层用于显示动态数据,如通过 GPS采集到的车辆移动中的位置数据。 在TrackingLayer层显示的对象称为 GeoEvent对象。 • 一个地图控件只有一个TrackingLayer层。 当在窗体中增加一个地图控件时,就会 有一个TrackingLayer层,这时,没有 GeoEvent对象,GeoEvent对象的 EventCount属性为0。
• 基于上述原因,用户希望GIS支撑软件 能组件化,在开发系统时,根据需要 利用功能组件。 • 为此,一些GIS公司相继开发了供应用 开发人员使用的制图与GIS功能组件, 如ESRI公司的MapObjects、MapInfo公 司的MapX、中科院地理信息中心的 SuperMap等。
2
MapObjects产品
– – – – – –
实时或时间序列数据的动态显示 地理编码 利用特征的测量值显示点和线事件 地图坐标转换 地图的空间操作 地图的旋转
4
在Visual Basic下使用MapObjects
• 打开Visual Basic的程序开发环境,增加 MapObjcts控件(Map控件)到控件工具框中。 • 如果要在应用程序中加入地图,则在控件栏 中选择Map控件,利用该控件画一个图框用 于显示地图。 • Map控件属性设置,包括所要显示的图层、 显示顺序、每一图层的显示特性等。 • 根据需要增加其他控件,并利用MO提供的 对象进行编程。
ClassBreaks Renderer对象 ValueMap Renderer对象
TrackingLayer对象
GeoEvent对象
通过Event属性
DotDensity Renderer对象 Label Renderer对象 Group Renderer对象
地图显示对象类
• Map Control上的图层包括MapLayer、 ImageLayer和TrackingLayer。 • 一个Map Control只有一个TrackingLayer。 • MapLayer和ImageLayer的集合所对应的对象为 Layers。 • MapLayer有不同的显示方式,通过给MapLayer 的Symbol属性赋值,使MapLayer以新的符号显 示;通过给MapLayer的Renderer属性赋值,使 MapLayer以新的显示方式显示。
1
增加矢量图层
• 矢量图层是和具体的数据相关联,要增加矢量图层, 首先要确定(连接)对应的数据。连接的方法是利 用DataConnection和GeoDataset两个对象。 • 利用DataConnection对象的Database属性可以定义矢 量数据所在的路径。 • 利用DataConnection对象的FindGeoDataset(“文件 名”) 方法可以得到指定路径下的文件,并返回GeoDataset 对象。 • 利用该对象对MapLayer的GeoDataset属性进行赋值, 使MapLayer与具体的数据文件关联。 • 在图层集合中增加该图层。
• 利用MapObjects在线帮助
• 阅读开发实例
– MO还有许多实例 (ESRI\MapObjects\Samples\VB),它们 的Form设计和代码可以参考。
第二章 MapObjects对象
• MO中有46个对象,可以划分成5个大 类:
– – – – – 数据操作对象类(10个) 地图显示对象类(17个) 投影对象类(8个) 图形对象类(7个) 地址匹配对象类(4个)
3
Tracking层的操作
• 利用AddEvent方法可在Tracking层中增加 一个新的GeoEvent对象:
TrackingLayer.AddEvent(shape,SymbolIndex)
通过Item方法 Point对象 通过Add方法 Parts 集合 通过Parts属性 通过Bottom、Left、Top和 Right四个属性可以定义一个 Rectangle对象Ellipse对象
Points对象
Line对象 Polygon对象 Rectangle对象 Ellipse对象
图形对象类
通过TableDesc属性
Fields集合
通过Item方法
TableDesc对象
通过Records属性
Field对象 Statistics对象
Table对象
通过CalculateStatistics方法
Strings集合
数据操作对象类
• 通过定义DataConnection对象可以确定连接的 数据库或文件目录。 • 利用DataConnection对象的GeoDatasets属性可 以得到图层数据的集合对象(GeoDatasets)。 • 利用GeoDatasets的Item方法可以得到其中的 一个图层文件。 • 利用Layers集合的Add方法可以把图层文件增 加到地图控件中,并作为一个MapLayer对象。
基于组件的GIS开发 ——Visual Basic和 MapObjects实现
第一章 MapObjects介绍
1
技术的产生
• 利用GIS支撑软件进行二次开发可以充 分利用支撑软件所具有的强大功能,开 发比较容易,但开发的系统要在支撑软 件的环境中运行,系统往往比较庞大, 相应成本也高,对某些地图和空间分析 只是部分功能的系统来说,二次开发就 不太适合。此外二次开发受到原有软件 的限制,灵活性没有底层开发大。
Map控件属性设置
图层属性设置
程序运行界面
5
如何学习MO
– 在地图控件处于活动(选中)状态下,按 F1将打开MO在线帮助。MO在线帮助含 有每个对象的特性、方法、事件和变量的 详细文档。学习MapObjects的最好方法是 在在线帮助中利用编码例子。大多数帮助 条目含有可以在VB工程中执行的例子。
AddressLocation对象 Standardizer对象 Geocoder对象 PlaceLocator对象
地址匹配对象类
第三章 地图与图层
• 在MO中,Map Control(地图控件)是一 个载体,可以在地图控件上增加一个或 多个图层。MO支持三种类型图层:矢量 图层、栅格图层和动态(Tracking)图层, 所对应的对象分别为MapLayer、 ImageLayer和TrackingLayer。 • 矢量图层和栅格图层分别用于显示矢量 数据和栅格数据,栅格图层和动态图层 的集合所对应的对象为Layers(图层集合 对象)。
• 利用MapLayer对象的Records属性可以
得到Recordset对象。 •源自通过Recordset对象的Fields属性可以得 到Fields集合;通过Fields集合的Item 方法可以得到其中的一个Field对象。 • 通过Recordset对象的MoveFirst、 MoveNext、MovePrevious方法可以对 Recordset对象中的记录进行定位。
GeoTransformation对象
Prime Meridian对象
GeoCoordSys对象
ProjCoordSys对象 Projection对象
Datum对象
Unit对象
Spheroid对象
Map控件 MapLayer对象
投影对象类
• 有两种类型坐标系;地理坐标系和投影坐标系。
– 通过Prime-Meridian、Datum和Unit三个对象可以定义一个地理 坐标系,其中,Datum包括Spheroid对象的定义。 – 通过GeoCoord、SysProjCoordSys和Unit三个对象可以定义一个 投影坐标系。
Dim dConn As New MapObjects2.DataConnection Dim mLayer As New MapObjects2.MapLayer dConn.Database = "c:\“
Set mLayer.GeoDataset = dConn.FindGeoDataset("landuse")
yers.Add mLayer
2
增加栅格图层
• 增加图像文件相对简单,只要声明一个 新的Imagelayer对象,利用Imagelayer对 象的File属性确定对应的图像文件,再在 图层集合对象中利用Add方法增加该 Imagelayer对象。
Dim iLayer As New ImageLayer iLayer.File = "c:\p1.jpg" yers.Add iLayer
LabelPlacer对象
Symbol对象
Map控件
通过Layers属性
TextSymbol对象 Event Renderer对象 ZRenderer对象
Layers集合 MapLayer对象
通过Item方法
Chart Renderer对象
ImageLayer对象
通过TrackingLayers属性
3
– – – – – – –
MapObjects功能
• 利用MapObjects ,开发人员可以实现如下的 GIS功能:
显示具有多个图层的地图 地图的放大、缩小和漫游 增加点、线、圆和多边形等各种图形 增加文本 显示特征的属性 利用图形选择特征 利用邻近分析选择特征
– – – – – – –
利用SQL表达式选择特征 选择特征的统计 查询和更新选择特征的属性数据 各种专题制图 按字段的高程或测量值显示 按字段值对特征进行标号 显示遥感图像
• 通过Point对象的x、y属性可以定义一个 点。 • 通过Points对象的Add方法可以把一个点 增加到Points对象中。 • 一个线对象和一个多边形对象可以是多 个部分(Parts)组成,通过Parts属性可 以得到Parts集合。 • Parts集合的Add方法可以把Points对象增 加到Parts集合。
• Map控件和MapLayer对象有CoordinateSystem属性,该 属性可以用GeoCoordSys对象或ProjCoordSys对象来赋值。 同时GeoCoordSys对象和ProjCoordSys对象又可以通过 Type属性定义具体的坐标类型。 • MapLayer对象有GeographicTransformation属性,该属性 可以用GeoTransformation对象来赋值, GeoTransformation对象有type属性用于定义坐标变换类 型。
通过Database等属性与数 据库或文件目录建立连接 通过GeoDataset属性
DataConnection对象
通过GeoDatasets属性
GeoDatasets集合
通过Item方法
MapLayer对象
通过Records属性
GeoDataset对象 Recordset对象
通过Fields属性
• MapObjects简称MO,是ESRI公司开发 的一组供开发人员使用的制图与GIS功 能组件(ActiveX控件)。 • ActiveX是当今得到最广泛支持的面向 目标的软件集成技术。用户象用砖块盖 房子一样利用ActiveX组件开发和集成 Windows应用。
• MO目前使用的主要版本为2.0、2.1和2.2。 MO2.0于1999年发布;MO2.1于2001年3 月,增加了CAD、ArcSDE、StreetMap等 文件格式的支持功能;MO2.2发布于 2003年1月,主要增加直接读取GIF和 TIFF文件等功能。