Позиционировать на объект?

0 голосов
спросил 06 Апр, 04 от fbor (480 баллов) в категории Программные продукты Esri
Добрый день, подскажите как  позиционировать по карте на объект в слое, пробую PanTo , не получается пока

9 Ответы

0 голосов
ответил 06 Апр, 04 от Alexander1 (32,520 баллов)

Сначала каким-либо образом (Attribute Query or Spatial Query) выделить объект, а затем выполнить команду:


'Zoom to Selected features
pUID.Value = "{AB073B49-DE5E-11D1-AA80-00C04FA37860}"
Set pCmdItem = Application.Document.CommandBars.Find(pUID)
pCmdItem.Execute

0 голосов
ответил 06 Апр, 04 от fbor (480 баллов)

 Я бы не хотел выделять объект, можете подсказать почему не работает мой код?

  Dim i As Integer
  Dim pLayer As ILayer
  Dim pFLayer As IFeatureLayer
  Dim pFMark As IFeatureBookmark
  Dim pDisplay As IDisplay
  Set pDisplay = pActiveView.ScreenDisplay
  For i = 0 To pMap.LayerCount -1
    Set pLayer = pMap.Layer(i)
    If pLayer.Name = lname Then
      Set pFLayer = pLayer
    End If
  Next i
  pFMark.FeatureClass = pFLayer.FeatureClass
  pFMark.FeatureId = 846
  pFMark.PanTo pDisplay

0 голосов
ответил 07 Апр, 04 от Andranic (2,620 баллов)

В документации написано

PanTo the feature location specified by this bookmark. Not implemented at version 8.0.1.
 
На самом деле она не реализована даже и в ArcGIS 9.0 во вском случае в документации к девятке написано:
 
PanTo the feature location specified by this bookmark. Not implemented at version 9.0.
 
Поэтому советую использовать либо ZoomTo, либо брать видимые экстент и использовать метод CenterAt у IEnvelope.
0 голосов
ответил 08 Апр, 04 от fbor (480 баллов)

Спасибо, я уже использовал ZoomTo, и пытался использовать Flash, у меня 8.3, тоже не работает,  что сказано в 9?

0 голосов
ответил 08 Апр, 04 от Alexander1 (32,520 баллов)
Flash не работает or ZoomTo?
0 голосов
ответил 08 Апр, 04 от fbor (480 баллов)

Не работает Flash, команда отрабатывает но ничего не происходит.

0 голосов
ответил 08 Апр, 04 от Alexander1 (32,520 баллов)

Вот тебе работающий набор функций для Flash. Надеюсь, разберёшься, что к чему:

' =============== Flash =================

Public Sub FlashFeature(pFeature As IFeature, _
                        pMxDoc As IMxDocument, _
                        pSleepTime As Long)
   
   
    ' Start Drawing on screen
    pMxDoc.ActiveView.ScreenDisplay.StartDrawing 0, esriNoScreenCache
   
    ' Switch functions based on Geomtry type
    Select Case pFeature.Shape.GeometryType
        Case esriGeometryPolyline
            FlashLine pMxDoc.ActiveView.ScreenDisplay, pFeature.Shape, pSleepTime
        Case esriGeometryPolygon
            FlashPolygon pMxDoc.ActiveView.ScreenDisplay, pFeature.Shape, pSleepTime
        Case esriGeometryPoint
            FlashPoint pMxDoc.ActiveView.ScreenDisplay, pFeature.Shape, pSleepTime
    End Select
   
    ' Finish drawing on screen
    pMxDoc.ActiveView.ScreenDisplay.FinishDrawing
   
   
 End Sub

 

Private Sub FlashLine(pDisplay As IScreenDisplay, _
                      pGeometry As IGeometry, _
                      pSleepTime As Long)

   
    Dim pLineSymbol As ISimpleLineSymbol
    Dim pSymbol As ISymbol
    Dim pRGBColor As IRgbColor
   
    Set pLineSymbol = New SimpleLineSymbol
    pLineSymbol.Width = 4
   
    Set pRGBColor = New RgbColor
    pRGBColor.Green = 128
   
    Set pSymbol = pLineSymbol
    pSymbol.ROP2 = esriROPNotXOrPen
   
    pDisplay.SetSymbol pLineSymbol
    pDisplay.DrawPolyline pGeometry
    Sleep pSleepTime
    pDisplay.DrawPolyline pGeometry
   
   
End Sub

Private Sub FlashPolygon(pDisplay As IScreenDisplay, _
                         pGeometry As IGeometry, _
                         pSleepTime As Long)

   
    Dim pFillSymbol As ISimpleFillSymbol
    Dim pSymbol As ISymbol
    Dim pRGBColor As IRgbColor
   
    Set pFillSymbol = New SimpleFillSymbol
    pFillSymbol.Outline = Nothing
   
    Set pRGBColor = New RgbColor
    pRGBColor.Green = 128
   
    Set pSymbol = pFillSymbol
    pSymbol.ROP2 = esriROPNotXOrPen
   
    pDisplay.SetSymbol pFillSymbol
    pDisplay.DrawPolygon pGeometry
    Sleep pSleepTime
    pDisplay.DrawPolygon pGeometry
   
   
End Sub

Private Sub FlashPoint(pDisplay As IScreenDisplay, _
                       pGeometry As IGeometry, _
                       pSleepTime As Long)

    Dim pMarkerSymbol As ISimpleMarkerSymbol
    Dim pSymbol As ISymbol
    Dim pRGBColor As IRgbColor
   
    Set pMarkerSymbol = New SimpleMarkerSymbol
    pMarkerSymbol.Style = esriSMSCircle
   
    Set pRGBColor = New RgbColor
    pRGBColor.Green = 128
   
    Set pSymbol = pMarkerSymbol
    pSymbol.ROP2 = esriROPNotXOrPen
   
    pDisplay.SetSymbol pMarkerSymbol
    pDisplay.DrawPoint pGeometry
    Sleep pSleepTime
    pDisplay.DrawPoint pGeometry
   
End Sub

0 голосов
ответил 08 Апр, 04 от fbor (480 баллов)
Спасибо, разберусь. У меня появился еще вопрос, я в своем приложении использую TMapControl и хочу сделать легенду подобную ArcMap  но толковых примеров использования TOC я не нашел, если можно подскажите.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...