Работа с FDO в Visual Studio на языке C#

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 25 мар 2010, 12:55

Все верно. В FDO не все библиотеки можно подключать к проекту в Visual Studio, поскольку они не являются библиотеками с управляемым кодом (managed code). Подключаются только те, что я указал в списке в предыдущем сообщении...

MaZaika
Новоприбывший
Сообщения: 3
Зарегистрирован: 24 фев 2010, 19:26
Репутация: 0
Контактная информация:

Re: Работа с FDO в Visual Studio на языке C#

Сообщение MaZaika » 14 апр 2010, 16:11

Всё воюю с дипломом... Подскажите, пожалуйста, как получить доступ к атрибутивным данным формата SHP? Совсем ничего не получается... А скоро сдавать... :( До геометрии вроде получилось добраться, а дальше никак. А впереди ещё пространственные данные.
Может кто-нибудь даст экскурс в FDO? Никак он не поддаётся пониманию, а информации совсем почти нет по нему нигде.

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 15 апр 2010, 11:30

А что говорится в документации о классах PropertyDefinition, PropertyDefinitionCollection и унаследованных от них DataPropertyDefinition и DataPropertyDefinitionCollection?

skiller
Новоприбывший
Сообщения: 2
Зарегистрирован: 15 апр 2010, 20:48
Репутация: 0

Re: Работа с FDO в Visual Studio на языке C#

Сообщение skiller » 15 апр 2010, 20:55

Здравствуйте.

Та же проблема не могу никак получить атрибутивные данные в коллекцию.

добрался только до определенного значения:

while(reader.ReadNext())
{
reader.GetString("NAME");
}

но я думаю это как то можно сделать красивее, вот только как...
помогите плз!!

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 16 апр 2010, 08:41

Приветствую!

Для начала было бы неплохо, если бы Вы хотя бы частично включали в сообщения результаты Вашей работы, тогда я смог бы оценить ситуацию. Что именно не получается?

Давайте обратим внимание на следующий пример:

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

IConnection connection = null; //Установите здесь созданное Вами соединение.
ISelect select = connection.CreateCommand(CommandType.CommandType_Select);

using (IFeatureReader f_reader = select.Execute())
{
    ClassDefinition class_def = f_reader.GetClassDefinition();
    PropertyDefinitionCollection prop_def_collection = class_def.Properties;

    while (f_reader.ReadNext())
    {
        ... //Добавьте здесь блок кода для считывания свойств объектов класса.
    }
}
Теперь сравните его с тем, что у Вас уже есть... Что-то аналогичное? Можно ли отталкиваться от данного примера? Если да, то постараемся развить этот кусочек кода до той степени, чтобы он отвечал Вашим задачам.

skiller
Новоприбывший
Сообщения: 2
Зарегистрирован: 15 апр 2010, 20:48
Репутация: 0

Re: Работа с FDO в Visual Studio на языке C#

Сообщение skiller » 17 апр 2010, 09:02

Большое спасибо Jey,

У меня практически идентичный код, но дело в том, что значение каждого свойства необходимо считывать определенной функцией, например значение свойства типа string функцией f_reader.GetString(), int функцией GetInt32() и т.д.

например:

у нас есть shp файл со следующими свойствами:
FeatId типа int32 ;
NAME типа стринг;

теперь мы можем сделать так:

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

while(f_reader.ReadNext())
{
   f_reader.GetInt32("FeatId");
   f_reader.GetString("NAME");
}


тут приходится руками вызывать нужную функцию..
может как то можно автоматизировать этот процесс?

заранее спасибо!

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 19 апр 2010, 08:44

Тогда давайте добавим следующий кусочек кода:

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

PropertyDefinition prop_def = prop_def_collection[key]; //Используйте идентификатор свойства <key>.
DataPropertyDefinition data_prop_def = prop_def as DataPropertyDefinition;

if (f_reader != null)
{
    switch (data_prop_def.DataType)
    {
        case DataType.DataType_Int32:
        f_reader.GetInt_32(name); //Используйте наименование свойства <name>.
        break;

        case DataType.DataType_String:
        f_reader.GetString(name); //Используйте наименование свойства <name>.
        break;

        ...
    }
}
У меня этот фрагмент отрабатывает достаточно хорошо...

Ответить

Вернуться в «Общий - ПО»

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость