| Обсуждение |
| COM-интерфейс [ Po ]Пятница, 12 ноября 2010, 12:48
Нужна помощь....
В GDBThemeBrowser я выбираю какой либо объект, мне нужно получить все данные об этом объекте, как мне это сделать.
На основе примера из ObjectLand.SamplesOfCOMUsing.2.7.CSharp.Rus.zip №047 получаю данный о слои и типе объекта, но этого не достаточно. И еще вопрос, можно ли из моей программы в GDBThemeBrowser выделить объект, зная его идентификатор?
Очень надеюсь на вашу помощь. |
|
| [ ObjectLand Support ]Пятница, 12 ноября 2010, 15:40
Все данные которые можно получить об объекте можно прочитать здесь:
http://objectland.ru/support/doc/comapi/Geometry.html
Выделить объект по идентификатору можно. Вот примерный код на VB.NET:
objFeaturesetCondition = objTheme.CreateFeaturesetCondition(GdbLogicalOps.gdbLogicalNone, GdbFeaturesetOperations.gdbFeaturesetByFeatureNumbers)
objFeaturesetCondition.Layer = objTheme.Layers.Item("Слой")
objFeaturesetCondition.FeatureNumbers = 6 ' внутренний номер
objTheme.FeaturesetConditions.Append(objFeaturesetCondition)
objThemeBrowser.Featureset = objTheme.OpenFeatureset()
Рекомендуем посмотреть похожую тему на форуме:
http://www.objectland.ru/support/forum/2821/ |
|
| [ Ро ]Суббота, 13 ноября 2010, 12:58
читал http://objectland.ru/support/doc/comapi/Geometry.html
не пойму как можно узнать к примеры название выделенной улицы в objThemeBrowser
Может я плохо читал "Geometry" и что-то пропустил?
***
Спасибо большое за пример.
Но вот есть небольшие проблемы. на С# срабатывает только один раз.
при попытки выделить объект еще раз, на строке objTheme.FeaturesetConditions.Append(objFeaturesetCondition); выдает ошибку "Недопустимый логический оператор" не пойму чего он хочет :( |
|
| [ ObjectLand Support ]Суббота, 13 ноября 2010, 14:14
Обратите внимание на раздел "Связь с записями" и на метод OpenRecordset (http://objectland.ru/support/doc/comapi/Geometry_OpenRecordset.html). Получив привязанную запись, Вы сможете получить у нее и название улицы (если конечно такое поле существует).
Проверьте, что Вы каждый раз создаете создаете критерий селекции заново, т.е. выполняется строчка:
objFeaturesetCondition = objTheme.CreateFeaturesetCondition(GdbLogicalOps.gdbLogicalNone, GdbFeaturesetOperations.gdbFeaturesetByFeatureNumbers) |
|
| [ Po ]Воскресенье, 14 ноября 2010, 22:36
проверил, objFeaturesetCondition создается каждый раз, все вроде нормально с ним.
на всякий случай решил написать на VB.NET, та же самая ошибка на той же строке.
мой метод:
private void button1_Click(object sender, EventArgs e) {
objThem = objGDBThemeBrowser.Theme;
GDBFeaturesetCondition objFeaturesetCondition = objGDBTheme.CreateFeaturesetCondition(GdbLogicalOps.gdbLogicalNone, GdbFeaturesetOperations.gdbFeaturesetByFeatureNumbers);
objFeaturesetCondition.Layer = objThem.Layers.Item("Улицы");
objFeaturesetCondition.FeatureNumbers = 7;
objThem.FeaturesetConditions.Append(objFeaturesetCondition);
objGDBThemeBrowser.Featureset = objThem.OpenFeatureset(true);
} |
|
| [ Ро ]Понедельник, 15 ноября 2010, 14:36
Проблема решена путем добавления строк:
if (objGDBThemeBrowser.Theme.FeaturesetConditions.Count > 0) {
objGDBThemeBrowser.Theme.FeaturesetConditions.Delete(1);
}
перед вызовом метдоа
objThem.FeaturesetConditions.Append(objFeaturesetCondition);
Но вот вопрос по выборке всех свойств выделенного объекта, остается открытым.
Как-то все слишком замудрено:(
Неужели нельзя просто взять нужно поле выделенного объекта?
Без создания там всяких запросов. и указания имени привязанной таблицы.
Пишу программу, которая должна работать с любой картой OL. Без указания имен таблиц, слоев, типов объектов....
основная часть готова, осталось всего ничего! получить данные о выделенном объекте. |
|
| [ Ро ]Понедельник, 15 ноября 2010, 15:08
Проблема решена путем добавления строк:
if (objGDBThemeBrowser.Theme.FeaturesetConditions.Count > 0) {
objGDBThemeBrowser.Theme.FeaturesetConditions.Delete(1);
}
перед вызовом метдоа
objThem.FeaturesetConditions.Append(objFeaturesetCondition);
Но вот вопрос по выборке всех свойств выделенного объекта, остается открытым.
Как-то все слишком замудрено:(
Неужели нельзя просто взять нужно поле выделенного объекта?
Без создания там всяких запросов. и указания имени привязанной таблицы.
Пишу программу, которая должна работать с любой картой OL. Без указания имен таблиц, слоев, типов объектов....
основная часть готова, осталось всего ничего! получить данные о выделенном объекте. |
|
| [ ObjectLand Support ]Понедельник, 15 ноября 2010, 15:25
Ошибка возникает из-за того, что Вы каждый раз добавляете критерий селекции, а он уже есть в коллекции objThem.FeaturesetConditions после первой селекции.
Поэтому чтобы селектировать второй раз, достаточно выолнить уже одну строчку:
objThemeBrowser.Featureset = objTheme.OpenFeatureset |
|
ОтветитьЗнаком «*» отмечены обязательные для заполнения поля. |
| |