图中图显示

通过图中图的显示,即逐层细化图层,它使用户得以执行逐层细化分析和探测。如果地图包含逐层细化图层,用户就可以通过鼠标指向和单击地图的某个区域得到该区域更详细的信息。逐层细化图层所提供的直观、易用的界面使用户得以通过指定和单击来探测数据。

逐层细化应用程序需要相当数量的设置以及精心地准备。其主要开发步骤总结如下:

1) 获取用来建立多层次逐层细化图层的多种表。可以使用 MapInfo Professional 创建表,或者从 MapInfo 公司或第三方供应商处购买表 ( Raman et al. ,2003) 。

2) 使用特殊的列和特殊的元数据创建新的空逐层细化表 ( tab 文件) 。元数据为每一张成员表分配层次名,并且标识成员表中的重要列: ID 列和标题列。

3) 把逐层细化表加入地图 ( 例如,把逐层细化表加入所使用的 Geoset ( s) 中,或者通过像 Layers. Add 这样的方法,把逐层细化表添加到地图中) 。

4) 添加用户接口元素 ( 例如工具栏按钮) 到应用程序中,以便用户选择逐层细化工具并单击地图来进行细化。

向应用程序添加代码来响应用户对逐层细化工具的使用 ( 即: 编写层次结构管理器) 。此代码需要检测用户所选择的图元; 确定替换图元的子图元; 并调用一些方法( DrilldownRemoveFeatures,DrilldownAddFeatures) 来展开或者收缩地图图元。

要创建逐层细化图层,需要提供由两个或更多 MapInfo 表组成的表集合。特别地需要: 逐层细化图层的每一层次的详细信息都需要一张 MapInfo 表,这些被称为成员表; 额外会有包含特殊元数据的空表来描述成员表,它被称为逐层细化表。

例如,“逐层细化表示例”包含如 “\ DDMap \ ComponentMaps \ One \ LevelID”和“\ DDMap \ ComponentMaps \ Twox \ LevelID”这样的关键字层次结构。请注意 DDMap、ComponentMaps 和 LevelID 是关键字层次结构标准的、必需的部分,而 One 和 Twox 是可自定义的。可使用任何喜欢的关键字名代替 One、Twox、Twoxx 等; 那些关键字名只是用来区分每个成员表的关键字集。如图 6. 21 即为图中图显示。

图 6. 21 图中图窗口

具体实现参考下面详细代码:

Dim m_Layer As Layer

Dim m_Fea As MapXLib. Feature

Private Sub form_Load( )

Set m_Layer = Map2. Layers. CreateLayer( " Rectlayer" )

End Sub

Private Sub Map1_MapViewChanged( )

Dim tempFea As MapXLib. Feature

Dim tempPnts As MapXLib. Points

Dim tempStyle As MapXLib. Style

If m_Layer. AllFeatures. Count = 0 Then

Set tempStyle = New MapXLib. Style

tempStyle. RegionPattern = miPatternNoFill

tempStyle. RegionBorderColor = 255

tempStyle. RegionBorderWidth = 2

Set tempFea = Map2. FeatureFactory. CreateRegion( Map1. Bounds,tempStyle)

Set m_Fea = m_Layer. AddFeature( tempFea)

Else

With m_Fea. Parts. Item( 1)

. RemoveAll

. AddXY Map1. Bounds. XMin,Map1. Bounds. YMin

. AddXY Map1. Bounds. XMax,Map1. Bounds. YMin

. AddXY Map1. Bounds. XMax,Map1. Bounds. YMax

. AddXY Map1. Bounds. XMin,Map1. Bounds. YMax

End With

m_Fea. Update

End If

End Sub

Private Sub Map2_MouseDown( Button As Integer,Shift As Integer,X As Single,Y As Single)

Dim MapX As Double

Dim MapY As Double

Map2. ConvertCoord X,Y,MapX,MapY,miScreenToMap

Map1. CenterX = MapX

Map1. CenterY = MapY

End Sub