MapX開(kāi)發(fā)鼠標點(diǎn)擊查詢(xún)(識別)的教程:
由鼠標選擇要素——點(diǎn)擊查詢(xún)
由圖形選擇要素點(diǎn)擊查詢(xún)——思路
底層開(kāi)發(fā)實(shí)現思路:
第一步:點(diǎn)擊地圖,獲取坐標
第二步:對圖層中的特征(Feature)進(jìn)行判斷
第三部:顯示該特征的信息
MapX實(shí)現思路1
地圖操作:放大、縮小、漫游
Map1.CurrentTool= miZoomInTool
Map1.CurrentTool = miZoomOutTool
Map1.CurrentTool = miPanTool
通過(guò)自定義工具的實(shí)現方法:
第一步,自定義一個(gè)工具;
第二步,對在地圖對象(Map)的ToolUsed事件中進(jìn)行響應代碼的編寫(xiě)。
第三步,設置地圖對象(Map)的當前工具(CurrentTool)屬性;
如何自定義工具
語(yǔ)法:
OBJECT.CreateCustomTool
(ToolNumber, Type, Cursor, [ShiftCursor] , [CtrlCursor], [InfoTips]) OBJECT Represents a Map object.ToolNumber can be an integer between 1 and 999. The type describes the tool behavior.
Cursor shape.Shift Cursor.Ctrl Cursor.InfoTips Boolean
為了實(shí)現點(diǎn)擊查詢(xún),需要定義一個(gè)工具:Map1.CreateCustomTool 1,miToolTypePoint,miCrossCursor 這條語(yǔ)句放在哪里?Form_Load事件處理過(guò)程中
Private Sub Form_Load()
Map1.CreateCustomTool 1,miToolTypePoint,miCrossCursor
End Sub 對自定義工具的響應
Private Sub Map1_ToolUsed(ByVal ToolNum As Integer, _
ByVal X1 As Double, ByVal Y1 As Double, _
ByVal X2 As Double, ByVal Y2 As Double, _
ByVal Distance As Double, ByVal Shift As Boolean, _
ByVal Ctrl As Boolean, EnableDefault As Boolean) End Sub Select Case ToolNum
Case 1 Case 2 Case Else
Debug.Print "Another tool was used: " & ToolNum
End Select 圖層類(lèi)的SearchAtPoint方法
[Features collection=] OBJECT.SearchAtPoint (Point, [SearchResultFlag]) Private Sub Map1_ToolUsed(ByVal ToolNum As Integer, _
ByVal X1 As Double, ByVal Y1 As Double, _
ByVal X2 As Double, ByVal Y2 As Double, _
ByVal Distance As Double, ByVal Shift As Boolean, _
ByVal Ctrl As Boolean, EnableDefault As Boolean) Select Case ToolNum
Case 1
……
Set fss=Lyr.SearchAtPoint(pt)
……
Case Else
Debug.Print "Another tool was used: " & ToolNum
End Select
End Sub 工具的調用:
可以放在按鈕、菜單項等的Click事件處理過(guò)程中.
Private Sub Command1_Click()
Map1.CurrentTool = 1
End Sub MapX實(shí)現思路2:通過(guò)圖層選擇集的實(shí)現方式
Map1.CurrentTool = miSelectTool
Private Sub Map1_SelectionChanged()
Dim fs As Feature
Set fs = Map1.Layers.Item(1).Selection.Item(1)
MsgBox fs.Name
End Sub 思考:
能用Map的MouseDown事件來(lái)實(shí)現點(diǎn)擊查詢(xún)嗎?如果能用應該怎樣實(shí)現呢?
比較以上兩種實(shí)現方式(自定義工具方式和圖層選擇集方式)的異同?
思考由圖形選擇要素實(shí)現查詢(xún)的實(shí)現思路? 補充: 畫(huà)圓選擇的實(shí)現技術(shù):工具的創(chuàng )建
Map1.CreateCustomTool 2, miToolTypeCircle, miSelectCursor 工具的響應,應該放在toolused事件響應過(guò)程中
Set lyr = Map1.Layers.Item("buspoint")
pt.Set X1, Y1
Set fss = lyr.SearchWithinDistance
(pt, Distance, miUnitMeter, miSearchTypeCentroidWithin)
MsgBox fss.Count
工具的調用
Private Sub Circle_Find_Menu_Click()
Map1.CurrentTool = 2
End Sub 屬性信息的顯示P253
例如:顯示在Text中
Lyr.KeyField=“city_name”
Content=“城市名稱(chēng):”+fss.Item(1).KeyValue+Chr$(13)+Chr$(10)
Lyr.KeyField=“pop”
Content=content+”城市人口:”+fss.Item(1).KeyValue+”萬(wàn)人口”
Text1.text=content

