?? mapx中文培訓(xùn)教材 在線看 ← mapinfo ← 地理信息系統(tǒng)論壇社區(qū).htm
字號(hào):
屬性,該屬性非常有用,可得到圖層的數(shù)目,遍歷Layers集合的每一圖層,就可以用到此屬性:<BR>Dim x as integer<BR>For x = 1
to Map1.Layers.Count<BR>Print
Map1.Layers(x).Name<BR>Next<BR><BR>Item——從集合中獲取圖層<BR>Item 屬性從集合中獲得特定的 Layer
對(duì)象。Item 屬性返回一個(gè)圖層作為對(duì)象,它是 Layers 集合的默認(rèn)方法。 可以通過索引值,如 1、2 等等,來引用圖層,也可以通過它們的名稱引用,例如
Highways 或者 Cities:<BR>Dim lyr as Layer<BR>Set lyr =
Map1.Layers.Item(“Highways”)<BR>-或者-<BR>Dim lyr as Layer<BR>Set lyr =
Map1.Layers.Item(3)<BR>Bounds——獲得集合的地理范圍<BR>Bounds 屬性返回代表集合中所有地圖圖層的地理范圍(除了
UserDraw 圖層)的 Rectangle 對(duì)象。當(dāng)需要將地圖縮放到足夠大以顯示所有圖層中的所有對(duì)象時(shí),該屬性將很有用:<BR>Set
Map1.Bounds = Map1.Layers.Bounds<BR>第三節(jié) Layers 集合的方法<BR>Layers
集合有一些方法來控制集合包含哪些圖層以及它們?nèi)绾物@示。還有一個(gè)方法使用戶能打開圖層控制對(duì)話框來操作圖層的方法和屬性。方法也可在設(shè)計(jì)時(shí)使用屬性頁設(shè)置,如本章前面所述。<BR>使用“圖層控制”對(duì)話框<BR>LayersDlg
方法顯示可讓用戶添加圖層、刪除圖層、更改圖層順序和更改圖層屬性的對(duì)話框。<BR><BR><BR><BR>如果用戶單擊確定,在對(duì)話框中所做的更改將立即對(duì)地圖生效。<BR>Map1.Layers.LayersDlg<BR>顯示選項(xiàng)對(duì)話框<BR><BR><BR><BR>顯示選項(xiàng)對(duì)話框使得用戶可以自定義地圖窗口中每個(gè)圖層的顯示。在圖層控制中,用戶可以選擇圖層并單擊顯示按鈕以顯示顯示屬性對(duì)話框。然后,用戶可以更改圖層的缺省樣式并設(shè)置圖層顯示的縮放范圍。<BR>當(dāng)用戶第一次打開地圖時(shí),邊界、線、點(diǎn)和文本都使用在地圖的
Geoset
文件中的默認(rèn)值來顯示。用戶可以通過使用顯示選項(xiàng)對(duì)話框的顯示模式部分更改對(duì)象顯示的方式。<BR>例如,用戶想要將街道的顯示變成紅色虛線。在圖層控制對(duì)話框中用戶可以選擇街道圖層并單擊顯示按鈕。將出現(xiàn)顯示選項(xiàng)對(duì)話框。選中樣式替換框以激活樣式替換按鈕(大的灰色按鈕)。MapX
顯示適合于圖層中對(duì)象類型的替換按鈕。例如,如果圖層包含街道,將顯示一個(gè)線替換按鈕。單擊該按鈕進(jìn)入線樣式對(duì)話框,在此用戶可以改變街道的寬度、樣式和顏色。對(duì)于邊界圖層,樣式替換按鈕將引出區(qū)域樣式對(duì)話框,可改變邊界的填充和邊框。當(dāng)要為包含符號(hào)或點(diǎn)的圖層替換樣式時(shí),將顯示符號(hào)樣式對(duì)話框。和其他顯示設(shè)置一樣,樣式替換只在當(dāng)前的工作期間有效。如果要使其永久有效,必須修改geoset。<BR>創(chuàng)建圖層<BR>可以創(chuàng)建新的臨時(shí)或永久的
MapInfo 表圖層。該方法返回 Layer 對(duì)象——即添加到集合的 Layer 對(duì)象。<BR>dim lyr as layer<BR>set lyr =
Map1.Layers.CreateLayer
(“Temporary”)<BR>添加圖層<BR>添加現(xiàn)有的圖層到集合中并在地圖上顯示。<BR>當(dāng)添加圖層時(shí),可以使用可選的 Position
參數(shù)指定圖層在集合中的位置。如果沒有指定 Position
參數(shù),圖層將根據(jù)地圖中的其它圖層自動(dòng)放置。例如,點(diǎn)圖層將置于區(qū)域圖層之上。<BR>Map1.Layers.Add
“C:\Data\Counties.tab”<BR>-或者-<BR>Private Sub mnuAddLayers_Click()<BR>Dim sFile
As String<BR>With dlgCommonDialog<BR>.DialogTitle = "Add Layer"<BR>.Filter =
"MapInfo Tables (*.tab)|*.tab"<BR>.ShowOpen<BR>If Len(.filename) = 0
Then<BR>Exit Sub<BR>End If<BR>sFile = .filename<BR>End With<BR>On Error Resume
Next<BR>Map1.Layers.Add sFile<BR>End Sub<BR>刪除圖層<BR>Remove
方法將指定的圖層從地圖刪除。<BR>Map1.Layers.Remove 3<BR>刪除所有圖層<BR>RemoveAll
方法將所有圖層從地圖中刪除。<BR>重定位圖層<BR>Move 方法重確定圖層在 Layers
集合中的順序。第一個(gè)參數(shù)是原來的順序(頂端圖層為1),第二個(gè)參數(shù)是要移動(dòng)到的順序。<BR>Map1.Layers.Move 1,2
<BR><BR>第四節(jié)Layer 對(duì)象<BR><BR>Layer 對(duì)象代表具有主要的圖元類型(如區(qū)域、線條和符號(hào))的地圖圖元集合的窗體中的矢量地圖化數(shù)據(jù)。通常
Layer 對(duì)象對(duì)應(yīng)于一張 MapInfo 表中的地理對(duì)象。Layer 集合中的每一個(gè) Layer
對(duì)象的行為獨(dú)立于其他對(duì)象。它們的樣式更改、圖層縮放的更改都基于單個(gè)圖層,而不會(huì)影響其他圖層。<BR>可以在任何時(shí)候在程序中操作圖層對(duì)象。也可以使用屬性頁對(duì)話框在設(shè)計(jì)時(shí)設(shè)置圖層屬性,如上面所討論的一樣。Layer
對(duì)象有許多屬性和方法。用來從 Layer 中獲得圖元的方法后面的章節(jié)中討論。<BR>Layer 的屬性<BR>說明:《MapX參考指南》和聯(lián)機(jī)幫助中有
Layer 對(duì)象方法和屬性的完整列表。<BR>Name<BR>圖層的名稱。<BR>MsgBox
Map1.Layers(4).Name<BR>Visible<BR>圖層是否可見。<BR>Map1.Layers.Item(2).Visible =
False<BR>OverrideStyle<BR>是否替代該圖層的默認(rèn)顯示特性。<BR>Map1.Layers(9).OverrideStyle =
True<BR>Style<BR>如果 OverrideStyle 為真時(shí)圖層樣式將應(yīng)用。<BR>Map1.Layers(9).Style =
newstyleobject<BR>ZoomLayer<BR>設(shè)置圖層縮放打開或關(guān)閉。<BR>Map1.Layers(“States”).ZoomLayer =
True<BR>ZoomMin<BR>設(shè)置圖層可見的最小縮放級(jí)別。<BR>Map1.Layers(“States”).ZoomMin =
45<BR>ZoomMax<BR>設(shè)置圖層可見的最大縮放級(jí)別。<BR>Map1.Layers(“States”).ZoomMin = 580
<BR>Selectable<BR>當(dāng)用戶單擊該圖層時(shí)設(shè)置 MapX 是否認(rèn)可。<BR>Map1.Layers(“States”).Selectable =
True<BR>AutoLabel<BR>控制圖層是否自動(dòng)標(biāo)注。<BR>Map1.Layers(“States”).AutoLabel =
True<BR><BR>第五節(jié) 圖層順序 <BR>Layers 集合中的地圖圖層按遞增的索引順序顯示(例如,Layers(1)
是最上面的圖層,Layers(2) 是 Layer(1)
下面的圖層,等等),底部的圖層首先繪制,頂部的圖層最后繪制。正確地排列圖層很重要。<BR>例如,假設(shè)有一個(gè)客戶點(diǎn)圖層和人口普查區(qū)圖層。如果圖層在 Layers
集合中的順序不正確,MapX 將首先繪制客戶點(diǎn)圖層,然后顯示人口普查區(qū)圖層。則點(diǎn)圖層將被人口普查區(qū)圖層所遮掩。<BR>可以在設(shè)計(jì)時(shí)重新調(diào)整圖層在 Map
中顯示的順序。如前所述,在屬性頁的圖層選項(xiàng)卡中使用向上和向下按鈕。選擇要重新排序的圖層并選擇向上或向下按鈕移動(dòng)圖層到它當(dāng)前位置的上方或下方。要使得用戶在運(yùn)行時(shí)可以調(diào)整圖層的順序,使用
LayersDlg
方法顯示圖層控制對(duì)話框,如前所述。<BR>圖層順序在使用選擇工具時(shí)也很重要。選擇工具從最上面的可選圖層選擇對(duì)象。如果在相同位置有幾個(gè)對(duì)象,就很難精確選擇所要的那一個(gè)??梢灾匦抡{(diào)整圖層的順序使得要選擇的圖層是新的最頂端的圖層。<BR>第六節(jié)
檢查圖層類型<BR><BR>有很多實(shí)例表明可能要檢查集合中的圖層。下面是一個(gè)簡(jiǎn)單的代碼段,它在 Layers
集合中循環(huán)以確定現(xiàn)有的圖層是什么類型,并在對(duì)話框中顯示消息指出圖層類型。<BR>Dim lyr as Layer<BR>For Each lyr in
Map1.Layers<BR>Select Case lyr.Type<BR>Case miLayerTypeNormal<BR>MsgBox “Layer ”
& lyr.Name & “ is a normal layer”<BR>Case miLayerTypeRaster<BR>MsgBox
“Layer ” & lyr.Name & “ is a raster layer”<BR>Case
miLayerTypeSeamless<BR>MsgBox “Layer ” & lyr.Name & “ is a seamless
layer”<BR>Case miLayerTypeUnknown<BR>MsgBox “Layer ” & lyr.Name & “ is
an unknown layer”<BR>Case miLayerTypeUserDraw<BR>MsgBox “Layer ” & lyr.Name
& “ is a user draw layer”<BR>Case miLayerTypeDrilldown<BR>MsgBox “Layer ”
& lyr.Name & “ is a drilldown layer”<BR>Next<BR>在代碼段中對(duì)所有圖層類型使用了 MapX
定義的常量。這些常量通稱為 LayerTypeConstants。所有的 MapX 常量都列出在MapX 聯(lián)機(jī)幫助和《MapX參考指南》中。<BR>第七節(jié)
檢查圖層的圖元類型<BR>該代碼段在 Layers 集合中按索引循環(huán)。檢查集合中的每個(gè) Layer 對(duì)象并確定圖層中顯示的圖元的類型。 <BR>Dim i as
Integer<BR>For i = 1 To Map1.Layers.Count<BR>Select Case
Map1.Layers(i).PredominantFeatureType<BR>Case miFeatureTypeRegion<BR>MsgBox
“Layer ” & lyr.Name & “ contains regions”<BR>Case
miFeatureTypeLine<BR>MsgBox “Layer ” & lyr.Name & “ contains
lines”<BR>Case miFeatureTypeSymbol<BR>MsgBox “Layer ” & lyr.Name & “
contains symbols”<BR>Case miFeatureTypeMixed<BR>MsgBox “Layer ” & lyr.Name
& “ contains mixed _ features”<BR>Case miFeatureTypeUnknown<BR>MsgBox “Layer
” & lyr.Name & “ contains unknown _<BR>features”<BR>Case
miFeatureTypeText<BR>MsgBox “Layer ” & lyr.Name & “contains text
features”<BR>Next<BR>Layers 集合有一個(gè)基本的索引,所以可以引述來自 Layers 集合的數(shù)量之一的索引值。同時(shí)也對(duì)集合中每個(gè)圖層的
PredominantFeatureType 屬性進(jìn)行評(píng)估,使用 FeatureType 常量來評(píng)估
PredominantFeatureType。<BR><BR>
<DIV style="CLEAR: both"></DIV></DIV>
<DIV class=postname>
<DIV class=pf>5樓 </DIV><B>tracking</B> 發(fā)表于:2004-11-22 9:58:00</DIV>
<DIV class=postbody>第八節(jié)
圖層縮放<BR>有時(shí)您想使一個(gè)地圖圖層僅在某些縮放級(jí)別顯示。圖層縮放控制地圖圖層的顯示,使它僅當(dāng)?shù)貓D縮放水平在預(yù)先設(shè)置的距離內(nèi)時(shí)才顯示??蔀槊總€(gè)圖層設(shè)置不同的圖層縮放級(jí)別。<BR>例如,如果地圖包括街道地圖圖層,當(dāng)用戶過于縮小地圖時(shí),可能發(fā)現(xiàn)街道變得難以辨認(rèn)。使用圖層縮放可以建立當(dāng)用戶縮小地圖以顯示大于
5 英里的區(qū)域時(shí),MapX 可自動(dòng)隱藏街道的地圖。 <BR><BR>未設(shè)置縮放級(jí)別的圖層集合 對(duì)街道圖層設(shè)置了縮放級(jí)別的圖層集合<BR><BR>下列范例代碼使用
Layers 集合的 Add 方法向地圖添加圖層并通過修改 Layer 對(duì)象的屬性而建立圖層縮放。<BR>Dim lyrStreets As Layer
`Creates the layer object<BR>`Sets the Streets table as the layer object and
orders the layer in `the map as number 3.<BR>Set lyrStreets =
Map1.Layers.Add(“Streets.tab”, 3)<BR>lyrStreets.ZoomLayer = True `Sets zoom
layering to true<BR>lyrStreets.ZoomMin = 0 `Sets minimum zoom to 0
miles<BR>lyrStreets.ZoomMax = 5 `Sets maximum zoom to 5
miles<BR>一旦為圖層設(shè)置了圖層縮放,當(dāng)?shù)貓D在最小縮放級(jí)別和最大縮放級(jí)別之間縮放時(shí),圖層將在地圖上顯示。例如:<BR>Map1.ZoomTo 3,
-70.26, 44.05 <BR>因?yàn)?3 英里的縮放值在最小縮放級(jí)別和最大縮放級(jí)別之間,Streets 圖層將中心點(diǎn)定在
-70.26,44.05,并顯示涵蓋地圖控件 3 英里的地圖區(qū)域。<BR>相同 Map
窗口中的不同圖層可以以不同的縮放級(jí)別顯示。例如,地圖上有街道圖層,縣邊界圖層,以及州邊界圖層。想要使街道圖層只在縮放級(jí)別小于八英里時(shí)才可見。而縣邊界圖層在縮放級(jí)別處于
20 到 200 英里時(shí)顯示。州邊界圖層則只在縮放級(jí)別大于 100 英里時(shí)才可見。可以為地圖中的每一個(gè)圖層設(shè)置不同的縮放級(jí)別。<BR><BR><BR>第九節(jié)
為圖層生成標(biāo)注<BR>概述<BR>MapX
提供了多種方法來標(biāo)注地圖圖層中地理對(duì)象的屬性。它們的繪圖位置是基于地理對(duì)象中心的位置以及其他的一些信息,如定位點(diǎn)和偏移量。
<BR><BR>作為屬性,標(biāo)注是動(dòng)態(tài)連接到關(guān)于它們的地圖對(duì)象上的。如果圖層被關(guān)閉或不可見,則標(biāo)注不再顯示。如果數(shù)據(jù)或地理信息改變,則標(biāo)注也改變。如果為標(biāo)注創(chuàng)建了表達(dá)式,并對(duì)該表達(dá)式進(jìn)行更改,則當(dāng)前標(biāo)注會(huì)被新的表達(dá)式動(dòng)態(tài)取代。無論是自動(dòng)標(biāo)注地圖,還是交互地使用
Label 工具或 LabelAtPoint 方法,標(biāo)注的內(nèi)容都由與地理對(duì)象相關(guān)聯(lián)的數(shù)據(jù)來確定。<BR>除了標(biāo)注內(nèi)容,還可以使用 LabelProperties
對(duì)象中的屬性來控制自動(dòng)標(biāo)注的位置、顯示和外觀??梢詾闃?biāo)注顯示設(shè)置條件,如顯示的樣式和圖層中所有對(duì)象的位置。<BR>控制標(biāo)注顯示
<BR>要為圖層自動(dòng)生成標(biāo)注,可以設(shè)置圖層的 AutoLabel 屬性為 True。<BR>每一個(gè)圖層對(duì)象都有 LabelProperties
對(duì)象,用來控制標(biāo)注的許多方面。例如,為了隱藏圖層的所有標(biāo)注,可設(shè)置 LabelProperties.Visible 屬性為
False。若要指定想在地圖上顯示的標(biāo)注的最大數(shù)量,可以設(shè)置 LabelMax 屬性。Duplicate
屬性控制同名的圖元是否可以同時(shí)在地圖上分開標(biāo)注。Overlap 屬性控制是否允許標(biāo)注疊加;設(shè)置 Overlap 為 True
可以使更多圖元被標(biāo)注,但疊加的標(biāo)注很難識(shí)別。<BR>縮放圖層標(biāo)注<BR>可以設(shè)置標(biāo)注只在特定的縮放范圍中顯示,方法類似于在一定的縮放范圍中顯示地圖圖層。要對(duì)標(biāo)注指定縮放范圍,可設(shè)置圖層的
LabelProperties 對(duì)象的 LabelZoom、LabelZoomMax 和 LabelZoomMin
屬性。<BR>標(biāo)注位置<BR>要控制標(biāo)注的位置,可設(shè)置 Position 屬性(控制標(biāo)注是在圖元中心的上方、下方還是旁邊)和 Offset
屬性(控制標(biāo)注對(duì)于圖元的偏移量)。
<BR>默認(rèn)的錨點(diǎn)取決于圖層的主要圖元類型。例如,區(qū)域圖元的圖層默認(rèn)為在區(qū)域中心有相關(guān)標(biāo)注。<BR>對(duì)于線/折線圖元(如街道地圖),可以使標(biāo)注平行于線對(duì)象,方法是設(shè)置
Parallel 屬性為
True。<BR>創(chuàng)建引注<BR>引注是指用線指向所標(biāo)注對(duì)象的一種標(biāo)注。當(dāng)在一塊相對(duì)較小的區(qū)域中有很多標(biāo)注時(shí),則引注就非常有用。例如為亞洲地圖作標(biāo)注。有很多小國(guó)家靠得相當(dāng)近。如果試圖標(biāo)注所有這些國(guó)家,那么這些標(biāo)注將互相疊加而難以辨認(rèn)。<BR>要?jiǎng)?chuàng)建引注,可為想要標(biāo)注的圖層設(shè)置
LabelProperties.LineType 屬性為 miLineTypeSimple (1) 或 miLineTypeArrow
(2)。<BR>標(biāo)注樣式<BR>要更改所有標(biāo)注的樣式,可設(shè)置
Style。<BR>也可以設(shè)置合適的樣式選項(xiàng)。對(duì)樣式進(jìn)行所要的更改。當(dāng)返回地圖時(shí),所選的標(biāo)注就會(huì)以指定的樣式顯示。<BR>同時(shí)還有背景選項(xiàng)。設(shè)置合適的選項(xiàng)以產(chǎn)生無背景的效果,或設(shè)置輪廓以產(chǎn)生在文字周圍的輪廓效果。這樣使文本在它所覆蓋的地方(例如,區(qū)域的一部分或一條街等等)上突出顯示。<BR>交互式標(biāo)注<BR>盡管大部分標(biāo)注可能會(huì)自動(dòng)完成,但某些情況下可能要使用
Label 工具創(chuàng)建標(biāo)注。 Label 工具是 MapX 內(nèi)置的標(biāo)準(zhǔn)工具。要激活該工具,可設(shè)置 Map.CurrentTool 屬性為 miLabelTool
(1010);用戶將可通過單擊圖元進(jìn)行標(biāo)注。<BR>刪除圖層中所有標(biāo)注的最簡(jiǎn)單的方法是使用 Visibility
設(shè)置。它將禁止該圖層中所有標(biāo)注的顯示,包括自動(dòng)和自定義標(biāo)注。要只清除自定義標(biāo)注(使用 Label 工具制作的標(biāo)注),請(qǐng)使用 ClearCustomLabels
方法。<BR>如下的示例程序使用外部Mapstats.mdb庫中”USA”表的”GEONAME”字段值作為標(biāo)注<BR>Dim DS As
Object<BR>Dim DB As Object<BR>Dim RS As Object<BR>Dim Temp As Object<BR>Set DB =
Workspaces(0).OpenDatabase("Mapstats.mdb")<BR>Set RS =
DB.OpenRecordset("USA")<BR>Set DS = Map1.Datasets.Add(miDataSetDAO, RS)<BR>Set
Map1.Layers("usa").LabelProperties.Dataset = DS<BR>Set Temp =
DS.Fields("GEONAME")<BR>Set Map1.Layers("usa").LabelProperties.DataField =
Tem<BR>第十節(jié) 注釋<BR>盡管標(biāo)注圖元可以解決大部分的文本注釋需要,可能仍然需要?jiǎng)?chuàng)建文本對(duì)象來對(duì)地圖進(jìn)行注釋。
不同于標(biāo)注的是,文本注釋不與數(shù)據(jù)連接——可以將它放在地圖上的任何地方,即便那個(gè)位置沒有任何圖元。<BR>要添加文本或符號(hào)注釋到地圖,請(qǐng)使用
Annotations 集合和對(duì)象中的方法和屬性。<BR>每個(gè) Map 對(duì)象都有 Annotations 的集合(Map.Annotations
屬性)。注釋可以是符號(hào)或文本對(duì)象,且繪制在地圖的頂層。<BR>注釋通常用于為地圖添加文本消息,或者是添加符號(hào)。在對(duì)地圖進(jìn)行縮放時(shí)這些注釋會(huì)相應(yīng)地調(diào)整大小。注釋不固定于某個(gè)特定的地圖圖層。注釋總是在地圖的頂層。<BR>請(qǐng)注意
Annotation 對(duì)象沒有任何屬性來設(shè)置位置、符號(hào)樣式或文本。要控制注釋的這些方面,可使用 Annotation.Graphic 屬性來獲得 Graphic
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -