gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:1910回复:2

MAPX中文培训教材 第二章 MapX 基础

楼主#
更多 发布于:2003-07-28 11:00
第二章 MapX 基础
概述
本章是对应用程序中用来创建和操作MapX 地图的主要组件的概述。在后面的各章中将对这些选出的主题做详细讨论。
第一节 Map 对象

下列图表是 MapX 对象体系的局部,您可以看到 Map 对象存在于最顶端。每个 MapX 的对象、属性和方法都衍生于 Map 对象。每个在 Map 对象之下的属性和方法都会对生成整个 Map 对象有所影响。主要是由 DataSets、Layers 和 Annotations 对象定义每一个 Map 对象。
MapX 对象模型局部
说明:这不是一个完整的 MapX 对象模型。
 
下表显示了一些由数值表示的 Map 对象属性。可以在“设计时”改变这些属性,也可以在“运行时”使用以下代码示例来更改。

属性 描述 代码示例
 Zoom 设置在地图中显示的英里(默认的距离单位)数。 Map1.Zoom = 500
 Rotation 对地图旋转指定的度数 Map1.Rotation = 179
 CenterX 设置 x 和 y 坐标,它们可能代表经纬度。这是由地图的投影来决定的。 Map1.CenterX = -79.4458
 CenterY 设置 x 和 y 坐标,它们可能代表经纬度。这是由地图的投影来决定的。 Map1.CenterY = 44.9932
用 Map 对象,可以通过操纵地图的几个方法和属性来控制地图如何来显示。有一些属性是由其他对象来表示的。例如,当您看到 MapX 地图时,也就是看到单独图层的集合,它是由 Layers 集合来表示的。Layers 集合是 Map 对象的属性。
现在让我们来看一看如何改变地图的属性。属性页允许我们操作 Map 对象的多个属性。

第二节 属性页

当设计和测试应用程序时属性页对于修改地图属性非常有用。我们以Visual Basic 工程中访问属性页为例,相应的步骤如下:
方法一:如右图
1. 从属性窗口中单击自定义。
2. 单击 自定义行上的按钮。


方法二:在设计时可以通过右键单击窗体内的 Map 对象并选择属性来访问属性页,见下图

 
方法三:运行时查看属性页
也可以在运行时查看属性页。为此,请把下列代码添加到 Map.Mouse_Up 事件中去。
If Button = 2 Then Map1.PropertyPage
这段代码将检测用户是否在运行时单击鼠标右键,然后显示属性页。使用鼠标右键,是因为不会影响工具(左键)的正常使用。
说明:您应该仅在设计和测试时使用这段代码,因为它给用户太多权限来控制整个地图。然而,如果希望完成的产品要为最终用户显示对话框的话,可能就需要使用 Layers.LayersDlg 方法来代替 PropertyPage 方法,因为 LayersDlg 对话框对用户更友好一些。此方法将在下一章中讨论。
第三节 图层

如下图所示,点图层本身并不是非常有用,但当把这样的由点类型构成的地图覆盖在线状地图和区域地图上时,就得到了一幅非常有用的地图。每一幅单独的地图是一个图层,MapX 把地图存储为图层的集合。
 


 
在“设计时”通过 MapX属性对话框或是在“运行时”通过编程可以对图层进行改变。在上述部分,属性对话框允许设计者通过简单地更改设置来操作图层。我们也可以在程序中随时更改图层属性和方法的代码。新建图层,删除图层以及更改图层的可见性和样式都是一些能在图层上完成的操作。
图层集合对象(Layers Object)
图层集合(Layers)是由 0 到 n 个 Layer 对象组成的。图层对象(Layer)是由特性集合(Features)组成的,且每一个特性(Feature)都有其自己的属性和样式。特性集合(Features)由 Feature 对象组成,它对应地图中的图元,例如点、线或区域。可以创建独立的 Feature 对象,也可以取得 Feature 对象的集合。
第四节 GeoSets

GeoSet 是地图图层及其设置的集合。可以在“设计时”指定GeoSet 。如果在“运行时”设置,则先要删除所有已加载的图层和数据集,然后加载新的 GeoSet。
如前所述,在运行时指定要加载的其他 GeoSet、给地图对象添加图层,或是操作图层的外观等操作都可以通过属性页来实现,或者可以通过与 MapX 一起装载的 MapX Geoset Manager 程序   来实现(此程序可以在 MapX 程序组中找到)。


右图为GeoSetManager的用户界面,可以利用此管理工具更改图层设置,当认为满意时,就可以保存地图。这将把 GeoSet 文件(*.GST)写到驱动器中。当打开该 GeoSet 文件时,将返回所有的地图图层和设置。Geoset Manager 使您可以修改图层、管理缩放等级、标注,以及其他属性。





GeoDictionary
利用MapXz作数据绑定或创建专题地图时,可以用 GeoDictionary来匹配数据源与地图图层。GeoDictionary 是一个保存了关于哪个地图图层可以匹配、哪个字段可以用作匹配字段的信息文件(一般命名为 geodict.dct)。如果想运用自动匹配/自动绑定,则必须在 GeoDictionary 中注册文件。例如,如果拥有按州划分的销售额的数据,那么 GeoDictionary 就可以确定此数据和“USA”地图图层相匹配。
可以编程或者明确指定图层中要匹配的列与数据文件/表中的哪些列匹配,也可以让 MapX 参考 GeoDictionary 尝试找到匹配。
修改 GeoDictionary

