📄 mapx中文培训教材 在线看 ← mapinfo 2← 地理信息系统论坛社区.htm
字号:
公司或第三方供应商处购买表。<BR>2. 使用特殊的列和特殊的元数据创建新的空逐层细化表(.tab
文件)。元数据为每一张成员表分配层次名,并且标识成员表中的重要列--ID 列和标题列。<BR>3. 把逐层细化表加入地图(例如,把逐层细化表加入所使用的
Geoset(s)中,或者通过象 Layers.Add 这样的方法,把逐层细化表添加到地图中)。<BR>4.
添加用户接口元素(例如工具栏按钮)到应用程序中,以便用户选择逐层细化工具并单击地图来进行细化。<BR>向应用程序添加代码来响应用户对逐层细化工具的使用(即:编写层次结构管理器)。此代码需要检测用户所选择的图元;确定替换图元的子图元;并调用一些方法
(DrilldownRemoveFeatures, DrilldownAddFeatures) 来展开或者收缩地图图元。<BR>第二节
准备“逐层细化”图层<BR><BR>要创建逐层细化图层,需要提供由两个或更多 MapInfo 表组成的表集合。特别地,需要:<BR>Ÿ
逐层细化图层的每一层次的详细信息都需要一张 MapInfo 表。这些被称为成员表。<BR>Ÿ
额外会有包含特殊元数据的空表来描述成员表。它被称为逐层细化表。<BR>成员表的要求<BR><BR>逐层细化图层中的每个图元都必须有标识关键字(可能是字符串,如
“New York”)。在单个层次中的所有关键字必须是唯一的;例如,州边界层只能包含一个被称为
“Washington”的州。但是,对于逐层细化图层的所有其它层次,图元的标识关键字是不需要唯一的。例如,逐层细化图层包含州边界和县市边界,就可以同时有
“Washington” 州和 “Washington”
县。<BR>“逐层细化”表的要求<BR><BR>逐层细化表与其它表不同,它只包含一个文件:filename.tab。<BR>逐层细化表的 .tab
文件必须定义特定的列和元数据关键字,描述如下:<BR>逐层细化表必须定义三个标准列:Key、Level 和
Label。所有这三列都为字符(字符串)列,32个字符宽度。<BR>逐层细化表必须包含一系列元数据关键字。元数据关键字语法如下:<BR>Ÿ 以关键字
begin_metadata 标记 .tab 文件元数据部分的开始。<BR>Ÿ 原数据的每一行都有两个元素:关键字和数值。例如,关键字
“\IsDrilldown” 值为 “True”。所有的关键字和数值都用双引号括起来。<BR>Ÿ 逐层细化表必须包含 “\IsDrilldown”
关键字,且此关键字值必须为 “True”。<BR>Ÿ 每一个关键字都以字符 “\” (反斜线)开始。<BR>Ÿ
元数据关键字可以层次化地嵌套。层次结构的每一层次用反斜线 (\) 符号标记。关键字值限制最多为 239 个字符。<BR>Ÿ 逐层细化表包含
\DDMap\ComponentMaps\ 关键字层次结构。在此层次结构中,为每一张成员表指定四个元数据关键字:<BR>成员表元数据关键字 <BR>关键字
描述<BR>File 必需的关键字,指定成员表路径和文件名。<BR>LevelID 必需的关键字,为此成员表定义标识符。<BR>FeatureIDCol
指定成员表中包含唯一逐层细化关键字的列号。可选关键字;如果忽略,列号为 1。<BR>FeatureCaptionCol
指定成员表中用来作标注的列号。可选关键字;如果忽略,列号为 1。<BR><BR>例如,“逐层细化表示例”包含如
“\DDMap\ComponentMaps\One\LevelID”和“\DDMap\ComponentMaps\Twox\LevelID”这样的关键字层次结构。请注意
DDMap、ComponentMaps 和 LevelID 是关键字层次结构标准的、必需的部分,而 One 和 Twox
是可自定义的。可使用任何喜欢的关键字名代替 One、Twox、Twoxx
等等;那些关键字名只是用来区分每个成员表的关键字集。<BR>“逐层细化”表示例<BR>逐层细化表示例内容如下。如果要创建自己的逐层细化表,可以复制该示例到一文本文件,并参照自己的成员表进行修改。<BR>!table<BR>!version
300<BR>!charset WindowsLatin1<BR><BR>Definition Table<BR>Type Native Charset
"WindowsLatin1"<BR>Fields 3<BR>Key Char (32);<BR>Level Char (32);<BR>Label Char
(32);<BR><BR>begin_metadata<BR>"\IsDrilldown" =
"TRUE"<BR>"\DDMap\ComponentMaps\One\File" = "C:\Program
Files\MapInfo\Data\USA\usaXXX.TAB"<BR>"\DDMap\ComponentMaps\One\LevelID" =
"USA"<BR>"\DDMap\ComponentMaps\One\FeatureIDCol" =
"3"<BR>"\DDMap\ComponentMaps\One\FeatureCaptionCol" =
"1"<BR><BR>"\DDMap\ComponentMaps\Twox\File" = "C:\Program
Files\MapInfo\Data\USA\2Region.TAB"<BR>"\DDMap\ComponentMaps\Twox\LevelID" =
"2Region"<BR>"\DDMap\ComponentMaps\Twox\FeatureIDCol" =
"1"<BR>"\DDMap\ComponentMaps\Twox\FeatureCaptionCol" =
"3"<BR><BR>"\DDMap\ComponentMaps\Twoxx\File" = "C:\Program
Files\MapInfo\Data\USA\MultiRegionSales.TAB"<BR>"\DDMap\ComponentMaps\Twoxx\LevelID"
= "MultiRegion"<BR>"\DDMap\ComponentMaps\Twoxx\FeatureIDCol" =
"1"<BR>"\DDMap\ComponentMaps\Twoxx\FeatureCaptionCol" =
"3"<BR><BR>"\DDMap\ComponentMaps\Two\File" = "C:\Program
Files\MapInfo\Data\USA\states.TAB"<BR>"\DDMap\ComponentMaps\Two\LevelID" =
"States"<BR>"\DDMap\ComponentMaps\Two\FeatureIDCol" =
"3"<BR>"\DDMap\ComponentMaps\Two\FeatureCaptionCol" =
"1"<BR><BR>"\DDMap\HierarchyManager\IsDLL" =
"TRUE"<BR>"\DDMap\HierarchyManager\ID" =
"SomeDLL.dll"<BR>"\DDMap\HierarchyManager\InitialLevel" = "USA"
<BR>end_metadata<BR>第三节 创建逐层细化和卷起工具<BR><BR>创建“细化”工具<BR>使用 CreateCustomTool
方法可以实现逐层细化工具。CursorConstants 集包括两个为逐层细化应用程序特别提供的光标:miDrilldownExpandCursor 和
miDrilldownContractCursor。例如:<BR><BR>每次使用自定义逐层细化工具将触发 ToolUsed 事件。在 ToolUsed
事件过程中,需要执行引起逐层细化动作的代码。这基本上是一个四步过程:<BR>1. 使用如 SelectByPoint 或 SearchAtPoint
这样的方法,确定用户所单击的地图图元。<BR>2. 确定用来替换用户所单击图元的子图元集。例如,可使用一个或者更多嵌套的 Case
语句来确定用来替换所选父图元的子图元。<BR>3. 调用 DrilldownAddFeatures 方法添加子图元到地图。<BR>4. 调用
DrilldownRemoveFeatures
方法从地图上删除父图元(用户所单击的图元)。<BR>说明:这些添加/删除操作绝不会修改组件表;即并不是“编辑”表。使用DrilldownAddFeatures
方法添加图元,唯一的效果是复制图元到当前可视的图元集。<BR>创建“卷起”工具<BR>当实现逐层细化工具后,可能希望为用户提供卷起工具——与逐层细化工具有相反效果的工具。<BR>可使用与创建逐层细化工具相同的方式来创建卷起工具。将会使用同样的方法
(DrilldownAddFeatures 和
DrilldownRemoveFeatures)。不同的是不是添加子图元和删除父图元,而是做相反操作——添加父图元和删除子图元。<BR>示例:“逐层细化”/“卷起”工具示例<BR>以下示例
ToolUsed 事件过程说明如何操作逐层细化工具。<BR>此过程为以下图层层次结构来处理逐层细化图层:<BR>USA
包含单个区域的图层,代表整个美国。<BR>2Region 包含两个大区域(东区和西区)的图层。每一个区域覆盖大约一半的美国疆域。<BR>MultiRegion
包含八个小区域的图层。每一个区域覆盖大约八分之一的美国疆域。<BR>States
包含美国五十个州的图层。<BR><BR><BR>此示例为Map1_ToolUsed函数的节选,主要阐明细化工具的工作方式
<BR>………………………………………………<BR>Dim AddKeys() As String<BR>Dim NewLevel As
String<BR>Dim fs As Features<BR>Dim strLevel As String<BR>Dim DelKeys() As
String<BR>Dim pnt As New Point<BR><BR>'
---------------------------------------------<BR>' Expand<BR>'
----------------------------------------------<BR>If (ToolNum =
customDrilldownExpandTool And Ctrl = False) Or (ToolNum =
customDrilldownContractTool And Ctrl = True) Then<BR>' Figure out which object
we have<BR>pnt.Set X1, Y1<BR>Set fs =
drilldownLayer.SearchAtPoint(pnt)<BR><BR>If fs.Count = 1 Then<BR>ReDim
DelKeys(0)<BR>drilldownLayer.KeyField = "Level"<BR>strLevel =
fs(1).Keyvalue<BR><BR>drilldownLayer.KeyField = "Key"<BR>DelKeys(0) =
fs(1).Keyvalue<BR><BR>If strLevel = "USA" Then<BR>NewLevel = "2Region"<BR>ReDim
AddKeys(1)<BR>AddKeys(0) = "West"<BR>AddKeys(1) = "East"<BR>ElseIf strLevel =
"2Region" Then<BR>NewLevel = "MultiRegion"<BR>ReDim AddKeys(3)<BR>Select Case
DelKeys(0)<BR>Case "West"<BR>usaLevel = usaLevel + 1<BR>AddKeys(0) =
"mrRgn1"<BR>AddKeys(1) = "mrRgn2"<BR>AddKeys(2) = "mrRgn3"<BR>AddKeys(3) =
"mrRgn4"<BR>Case "East"<BR>usaLevel = usaLevel + 1<BR>AddKeys(0) =
"mrRgn5"<BR>AddKeys(1) = "mrRgn6"<BR>AddKeys(2) = "mrRgn7"<BR>AddKeys(3) =
"mrRgn8"<BR>End Select<BR>ElseIf strLevel = "MultiRegion" Then<BR>NewLevel =
"States"<BR>Select Case DelKeys(0)<BR>Case "mrRgn1"<BR>westLevel = westLevel +
5<BR>ReDim AddKeys(4)<BR>AddKeys(0) = "16"<BR>AddKeys(1) = "30"<BR>AddKeys(2) =
"41"<BR>AddKeys(3) = "53"<BR>AddKeys(4) = "56"<BR>Case "mrRgn2"<BR>westLevel =
westLevel + 6<BR>ReDim AddKeys(5)<BR>AddKeys(0) = "04"<BR>AddKeys(1) =
"06"<BR>AddKeys(2) = "08"<BR>AddKeys(3) = "32"<BR>AddKeys(4) =
"35"<BR>AddKeys(5) = "49"<BR>Case "mrRgn3"<BR>……………………<BR>Case
"mrRgn8"<BR>……………………<BR>End Select<BR>Else<BR>MsgBox "Can't drilldown any
further; Level: " + strLevel + " Key: " + DelKeys(0)<BR>Exit Sub<BR>End
If<BR>ElseIf fs.Count = 0 Then<BR>MsgBox "No features selected."<BR>Exit
Sub<BR>Else<BR>MsgBox "More than one feature selected; can only drilldown on
exactly one item."<BR>Exit Sub<BR>End
If<BR><BR>drilldownLayer.DrillDownRemoveFeatures strLevel,
DelKeys<BR>drilldownLayer.DrillDownAddFeatures NewLevel, AddKeys<BR><BR>'
---------------------------------------------<BR>' Contract<BR>'
----------------------------------------------<BR>ElseIf (ToolNum =
customDrilldownContractTool And Ctrl = False) Or (ToolNum =
customDrilldownExpandTool And Ctrl = True) Then<BR>…………………………<BR>End If<BR>End
Sub<BR>重置“逐层细化”图层<BR><BR><BR>可以通过调用 DrilldownReset
方法重置逐层细化图层。重置逐层细化图层会清除整个图层,而且使用一张成员表的图元重新初始化图层。<BR>第四节
“逐层细化”图层的限制和要求<BR><BR>逐层细化图层受到一些限制,总结在下面的列表中。<BR>Ÿ 逐层细化图层中每一个图元必须拥有一个 ID,该 ID
在所属成员表中是唯一的(尽管 ID 并不需要在构成逐层细化图层的所有的成员表中是唯一的)。<BR>Ÿ 不能在逐层细化图层中使用栅格图像衬垫表。<BR>Ÿ 当使用
Themes.Add 创建专题时,将花费一些时间用大量的数据行来计算图层范围,例如逐层细化或是服务器图层。Add 方法的 ComputeTheme
参数使您得以为任意专题类型创建非计算专题。非计算专题使您得以创建没有自动计算范围的专题。可以自己创建范围。这对逐层细化或服务器图层来说是比较快的方法。<BR>Ÿ
逐层细化图层不会“记录”各种不同逐层细化层次的状态(图元被展开,等等)。如果希望应用程序恢复上一次使用地图时精确的状态,需要在退出时编写代码存储地图的逐层细化设置,并在启动时恢复设置。<BR>Ÿ
虽然可以编辑逐层细化图层的图元,但不会保存编辑,且成员表不受编辑的影响。当编辑逐层细化图层中的图元时,不是修改成员表,而是修改从成员表的图元的临时副本。<BR>
<DIV style="CLEAR: both"></DIV></DIV>
<DIV class=postname>
<DIV class=pf>13楼 </DIV><B>tracking</B> 发表于:2004-11-22 10:01:00</DIV>
<DIV class=postbody>第十一章 输出地图<BR>概述<BR>通常,用户可能需要打印地图或在另一应用程序中合并地图的可视化图像。MapX
具有使用户将地图的内容发送到剪贴板、打印机或图形文件的方法。<BR>第一节 输出地图<BR><BR>要输出地图到图形文件或复制地图的内容到剪贴板,应该使用
ExportMap 方法。<BR>方法 描述 代码示例<BR>ExportMap 输出地图到图形文件。 Map1.ExportMap
“C:\Map.TIF”,miFormatTIF<BR>ExportMap 输出地图到剪贴板。 Map1.ExportMap
“clipboard”<BR><BR>说明:方括号 [ ] 中的为可选参数。<BR>Map.ExportMap (Location, Format, [W],
[H])<BR>部件 描述<BR>Location 放置输出文件位置的详细说明。如果使用了关键字 ‘CLIPBOARD’,图像将输出到剪贴板。<BR>格式
输出格式。这是 ExportFormatConstants 值。<BR>W 输出的宽度。双精度值,根据 Paper Units (Map.PaperUnit)
来指定宽度。它为可选参数,如果未指定,则使用 Map.MapPaperWidth。<BR>H 输出的高度。双精度值,根据 Paper Units
(Map.PaperUnit) 指定高度。它为可选参数,如果未指定,则使用 Map.MapPaperHeight。<BR><BR>格式常量<BR><BR>格式
描述<BR>miFormatWMF 元文件<BR>miFormatBMP 位图<BR>miFormatJPEG JPEG 图像<BR>miFormatTIF
TIF<BR>miFormatGIF GIF 图像<BR>miFormatPNG 便携网络图形<BR>miFormatPSD
PhotoShop<BR>该示例说明 Map.ExportMap 方法的用法。它使用该方法将地图以 BMP
格式放置在剪贴板中。<BR>Map1.PaperUnit = miUnitCentimeter <BR>将长 12 厘米、宽 9 厘米的地图以 BMP
格式输出到剪贴板<BR>Map1.ExportMap "clipboard", miFormatBMP, 12, 9 <BR>第二节
ExportSelection 属性<BR>使用地图的 ExportSelection
属性使得用户可以控制是否让选定范围的模式也随地图输出。请看如下的代码示例以了解该属性的使用方法:<BR>输出 JPG
图像以显示并包括在图像中突出显示的选定范围。<BR>Map1.ExportSelection=True<BR>Map1.ExportMap
"c:\temp\map.jpg", miFormatJPEG<BR>第三节 打印地图<BR>要打印地图,请使用 PrintMap
方法。<BR>说明:所绘制的当前地图要与给出的矩形相适应。当保持宽和高的相关比例时,将获得最佳结果。该方法仅打印 MapX
地图的内容;它不显示任何图标、工具栏或菜单项。如果要看到输出的附加控件,可以打印包含MapX控件的窗体。<BR>方法 描述 代码示例<BR>PrintMap
打印地图。 Map1.PrintMap Printer.hDC, 0, 0, Map1.Width * 100, Map1.Height *
100<BR>Map.PrintMap (hDC, x, y, w, h) <BR>部件 描述<BR>HDC 打印设备环境。可以是任何设备环境。<BR>X 以
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -