「數字地球/國土」戰略下,地學海量空間數據爆發式增長。傳統全量加載方式導致:

Definition Table
Type Native Charset "WindowsLatin1"
Fields 3
Key Char (32);
Level Char (32);
Label Char (32);
begin_metadata
"\IsDrilldown" = "TRUE"
"\DDMap\ComponentMaps\One\File" = "Tab_YNP.TAB"
"\DDMap\ComponentMaps\One\LevelID" = "Tab_YNP"
"\DDMap\ComponentMaps\One\FeatureIDCol" = "3"
"\DDMap\ComponentMaps\One\FeatureCaptionCol" = "1"
... (其他組件層同結構)
"\DDMap\HierarchyManager\IsDLL" = "TRUE"
"\DDMap\HierarchyManager\ID" = "SomeDLL.dll"
"\DDMap\HierarchyManager\InitialLevel" = "Tab_YNP"
end_metadata
語法要點:反斜線開頭關鍵字、雙引號包裹鍵值、支援嵌套層次 (\DDMap\ComponentMaps\...)、必含 \IsDrilldown = TRUE。
' 建立自定義鑽取工具
Map1.CreateCustomTool customDrilldownExpandTool, _
miToolTypePoint, miDrilldownExpandCursor, _
miDrilldownContractCursor, miDrilldownContractCursor
' ToolUsed 事件處理
Private Sub Map1_ToolUsed(ByVal Tool As MapXLib.ToolConstants)
If Tool = customDrilldownExpandTool Then
' 1. 定位點擊物件
Dim obj As MapObject
Set obj = Map1.Layers("DrilldownLayer").SelectByPoint(Map1.MousePointerX, Map1.MousePointerY)
' 2. 確定子物件邏輯 (範例:省→市→縣)
Dim childLayer As String, childFilter As String
Select Case obj.Fields("LEVEL").Value
Case "PROVINCE"
childLayer = "CITY_LAYER"
childFilter = "PROV_CODE = " & obj.Fields("CODE").Value
Case "CITY"
childLayer = "COUNTY_LAYER"
childFilter = "CITY_CODE = " & obj.Fields("CODE").Value
End Select
' 3. 空間 SQL 提取 (Oracle Spatial)
Dim sql As String
sql = "SELECT geom FROM spatial_db." & childLayer & " WHERE " & childFilter
' 4. 加入子物件、移除父物件
Map1.DrilldownAddFeatures "DrilldownLayer", sql, "OracleWorkspace"
Map1.DrilldownRemoveFeatures "DrilldownLayer", obj.ID
' 5. 編輯與保存邏輯略
End If
End Sub
| 指標 | 傳統全量加載 | 分層管理器 | 提升 |
|---|---|---|---|
| 首屏加載時間 | 45 秒 | 3 秒 | 93% ↓ |
| 客戶端記憶體峰值 | 800 MB | 120 MB | 85% ↓ |
| 鑽取響應時間 | N/A (不支援) | < 2 秒 | 新能力 |
| 專題圖產出效率 | 人工拼接 | 一鍵另存 | 質變 |
分層管理器結合 Oracle 數據倉庫強大的空間數據存儲/分析能力與 GIS 客戶端的動態渲染優勢,實現了海量空間數據的「按需加載、逐層鑽取、專題輸出」。核心價值在於:
未來演進方向:整合 Oracle 11g+ Raster 支援、WebGIS 架構 (MapViewer/REST)、三維場景分層 (CityGML/3D Tiles)。