如果在做数据绑定时要利用自动匹配,则在 GeoDictionary 里注册 MapInfo表是必要的。在 MapX GeoSet Manager 的工具菜单下有执行GeoDictionary 程序的选项。MapX GeoDictionary 程序允许把新的MapInfo 表注册到 GeoDictionary 中。同时,在 MapX GeoDictionary 中,单击注册表……按钮,然后选择要注册的表,设置表属性并为其输入描述。如果要想自动地把这张表加载到 GeoSet 中,请单击添加按钮然后选择要把表添加进的 GeoSet 。
GeoDictionary管理器的用户界面如下图所示:
 
第五节 DataSets
DataSets使您可以将数据绑定到地图。例如,如果您有一个按县划分的关于销售额的 MS Access 数据库和一幅县地图,您就可以把数据绑定在这幅县地图上,并可以发现这个按县划分的销售额趋势图,而以表格数据的形式则不容易突出显示该趋势。如上所示,当 MapX 需要在数据和地图之间指定某个匹配时,该匹配是通过称为自动匹配/自动绑定的处理过程来确定的。如要利用自动匹配/自动绑定,首先必须在 GeoDictionary 中注册地图。一旦将数据和地图绑定,就可以看到相关的地理化信息。数据的直观表示使得专题地图的创建变得可行。专题就是以颜色划分的地图,以该方式来表现数据的变化趋势。我们将在以后章节中详细的讲解专题图的制作。
第六节 Annotations
Annotations 集合是把文本和符号放在地图上的简单方法。注释放在所有其他图层的最顶端,并且不和任何数据链接。如果您熟悉 MapInfo,Annotations的概念在目的上与地图的装饰图层比较相似。
下表列出了 Annotations 集合对象的方法和属性:
 
Annotations 集合方法

方法 描述 代码示例
AddSymbol 向 Annotation 集合添加符号。使用默认样式(由 Map.DefaultStyle 指定)。 Map1.Annotations.AddSymbol X, Y
AddText 向 Annotation 集合添加文本。第四个参数表示文本在指定坐标系中的初始位置。 Map1.Annotations.AddText _“Developer Services”, _79.44, 46.8889, _miPositionTL
Remove 从集合中删除指定的 Annotation。 Map1.Annotations.Remove 1
RemoveAll 从集合中删除所有的 Annotation。 Map1. Annotations.RemoveAll

Annotation 集合属性

属性 描述 代码示例
Editable 指定注释是否能够编辑。 Map1.Annotations.Editable _= True
Type 指定 Annotation 对象类型。 If Map1.Annotations(2).Type_
Graphic 包含了拥有 Annotation 属性的 Graphic 对象。请参阅联机帮助中的 Graphic 对象描述。
请注意在注释对象中没有关于位置、符号样式或是注释的属性。注释的图形属性包含了该信息的图形对象。要修改注释,可修改注释的图形对象。
下列代码在指定位置添加符号:
'Add a symbol at location
Map1.Annotations.AddSymbol X1, Y1  
第七节 创建对象
在 MapX 对象模型中,可以使用下列对象类来创建独立对象。

 BindLayer  ODBCQueryInfo
 BitmapSymbols  点集的集合
 Feature  Point
 Fields  Points
 NotesQueryInfo  Rectangle
 NotesViewInfo  Style

下列代码显示了如何创建独立样式对象,显示样式选择对话框并使用新样式设置图层的替代样式。请注意在 Delphi 和 PowerBuilder 中需要在对象名后指定 MapX 版本号(如“MapX.Style.4”)。这样的安排使您在计算机中可同时安装多个版本的 MapX。如果已开发了 MapX 版本 4 的应用程序,而后又在同一台计算机上安装了更新的版本,那么新版本的 MapX 将不会影响版本 4 的应用程序。
Visual Basic 示例
Dim s as new MapXLib.Style
s.PickRegion
set Map1.Layers(1).Style = s
C++ 示例
CMapXStyle style;
style.CreateDispatch(style.GetClsid());
// can also use style.CreateDispatch("MapX.Style.4"),
// but above is more portable between versions of MapX
style.PickRegion();
m_ctrlMapX.GetLayers().Item(1).SetStyle(style);
Delphi 示例
Var
   s : variant;
begin
     s := CreateOleObject('MapX.Style.4');
     s.PickRegion;
     MapObject.Layers.Item(1).Style := s;
End

PowerBuilder 示例
OLEObject s
long oleStatus

s = CREATE OLEObject

oleStatus = s.ConnectToNewObject("MapX.Style.4")
ole_1.Object.Layers.Item(1).Style = s

喜欢0 评分0
GIS麦田守望者,期待与您交流。
hsxljwht
路人甲
路人甲
  • 注册日期2004-10-06
  • 发帖数59
  • QQ
  • 铜币253枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-10-10 06:30
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
zhqcn
路人甲
路人甲
  • 注册日期2003-07-28
  • 发帖数68
  • QQ
  • 铜币286枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2003-08-01 14:07
谢了!
举报 回复(0) 喜欢(0)     评分
游客

返回顶部