?? 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 + -