get_value функции в IFeatureCursor - PullRequest
       45

get_value функции в IFeatureCursor

0 голосов
/ 14 октября 2019

Я пытаюсь прочитать атрибут «POSTCODE» функций в IFeatureCursor. FID успешно прочитан, но «POSTCODE» не удалось. Ошибка времени выполнения 'Ожидаемое поле не найдено или не может быть получено должным образом. Ценю ваш совет. Пол

   private void test2(IFeatureCursor pFeatc1)
    {
        IFeature feature = null;
        IFields pFields;
        int ctcur = 0;
        while ((feature = pFeatc1.NextFeature()) != null)
        {
            pFields = feature.Fields;
            int indxid = pFields.FindField("FID");
            int indxpost = pFields.FindField("POSTCODE");
            object valu = feature.get_Value(indxid);
            string valupost = feature.get_Value(indxpost);
            string aValu = Convert.ToString(valu);
            Debug.WriteLine("FID: " + aValu + " Postcode: " + valupost);
            ctcur++;
            feature = pFeatc1.NextFeature();
        }
        MessageBox.Show("count cursor = " + ctcur);
    }

1 Ответ

0 голосов
/ 18 октября 2019

Я изменил программу и успешно прочитал атрибут функции «POSTCODE». Я добавил IFeatureClass.Search (queryFilter, true), чтобы снова найти объект по FID и сохранить его в курсоре, а затем использовать «feature.get_Value» для чтения атрибута. Пожалуйста, смотрите мой обновленный код ниже. Спасибо.

   private void test2(IFeatureCursor pFeatc1)
    {
        IMxDocument mxdoc = ArcMap.Application.Document as IMxDocument;
        IMap map = mxdoc.FocusMap;
        IFeatureLayer flayer;
        IMaps pMaps = mxdoc.Maps;
        for (int i = 0; i <= pMaps.Count - 1; i++)
        {
            map = pMaps.get_Item(i);
            IEnumLayer pEnumLayer = map.get_Layers(null, true);
            pEnumLayer.Reset();
            ILayer pLayer = pEnumLayer.Next();
            while (pLayer != null)
            {
                if (pLayer.Name == "AddrKey")
                {
                    Debug.WriteLine("Layer: " + pLayer.Name);
                    flayer = (IFeatureLayer)pLayer;
                    IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;
                    IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;

                    IFeature feature = null;
                    IFields pFields;
                    while ((feature = pFeatc1.NextFeature()) != null)
                    {
                        pFields = feature.Fields;
                        int indx = pFields.FindField("FID");
                        object valu = feature.get_Value(indx);
                        string sFID = Convert.ToString(valu);
                        IQueryFilter queryFilter = new QueryFilter();
                        queryFilter.WhereClause = ("FID = " + sFID);
                        Debug.WriteLine("FID: " + sFID);
                        queryFilter.SubFields = "POSTCODE";
                        int fieldPosition = pFeatureClass.FindField("POSTCODE");
                        IFeatureCursor featureCursor = pFeatureClass.Search(queryFilter, true);
                        while ((feature = featureCursor.NextFeature()) != null)
                        {
                            MessageBox.Show(feature.get_Value(fieldPosition));
                        }
                        feature = pFeatc1.NextFeature();
                    }
                }
               pLayer = pEnumLayer.Next();
            }
        }
    }
...