Как узнать слой, которому принадлежит кликнутый объект?

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Как узнать слой, которому принадлежит кликнутый объект?

Сообщение Tereha »

В обработки двойного клика на axMapControl есть координаты X,Y , соответствующие точке клика, а как узнать какому слою она принадлежит, а еще лучше объекту. Есть подозрение , что если player - это слой, которому принадлежит объект, то доступ можно получить с помощью доступа типа

Код: Выделить всё

pFc = pLayer.FeatureClass
strOIDName = pFc.OIDFieldName

' Get the selected features from the layer
Dim pFSel As IFeatureSelection
pFSel = pLayer
Dim pSelSet As ISelectionSet
pSelSet = pFSel.SelectionSet
'Dim pFCur As IFeatureCursor 'declared up top
pSelSet.Search(Nothing, False, pFCur)
Я пишу на C# , поэтому в коде только идея
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Как узнать слой, которому принадлежит кликнутый объект?

Сообщение Tereha »

Получаю ActiveView следующим образом

Код: Выделить всё

     
private ESRI.ArcGIS.Carto.IActiveViewEvents_SelectionChangedEventHandler m_ActiveViewEventsSelectionChanged;
m_map = (ESRI.ArcGIS.Carto.IMap)axMapControl1.ActiveView.FocusMap; // Explict Cast
//Create an instance of the delegate, add it to SelectionChanged event
m_ActiveViewEventsSelectionChanged = new ESRI.ArcGIS.Carto.IActiveViewEvents_SelectionChangedEventHandler(OnActiveViewEventsSelectionChanged);
((ESRI.ArcGIS.Carto.IActiveViewEvents_Event)(m_map)).SelectionChanged += m_ActiveViewEventsSelectionChanged;
Можно ли в этой ситуации понять на каком символе клик или нужно что-то еще?
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Как узнать слой, которому принадлежит кликнутый объект?

Сообщение Tereha »

Вот как то так работает

Код: Выделить всё

        private void OnActiveViewEventsSelectionChanged()
        {
            ICompositeLayer layer1;
            IFeatureLayer layer;
            layer1 = axMapControl1.get_Layer(2) as ESRI.ArcGIS.Carto.ICompositeLayer;
            layer = layer1.get_Layer(0) as ESRI.ArcGIS.Carto.IFeatureLayer;

            IBasicMap map = null;
            ILayer layer2 = null;
            layer.Selectable = true;
            Object other = null;
            Object index = null;

            esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;
            axTOCControl1.GetSelectedItem(ref item, ref map, ref layer2, ref other, ref index);
            IGeoFeatureLayer player; 
            player    = layer2 as IGeoFeatureLayer;
            player.Selectable = true;
            ESRI.ArcGIS.Geodatabase.IFeatureClass pFc;// = player as ESRI.ArcGIS.Geodatabase.IFeatureClass;
            string strOIDName;
            pFc = player.FeatureClass;
            if(pFc!=null)
               strOIDName = pFc.OIDFieldName;
           ESRI.ArcGIS.Carto.IFeatureSelection pFSel;
           pFSel = player as ESRI.ArcGIS.Carto.IFeatureSelection;
           ESRI.ArcGIS.Geodatabase.ISelectionSet pSelSet;
           pSelSet = pFSel.SelectionSet;

           ESRI.ArcGIS.Geodatabase.ICursor pFCur;
           pSelSet.Search(null, false, out pFCur);

           int nlay = pFCur.FindField("Centr_lesn");
           string centr = pFCur.NextRow().get_Value(nlay).ToString();
           this.label2.Text = centr;
           IFeatureSelection featureSelection = layer2 as IFeatureSelection;
           ESRI.ArcGIS.Geodatabase.ISelectionSet selectionSet = featureSelection.SelectionSet;
        }
Спасибо!
Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 1 гость