Идентифицировать

0 голосов
спросил 17 Май, 12 от kavkdv (440 баллов) в категории Программные продукты Esri
    Доброго времени суток. Подскажите пожалуйста как работает инструмент "Идентифицировать", как вообще с помощью мыши выбрать объект на карте для дальнейшей работы с ним. Желательно маленький пример кода на c# или VBA. Спс заранее.

3 Ответы

0 голосов
ответил 17 Май, 12 от kavkdv (440 баллов)
Я тут набросал кусочек программы, но она работает только с полигонами, а линии, полилинии и точки игнорит почему-то:
int count = 0;
            while (count != pMap.LayerCount)
            {
               pI = pMap.get_Layer(count) as IIdentify;
               pP = (m_application as IMxApplication).Display.DisplayTransformation.ToMapPoint(X, Y);
               pIDArray = pI.Identify(pP);
               if (pIDArray != null)
               {
                    pFIO = pIDArray.get_Element(0) as IFeatureIdentifyObj;
                    pIO = pFIO as IIdentifyObj;
                    pRIO = pIO as IRowIdentifyObject;
                    IFields pFs = pRIO.Row.Fields;
                    IField pF;
                    int fcount = 0;
                    string bstr = "";
                    while (fcount != pFs.FieldCount)
                    {
                        pF = pFs.get_Field(fcount);
                        if (fcount == 1)
                        {
                            pGeometry = pRIO.Row.get_Value(fcount) as IGeometry;
                            if (pGeometry.GeometryType == esriGeometryType.esriGeometryLine)
                                bstr += pF.AliasName + " : " + "Линия\n";
                            if (pGeometry.GeometryType == esriGeometryType.esriGeometryPoint)
                                bstr += pF.AliasName + " : " + "Точка\n";
                            if (pGeometry.GeometryType == esriGeometryType.esriGeometryPolygon)
                                bstr += pF.AliasName + " : " + "Полигон\n";
                            if (pGeometry.GeometryType == esriGeometryType.esriGeometryPolyline)
                                bstr += pF.AliasName + " : " + "Полилиния\n";
                        }
                        else
                            bstr += pF.AliasName + " : " + pRIO.Row.get_Value(fcount).ToString() + "\n";
                        fcount++;
                    }
                    pIO.Flash((m_application as IMxApplication).Display);
                    count = 0;
                    Form1 pForm = new Form1(bstr, pIO.Layer.Name);
                    pForm.Activate();
                    break;
               }
               else
               {
                    count++;
               }
            }
0 голосов
ответил 18 Май, 12 от kavkdv (440 баллов)
Для лучшего понимания дела:
private IApplication m_application;
        private IEditor m_editor = null;
        private IFeatureLayer pFL;
        private IDataset dataset;
        private IMap pMap;
        private IMxDocument pDoc;
        private IFeatureSelection pFS;
        private IFeatureCursor pFC;
        private ICursor pC;
        private IFeature pF;
        private IEnumLayer pEL;
        private UID pUID = new UID();
        private ISelectionSet pSS;
        private IArray pIDArray;
        private IIdentify pI;
        private IFeatureIdentifyObj pFIO;
        private IIdentifyObj pIO;
        private IPoint pP;
        private IRowIdentifyObject pRIO;
        private IGeometry pGeometry;
0 голосов
ответил 18 Май, 12 от kavkdv (440 баллов)
Новое обстоятельство, линии выбирает, но нужно очень близко близко приблизить, а инструмент "Идентифицировать" без приближения выбирает
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...