arcengine中怎么把要素的信息提取到一个窗口里,象desktop里实现的那样?

losedxyz 2006-12-04 09:48:09
请教思路,多谢!
...全文
249 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
huo789 2006-12-05
  • 打赏
  • 举报
回复
你说的是Identify吧,AE中没有直接的方法
摘自:浩淼的天空(http://www.hmgis.cn/)

IdentifyDialog类的简单示例
这个类是用于模拟IdentifyDialog,但是代码写的比较简单,就是简单显示了一下数据,数据显示使用的是MSFlexGrid控件。

Public pMap As IMap
Dim valueArr() As String
Dim FieldCount As Integer

Public Sub AddLayerIdentifyPoint(ByVal pFeatLyr As IFeatureLayer, ByVal pPoint As IPoint)
Dim pAV As IActiveView
Set pAV = pMap

Dim pFeatureLayer As IFeatureLayer
Set pFeatureLayer = pFeatLyr
Dim pFeatureClass As IFeatureClass
Set pFeatureClass = pFeatureLayer.FeatureClass

FieldCount = pFeatureClass.Fields.FieldCount

Dim pToPo As ITopologicalOperator
Set pToPo = pPoint
Dim pBufferGeo As IGeometry
Set pBufferGeo = pToPo.Buffer(ConvertPixelsToMapUnits(pMap, 4))
Dim pBufferEnv As IEnvelope
Set pBufferEnv = pBufferGeo.Envelope

Dim pSpatialFilter As ISpatialFilter
Set pSpatialFilter = New SpatialFilter
Set pSpatialFilter.Geometry = pBufferEnv
pSpatialFilter.GeometryField = pFeatureClass.ShapeFieldName

Select Case pFeatureClass.ShapeType
Case 1
pSpatialFilter.SpatialRel = esriSpatialRelContains
Case 3
pSpatialFilter.SpatialRel = esriSpatialRelCrosses
Case 4
pSpatialFilter.SpatialRel = esriSpatialRelIntersects
Case Else
End Select

Dim pFeatCursor As IFeatureCursor
Set pFeatCursor = pFeatureClass.Search(pSpatialFilter, False)
Dim pFeat As IFeature
Set pFeat = pFeatCursor.NextFeature
Dim nField As Integer

Do While Not pFeat Is Nothing
For nField = 0 To FieldCount - 1
ReDim Preserve valueArr(2, nField)
valueArr(0, nField) = pFeat.Fields.Field(nField).Name
If pFeat.Fields.Field(nField).Name <> "SHAPE" Then
If pFeat.Value(nField) <> "" Then
valueArr(1, nField) = pFeat.Value(nField)
Else
valueArr(1, nField) = "<NULL>"
End If
Else
Select Case pFeatureClass.ShapeType
Case 1
valueArr(1, nField) = "Point"
Case 3
valueArr(1, nField) = "Polyline"
Case 4
valueArr(1, nField) = "Polygon"
Case Else
End Select
End If
Next
Set pFeat = pFeatCursor.NextFeature
Loop
DialogShow
End Sub

Public Sub DialogShow()
Dim pFM2 As New Form2
pFM2.MSFlexGrid1.Clear
pFM2.MSFlexGrid1.Cols = 2
pFM2.MSFlexGrid1.Rows = FieldCount
Dim i As Integer
For i = 0 To pFM2.MSFlexGrid1.Rows - 1
pFM2.MSFlexGrid1.TextMatrix(i, 0) = valueArr(0, i)
pFM2.MSFlexGrid1.TextMatrix(i, 1) = valueArr(1, i)
Next
pFM2.Show
End Sub

Private Function ConvertPixelsToMapUnits(pMap As IMap, pixelUnits As Double) As Double
Dim pActiveView As IActiveView
Set pActiveView = pMap

Dim realWorldDisplayExtent As Double
Dim pixelExtent As Integer
Dim sizeOfOnePixel As Double

pixelExtent = pActiveView.ScreenDisplay.DisplayTransformation.DeviceFrame.Right - pActiveView.ScreenDisplay.DisplayTransformation.DeviceFrame.Left
realWorldDisplayExtent = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width
sizeOfOnePixel = realWorldDisplayExtent / pixelExtent
ConvertPixelsToMapUnits = pixelUnits * sizeOfOnePixel
End Function

调用这个类也很简单:
Private Sub MapControl1_OnMouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long, ByVal mapX As Double, ByVal mapY As Double)
Dim pid As New IdentifyDialog
Dim pPt As IPoint
Set pPt = New Point
pPt.x = mapX
pPt.y = mapY
Set pid.pMap = MapControl1.Map
pid.AddLayerIdentifyPoint MapControl1.Map.Layer(0), pPt
End Sub
losedxyz 2006-12-04
  • 打赏
  • 举报
回复
?

2,158

社区成员

发帖
与我相关
我的任务
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
  • 地理信息系统
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