12 查找图元
mapx查找地图上的图元有多种方法
a, FindObj.Search
这种方法在用的时候有局限性:数据集必须要有索引,查找的字段类型不能是10进制类型(可能还有其它的类型,忘了),否则在图上找不到。
Set FindObj = fMainForm.Map1.Layers(LayerCombo.Text).Find
Set FindObj.FindDataset = fMainForm.Map1.DataSets(LayerCombo.Text & " dataset")
Set FindObj.FindField = FindObj.FindDataset.Fields(FieldCombo.Text)
Set FoundFeature = FindObj.Search(FindText.Text)
If FoundFeature.FindRC Mod 10 = 1 Or FoundFeature.FindRC Mod 10 = 2 Then
fMainForm.Map1.Layers(LayerCombo.Text).Selection.Add FoundFeature
fMainForm.Map1.AutoRedraw = False
fMainForm.Map1.CenterX = FoundFeature.CenterX
fMainForm.Map1.CenterY = FoundFeature.CenterY
End If
b,SQL语句方法
Dim ftrs As MapXLib.Features
Dim lyr As Layer
Dim i As Integer
Set lyr = fMainForm.Map1.Layers(RoadlyrName)
Dim strs As String
strs = Trim("路线编码 = " + Chr(34) + ComRoadID.List(ComRoadID.ListIndex) + Chr(34))‘在值前面加双引号如:ID="001", 观测点名称 like "%天平庄"
Set ftrs = lyr.Search(strs)
lyr.Selection.ClearSelection
lyr.Selection.Add ftrs
If ftrs.Count > 0 Then
fMainForm.Map1.CenterX = ftrs.Item(1).CenterX
fMainForm.Map1.CenterY = ftrs.Item(1).CenterY
End If
13显示鼠标当前的经纬度
Private Sub Map1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim MX As Double, MY As Double
Map1.ConvertCoord x, y, MX, MY, 1
Text1.Item(1).Caption = "当前位置"
Text1.Item(2).Caption = "东经 " & Format(MX, "###0.0000") + ",北纬 " + Format(MY, "###0.0000")
Text1.Item(3).Caption = " 当前图层"
Text1.Item(4).Caption = Map1.Layers(1).Name
End Sub
14自动滚屏
Private Sub Map1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If mnuMoveCenter.Checked = True Then
If x > Map1.MapScreenWidth - 10 Then
Map1.CenterX = Map1.CenterX + 0.05
Map1.Refresh
Else
If x < 10 Then
Map1.CenterX = Map1.CenterX - 0.05
Map1.Refresh
Else
If y > Map1.MapScreenHeight - 10 Then
Map1.CenterY = Map1.CenterY - 0.05
Map1.Refresh
Else
If y < 10 Then
Map1.CenterY = Map1.CenterY + 0.05
Map1.Refresh
End If
End If
End If
End If
End If
End Sub
15测距和测面积
Private Sub Form_Load()
Map1.CreateCustomTool PolyRulerToolID, miToolTypePoly, miSizeAllCursor
Map1.CreateCustomTool PolyAreaToolID, miToolTypePolygon, miSelectRegionMinusCursor
End Sub
Private Sub Map1_PolyToolUsed(ByVal ToolNum As Integer, ByVal flags As Long, ByVal Points As Object, ByVal bShift As Boolean, ByVal bCtrl As Boolean, EnableDefault As Boolean)
If ToolNum = PolyRulerToolID Then
Dim i As Integer
Dim DistanceSoFar As Double
Map1.MapUnit = RulerUnit
DistanceSoFar = 0#
If Points.Count > 1 Then
For i = 2 To Points.Count
DistanceSoFar = DistanceSoFar + Map1.Distance(Points.Item(i).x, Points.Item(i).y, Points.Item(i - 1).x, Points.Item(i - 1).y)
Next
End If
If flags = miPolyToolEnd Then
'First, clear the status bar
Text1.Item(4).Caption = ""
MsgBox "距离: " & DistanceSoFar & " " & RulerUnitString
Else
Text1.Item(3).Caption = "距离"
Text1.Item(4).Caption = DistanceSoFar & " " & RulerUnitString
End If
End If
If ToolNum = PolyAreaToolID Then
'面积
Map1.AreaUnit = miUnitSquareKilometer
On Error Resume Next
Dim apolygoN As New MapXLib.Feature
Dim ax As Double
If (Points.Count > 2) Then
Set apolygoN = New Feature
Set apolygoN = Map1.FeatureFactory.CreateRegion(Points)
ax = apolygoN.Area
MsgBox "面积: " & ax
End If
End If
End Sub
本文地址:http://com.8s8s.com/it/it26487.htm