?? mapobject學習筆記-第三講 圖層標注、圖層控制和電子地圖常用工具開發_魏國強 的 博客.htm
字號:
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Option
Explicit</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Dim dc As New
DataConnection</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Dim layer As
MapLayer</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN
style="COLOR: red">Private Sub legend1_AfterSetLayerVisible(index As
Integer, isVisible As Boolean)</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN
style="COLOR: red">Map1.Refresh</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN
style="COLOR: red">End Sub</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Private Sub
LayerSet()</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set layer = New
MapLayer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set
layer.GeoDataset =
dc.FindGeoDataset("</SPAN><SPAN>區縣</SPAN><SPAN>")</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Color
= moOrange</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Size
= 1</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Style
= 9</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.OutlineColor
= moBrown</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Name =
"</SPAN><SPAN>行政區</SPAN><SPAN>"</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map1.Layers.Add
layer</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set layer = New
MapLayer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set
layer.GeoDataset =
dc.FindGeoDataset("</SPAN><SPAN>河流</SPAN><SPAN>1")</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Color
= moDarkGreen</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Size
= 2</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Name =
"</SPAN><SPAN>河流</SPAN><SPAN>"</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map1.Layers.Add
layer</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set layer = New
MapLayer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set
layer.GeoDataset =
dc.FindGeoDataset("</SPAN><SPAN>測站</SPAN><SPAN>")</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Color
= moRed</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Size
= 3</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Style
= 0</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Name =
"</SPAN><SPAN>測站</SPAN><SPAN>"</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set layer.Renderer
= New LabelRenderer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Renderer.Field
= "NAME"<SPAN style="mso-spacerun: yes"> </SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>'</SPAN><SPAN>指定要顯示的字段</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>'layer.Renderer.Symbol(0).Font.Name
= "</SPAN><SPAN>幼圓</SPAN><SPAN>"</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>'layer.Renderer.Symbol(0).Font.Bold
= False<SPAN style="mso-spacerun: yes">
</SPAN>'</SPAN><SPAN>缺省為</SPAN><SPAN>True</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Renderer.Symbol(0).Color
= moBlack</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Renderer.Symbol(0).Font.Size
= 8</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Renderer.AllowDuplicates
= True</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map1.Layers.Add
layer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End Sub</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Private Sub
Form_Load()</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>dc.Database =
App.Path + "\..\" +
"<ST1:CITY><ST1:PLACE>beijing</ST1:PLACE></ST1:CITY>"</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>If Not dc.Connect
Then</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN><SPAN
style="mso-spacerun: yes"> </SPAN></SPAN><SPAN>MsgBox
"</SPAN><SPAN>在指定的文件夾下沒找到圖層數據文件!</SPAN><SPAN>"</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN><SPAN
style="mso-spacerun: yes">
</SPAN></SPAN><SPAN>End</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End If</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>LayerSet</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN><SPAN
style="COLOR: red">legend1.setMapSource Map1</SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN
style="COLOR: red">legend1.LoadLegend True</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map1.Refresh</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End
Sub</SPAN></P><SPAN>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN
style="FONT-SIZE: 12pt">三、電子地圖常用工具開發</SPAN></STRONG></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>電子地圖常用工具開發和方法包括指示圖(</SPAN><SPAN>locator
map</SPAN><SPAN>)、比例尺(</SPAN><SPAN>scalebar</SPAN><SPAN>)和狀態欄(</SPAN><SPAN>statusbar</SPAN><SPAN>)、打印功能的設置、鼠標提示(</SPAN><SPAN>tip
text</SPAN><SPAN>)的設置以及查看屬性設置等。</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>1</SPAN><SPAN>、使用指示圖(即鷹眼功能)之添加指示窗口</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>一般電子地圖系統在主窗口的附近有一個指示圖,指示圖用顯著顏色的方框顯示目前主窗口在全圖的位置,并可以拖動方框或其他方式,在全圖中迅速定位。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>示例代碼如下:</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Option
Explicit</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Dim dc As New
DataConnection</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Dim layer As
MapLayer</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Private Sub
Form_Load()</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>dc.Database =
App.Path + "\..\" + "world"</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set layer = New
MapLayer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set
layer.GeoDataset = dc.FindGeoDataset("country")</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Color
= moYellow</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Size
= 1</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>'layer.Symbol.Style
= 2</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.OutlineColor
= moBrown</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map1.Layers.Add
layer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set layer = New
MapLayer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set
layer.GeoDataset = dc.FindGeoDataset("Cities")</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Color
= moRed</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Size
= 4</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Style
= 0</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map1.Layers.Add
layer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set layer = New
MapLayer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set
layer.GeoDataset = dc.FindGeoDataset("country")</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>layer.Symbol.Color
= moPaleYellow</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map2.Layers.Add
layer</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map2.Refresh</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End Sub</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P><SPAN>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><STRONG><SPAN>'</SPAN></STRONG><STRONG><SPAN>使</SPAN></STRONG><STRONG><SPAN>Map1</SPAN></STRONG><STRONG><SPAN>和</SPAN></STRONG><STRONG><SPAN>Map2</SPAN></STRONG><STRONG><SPAN>聯動,利用</SPAN></STRONG><STRONG><SPAN>AfterLayerDraw</SPAN></STRONG><STRONG><SPAN>事件函數來實現,此方法表示當</SPAN></STRONG><STRONG><SPAN>Map1</SPAN></STRONG><STRONG><SPAN>畫完開始執行的事件代碼。</SPAN></STRONG></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Private Sub
Map1_AfterLayerDraw(ByVal index As Integer, ByVal canceled As Boolean,
ByVal hDC As stdole.OLE_HANDLE)</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN
style="COLOR: red">If index = 1 </SPAN><SPAN>Then<SPAN
style="mso-spacerun: yes">
</SPAN>'</SPAN><SPAN>代表加載的圖層索引號</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map2.TrackingLayer.Refresh
True<SPAN style="mso-spacerun: yes"> </SPAN>'
TrackingLayer</SPAN><SPAN>對象是</SPAN><SPAN>Map</SPAN><SPAN>控件中的一個特殊層,它描繪位置可以動態改變的地理目標。</SPAN><SPAN>Refresh</SPAN><SPAN>是其的一個函數,用來強制刷新新的</SPAN><SPAN>TrackingLayer</SPAN><SPAN>對象,此值是一個布爾值。</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End If</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End Sub</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Private Sub
Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>If Button =
vbLeftButton Then</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Set Map1.Extent =
Map1.TrackRectangle</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>ElseIf Button =
vbRightButton Then</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map1.Pan</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End If</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>End
Sub</SPAN></P><SPAN>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><STRONG><SPAN>'</SPAN></STRONG><STRONG><SPAN>在</SPAN></STRONG><STRONG><SPAN>Map2</SPAN></STRONG><STRONG><SPAN>上畫紅色指示框。此處使用</SPAN></STRONG><STRONG><SPAN>Map</SPAN></STRONG><STRONG><SPAN>控件的</SPAN></STRONG><STRONG><SPAN>AfterTrackingLayerDraw</SPAN></STRONG><STRONG><SPAN>事件,表示當控件完成所有</SPAN></STRONG><STRONG><SPAN>TrackingLayer</SPAN></STRONG><STRONG><SPAN>的地理圖層對象的更新后自動進入的函數代碼。</SPAN></STRONG><STRONG><SPAN></SPAN></STRONG></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Private Sub
Map2_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE)</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Dim sym As New
Symbol</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>sym.OutlineColor =
moRed</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>sym.Size =
2</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>sym.Style =
moTransparentFill</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN>Map2.<SPAN
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -