Вновь поля...

0 голосов
спросил 05 Сен, 05 от Гость (210,080 баллов) в категории Программные продукты Esri

Доброго времени суток...

Вот такой вот вопрос:

Все вопросы начали возникать когда я начал копирование объектов из одного слоя в другой. (из одного шейп-файла в другой) . Для самого копирования я использовал исходники примера, данного в  ArcGIS Developer Help'e в разделе Примеры(Samples)> Geodatabase> Creating and Converting Data> Insert features using an insert cursor.

Сначала всё на вид работало, но заметив, что объекты в "конечном слое" не наследуют параметры таблицы атрибутов(из "исходного слоя") я понял, что всё не так уж просто.

"Не наследуют" - объекты на карте ЕСТЬ, но их атрибутов НЕТ

Отмечу, что в исходном слое у каждого объекта таблица атрибутов состоит из 9 полей. Я создал, при помощи, ArcCatalog'a шейп-файл с названием Polygon(для объектов полигонального типа) и всеми 9 полями. Как оказалось копирование объектов проходило теперь полностью, то есть появлялись объеты на карте и соответственно при идентификации объекта, с помощью кнопки Идентифицировать, высвечивались все 9 полей, заполненные верными исходными данными из "Исходного слоя".

Но (Увы) ЕСТЬ слои у объектов которых количество полей равно 10 или 8 или их названия не совпадают, то есть например, 9 полей, а название 2 поля совсем другое ежели у конечного слоя.

При данном раскладе наблюдалось следующее...

В конечном слое у полей атрибутов появлялась только та информация, которая содержалась в полях индексы и названия которых совпадали как в исходном слое, так и в конечном слое, но если же поле из исходного слоя не совпадало с полем из конечного слоя по имени, индексу - информация не копировалась.

Итак мой Вам вопрос, гопода:

Как изменить количество полей? и Как изменить название поля?

Заранее блогадарен за ответы.

 

1 Ответ

0 голосов
ответил 05 Сен, 05 от DenSer1 (660 баллов)

Доброго...

Указанный пример не проверяет "одинаковость" начального и конечного слоёв. В этом, наверное, всё и дело.

Попробуйте просто перед началом копирования проверить наличие всех полей в конечном слое, пробежав циклом по iFields взяв его у IFeatureClass (начальный слой), дальше понятно: если есть такое поле, то ничего, если нет, то надо добавить (IFeatureClass.AddField).

После этого можно смело всавлять буфера и не забывать про Flush.

Как для добавления, так и для изменения поля необходимо использовать IFieldEdit. В help'e есть все примеры.

Надеюсь поможет.

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...