zoukankan      html  css  js  c++  java
  • 刘亮给的帮助

     

    创建临时图层
    在临时图层上用程序或者让用户手动的创建一个矩形或者圆形
    然后使用空间过滤器,spatialfilter
    指定一下它的参数,进行查找就行了。
    具体的使用在帮助文档里有。


    在地图上画矩形或者圆形可以通过INewCircleFeedback接口实现,画矩形同理,只需转换使用的接口就可以了,以下以画圆形为例(该代码是在ArcMap的VBA环境下,建立用户控件使用的):
    Private m_pDoc As IMxDocument
    Private m_pAV As IActiveView
    Private m_pScrD As IScreenDisplay
    Private m_pNewCircFeedback As INewCircleFeedback

    Private Function UIToolControl1_Enabled() As Boolean
      'Set the ToolControl to enabled (disabled by default if any code is present in this event)
      UIToolControl1_Enabled = True
     
      'Check that we have a reference to the ActiveView and ScreenDisplay
      If m_pScrD Is Nothing Then
        Set m_pDoc = Application.Document
        Set m_pAV = m_pDoc.ActiveView
        Set m_pScrD = m_pAV.ScreenDisplay
      End If
    End Function

    Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
      Dim pPnt As IPoint
     
      ' Get the current mouse location in Map Units
      Set pPnt = m_pScrD.DisplayTransformation.ToMapPoint(x, y)
     
      ' Check that user is not using an existing feedback
      If m_pNewCircFeedback Is Nothing Then
       
        ' Create a NewCircleFeedback object
        Set m_pNewCircFeedback = New NewCircleFeedback
       
        'Set the Feedback's Display and StartPoint
        Set m_pNewCircFeedback.Display = m_pScrD
        m_pNewCircFeedback.Start pPnt
       
      End If
    End Sub

    Private Sub UIToolControl1_MouseMove(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
     
      ' Check if the user is currently using the feedback
      If Not m_pNewCircFeedback Is Nothing Then
        Dim pPnt As IPoint
        'Move the Feedback to the current mouse location
        Set pPnt = m_pScrD.DisplayTransformation.ToMapPoint(x, y)
        m_pNewCircFeedback.MoveTo pPnt
      End If
    End Sub

    Private Sub UIToolControl1_MouseUp(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
      Dim pCircArc As IGeometry
     
      ' Check if the user is currently using the feedback
      If Not m_pNewCircFeedback Is Nothing Then
        'Get the geometry (ICircularArc) returned from the feedback
        Set pCircArc = m_pNewCircFeedback.Stop
       
        ' If it is valid then create a CircleElement on the ActiveView using the 'AddCreateElement' procedure
        If Not pCircArc Is Nothing Then
          AddCreateElement pCircArc, m_pAV
          m_pAV.Refresh
        End If
       
        ' Set the feedback to nothing for the next use
        Set m_pNewCircFeedback = Nothing
      End If
    End Sub

    Private Sub AddCreateElement(pCircArc As ICircularArc, pAV As IActiveView)
    ' Takes an ICircularArc and IActiveView and creates a CircleElement in the ActiveView's BasicGraphicsLayer
      Dim pElemFillShp As IFillShapeElement
      Dim pElem As IElement
      Dim pGraCont As IGraphicsContainer
      Dim pSFSym As ISimpleFillSymbol
      Dim pRGB As IRgbColor
      Dim pSegColl As ISegmentCollection
     
      ' Create a new Polygon object and access the ISegmentCollection interface to add a segment
      Set pSegColl = New Polygon
      pSegColl.AddSegment pCircArc
     
      ' Create a new circleelement and use the IElement interface to set the its Geometry
      Set pElem = New CircleElement
      pElem.Geometry = pSegColl
     
      ' QI for the IFillShapeElement interface so that the Symbol property can be set
      Set pElemFillShp = pElem
       
      ' Create a new RGBColor
      Set pRGB = New RgbColor
      With pRGB
        .Red = 198
        .Green = 255
        .Blue = 214
      End With
       
      ' Create a new SimpleFillSymbol and set its Color and Style
      Set pSFSym = New SimpleFillSymbol
      pSFSym.Color = pRGB
      pSFSym.Style = esriSFSSolid
      pElemFillShp.Symbol = pSFSym
       
      ' QI for the IGraphicsContainer interface from the IActiveView, allows access to the BasicGraphicsLayer
      Set pGraCont = pAV
      'Add the element at Z order zero
      pGraCont.AddElement pElemFillShp, 0
    End Sub
    至于搜索,只需在取得pCircArc后利用ISpatialFilter即可实现,代码如下:
    Dim pFilter As IspatialFilter
    Set pFilter = New SpatialFilter
      With pFilter
        Set .Geometry = pCircArc
        .GeometryField = "SHAPE"
        .SpatialRel = esriSpatialRelIntersects
      End With
    dim featureCount as Integer
    featurecount=pFeatureClass.FeatureCount pFilter
    featurecount即为要搜索的pfeatureclass中的实体个数

  • 相关阅读:
    Dubbo支持的协议的详解
    db2 SQL6036N解决办法
    9-5 HTTP注解演示及注意事项讲解
    9-4 Feign之HTTP注解介绍
    9-3 Feign演示及Feign注解解析
    9-2 Feign环境准备
    9-1 Feign自我介绍
    8-30 Hystrix章节总结
    8-29 实战技巧:如何设置线程池
    8-28 Hystrix监控讲解与演示
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1393446.html
Copyright © 2011-2022 走看看