Официальный сайт геоинформационной системы (ГИС) ObjectLandОфициальный сайт геоинформационной системы (ГИС) ObjectLand
  
 
ПОИСК ПО САЙТУ:
yandex.ru
КАРТА САЙТА
 
главная / поддержка / форум
E-MAIL:ПАРОЛЬ: 
регистрация

Обсуждение

 Поиск объекта на карте на основе связанной табличной информацииПоиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Вторник, 7 сентября 2010, 06:19

На сайте в описании возможностей программы нашел
"поиск объекта на карте на основе связанной табличной информации "
Но прочитав справку раздел "Связь карт с таблицами", так и не нашел как это делается.
Укажите, пожалуйста, главу, где это описывается.
Нашел только как по объекту на карте посмотреть содержание табличной информации (тоесть ровно наоборот)

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Вторник, 7 сентября 2010, 07:17

Все. Извиняюсь. Нашел кнопки "выделить" и "отобразить".
Аможет подскажете как через com-интерфейс это сделать. Хоть в какую сторону смотреть.

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Вторник, 7 сентября 2010, 08:17

можете кинуть небольшой пример (на чем угодно) открытия карты и выделение объекта по ключу.
Например объект связан с таблицей. Инужно по данному значению из таблицы открыть карту, найти и выделить этот объект.

Дело в том, что принимается решение о покупке и надо быстро набросать тестовое приложение.

 Поиск объекта на карте на основе связанной табличной информации [ ObjectLand Support ]
Вторник, 7 сентября 2010, 12:10

Подобные примеры смотрите на странице: http://www.objectland.ru/product/fordeveloper/

Напомню, что приложение ObjectLand Explorer работает только с версией 2.6 (вариант для 2.7 в разработке).

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Среда, 8 сентября 2010, 09:33

Я нашел примеры с использованием набора записей.
А если не открывать его, например мне известен номер объекта - скажем 10.
Открыл окно темы. Возможно просто выделить там объект с номером 10?

 Поиск объекта на карте на основе связанной табличной информации [ ObjectLand Support ]
Среда, 8 сентября 2010, 11:23

Да, конечно

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Четверг, 9 сентября 2010, 03:23

Делаю так

strGDBPath="C:\CLR\City"
THEME_NAME ="Тема 1"
LAYER_NAME = "Строения"
FEATURETYPE_NAME = "Здание"
THEME_WIDTH = 400
THEME_HEIGHT = 400

Dim GDB,objGDB,objGDBTheme,objGDBLayer,objGDBFeatureType,objGDBFeaturesetCondition,objGDBThemeBrowser
Set GDB=CreateObject("GDBEngine.Application")
Set objGDB=GDB.OpenGDB(strGDBPath,1,"","","")
Set objGDBTheme = objGDB.Themes(THEME_NAME)

Set objGDBLayer = objGDBTheme.Layers(LAYER_NAME)
Set objGDBFeatureType = objGDBLayer.FeatureTypes(FEATURETYPE_NAME)
Set objGDBFeaturesetCondition = objGDBTheme.CreateFeaturesetCondition(0,7)
objGDBFeaturesetCondition.Layer=objGDBLayer
objGDBFeaturesetCondition.FeatureNumbers=1039
objGDBTheme.FeaturesetConditions.Append(objGDBFeaturesetCondition)

Set objGDBThemeBrowser = GDB.CreateThemeBrowser(objGDBTheme)
objGDBThemeBrowser.SetPosition 10, 10
objGDBThemeBrowser.SetSize 600, 600
objGDBThemeBrowser.Visible=true
objGDBThemeBrowser.Active=true
MsgBox 1

Тема открылась, но никакой объект не выделен.
Но если откруть в окошке связаннуб таблицу, выделить запись с кодом 1039, и потом нажаь кнопочку "выделить связанные объекты", то нужное здание выделяется.
Что я делаю не так? Помогите пожалуйста.

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Четверг, 9 сентября 2010, 07:43

Число 1039 это значения поля связи.
Уже два дня бьюсь... Штудирую справку и примеры, но ничего сделать не могу. Не ожидал, что это окажется такой нетривиальной задачей..

 Поиск объекта на карте на основе связанной табличной информации [ Objectland Support ]
Четверг, 9 сентября 2010, 12:51

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

1. Построить выборку, содержащую запись (записи) таблицы с заданным значением поля (полей) [пример 15].

2. Создать критерий селекции геометрий по выборке, полученной на предыдущем шаге [пример 45, критерий 5].

3. Установить критерий селекции геометрий в тему и открыть ее.

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Пятница, 10 сентября 2010, 06:58

То есть просто по внутреннему номеру, не открывая таблиц и выборок невозможно?

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Пятница, 10 сентября 2010, 09:13

Решил для удобства в vb.net
Так тоже не работает! Открывается тема, но объект не выделяется?
или нужно обязательно по запросу?

Module Module1

Sub Main()
Dim strGDBPath As String = "C:\CLR\City"
Dim THEME_NAME As String = "Тема 1"
Dim LAYER_NAME As String = "Строения"
Dim FEATURETYPE_NAME As String = "Здание"
Dim THEME_WIDTH As Integer = 400
Dim THEME_HEIGHT As Integer = 400

Dim gdb As GDBEngine, objGDB As GDBGeoDatabase, objGDBTheme As GDBTheme, _
objGDBLayer As GDBLayer, objGDBFeatureType As GDBFeatureType, _
objGDBFeaturesetCondition As GDBFeaturesetCondition
Dim objGDBThemeBrowser As GDBThemeBrowser
gdb = New GDBEngine
objGDB = gdb.OpenGDB(strGDBPath, 1, "", "", "")
objGDBTheme = objGDB.Themes.Item(THEME_NAME)



objGDBLayer = objGDBTheme.Layers.Item(LAYER_NAME)
objGDBFeatureType = objGDBLayer.FeatureTypes.Item(FEATURETYPE_NAME)
objGDBFeaturesetCondition = objGDBTheme.CreateFeaturesetCondition( _
GdbLogicalOps.gdbLogicalNone, _
GdbFeaturesetOperations.gdbFeaturesetByTable)
objGDBFeaturesetCondition.Layer = objGDBLayer


Dim objGDBTable As GDBTable
objGDBTable = objGDB.ExternalDatabases.Item("TestDB").Tables.Item(16)

objGDBFeaturesetCondition.Table = objGDBTable
objGDBFeaturesetCondition.FeatureType = objGDBFeatureType
objGDBTheme.FeaturesetConditions.Append(objGDBFeaturesetCondition)


objGDBThemeBrowser = gdb.CreateThemeBrowser(objGDBTheme)
objGDBThemeBrowser.SetPosition(10, 10)
objGDBThemeBrowser.SetSize(600, 600)
objGDBThemeBrowser.Visible = True
objGDBThemeBrowser.Active = True
Console.ReadKey()
End Sub

End Module

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Пятница, 10 сентября 2010, 10:08

Переделал на запрос - ничего не изменилось. В таблице (и в выборке), только одна запись, которая связана с объектом на этой теме.
Тема открывается, но объект не выделяется.

Imports GDBEngineLib
Module Module1

Sub Main()
Dim strGDBPath As String = "C:\CLR\City"
Dim THEME_NAME As String = "Тема 1"
Dim LAYER_NAME As String = "Строения"
Dim FEATURETYPE_NAME As String = "Здание"
Dim THEME_WIDTH As Integer = 400
Dim THEME_HEIGHT As Integer = 400

Dim gdb As GDBEngine, objGDB As GDBGeoDatabase, objGDBTheme As GDBTheme, _
objGDBLayer As GDBLayer, objGDBFeatureType As GDBFeatureType, _
objGDBFeaturesetCondition As GDBFeaturesetCondition
Dim objGDBThemeBrowser As GDBThemeBrowser
gdb = New GDBEngine
objGDB = gdb.OpenGDB(strGDBPath, 1, "", "", "")
objGDBTheme = objGDB.Themes.Item(THEME_NAME)



objGDBLayer = objGDBTheme.Layers.Item(LAYER_NAME)
objGDBFeatureType = objGDBLayer.FeatureTypes.Item(FEATURETYPE_NAME)
objGDBFeaturesetCondition = objGDBTheme.CreateFeaturesetCondition( _
GdbLogicalOps.gdbLogicalAnd, _
GdbFeaturesetOperations.gdbFeaturesetByQuery)
objGDBFeaturesetCondition.Layer = objGDBLayer



Dim testdb As GDBExternalDatabase = objGDB.ExternalDatabases.Item("TestDB")
Dim objGDBQuery As GDBQuery = testdb.Queries.Item("ttt")
objGDBFeaturesetCondition.Query = objGDBQuery
objGDBFeaturesetCondition.FeatureType = objGDBFeatureType
objGDBTheme.FeaturesetConditions.Append(objGDBFeaturesetCondition)


objGDBThemeBrowser = gdb.CreateThemeBrowser(objGDBTheme)
objGDBThemeBrowser.SetPosition(10, 10)
objGDBThemeBrowser.SetSize(600, 600)
objGDBThemeBrowser.Visible = True
objGDBThemeBrowser.Active = True
Console.ReadKey()
objGDB.Close()
gdb.Quit()
End Sub

End Module

 Поиск объекта на карте на основе связанной табличной информации [ Objectland Support ]
Пятница, 10 сентября 2010, 13:51

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

objGDBThemeBrowser.Featureset = objGDBTheme.OpenFeatureset()

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Понедельник, 13 сентября 2010, 02:57

Спасибо!

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Понедельник, 13 сентября 2010, 05:32

Можно еще один вопрос?

Хотел добавить, чтоб после открытия темы, окно центрировалось на выделенный объект.
Делаю так
objGDBThemeBrowser.ExecuteCommand(GdbBrowserCommands.gdbBrowserCmdFeaturesetShowAll)

Выдает ошибку
"window" not understood

Если же в открытом окне выбрать меню "Селекция\Показать все", то все нормально центрируется.

Делал тоже самое в c++builder
objGDBThemeBrowser.OleFunction("ExecuteCommand",29);
Там все нормально срабатывет, если этот объект в видимых пределах окна.
Если он за границей окна, то выдает ошибку. Но команда меню "Селекция\паказать все" все равно нормально срабатывает.

Как добиться эффекта выполенния команды "Селекция\Показать все"?
Я выполняю не ту команду?

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Понедельник, 13 сентября 2010, 05:40

Уточнил. В c++builder ошибка выдается тоже в любом случае.

 Поиск объекта на карте на основе связанной табличной информации [ Роман Ларченко ]
Понедельник, 13 сентября 2010, 05:53

Все! Нашел. Извняюсь за беспокойство.
Dim feature As GDBFeature = objGDBThemeBrowser.Featureset.Feature
objGDBThemeBrowser.Theme.WindowPosToFeature(feature, 1, 1)

 Поиск объекта на карте на основе связанной табличной информации [ Александр ]
Среда, 19 января 2011, 19:03

Немножко поздно, но все же есть вопросы по данной теме.
Пробовал делать как описано выше.
Результат не радует.
У меня на С# возникают следующая проблема:
я знаю внутренний номер объекта.
создал выборку в которой должен выбираться этот объект (выборка сохраняется в ВБД нормально)
пытаюсь программно выделить объект, возникает ошибка "records pocket" not understood в строке GDBFeatureset fet = gdbTheme.OpenFeatureset(true);
не могу разобраться что не так делаю, все вроде из примера...

И еще вопрос, можно ли выделить как нибудь объект при просмотре темы, зная его внутренний номер и используя "совместный доступ" т.е.
objGDB = (GDBGeoDatabase)gdbEngine.OpenGDB(...,(int)GdbOpenModes.gdbOpenShared,"", "", "");

 Поиск объекта на карте на основе связанной табличной информации [ Objectland Support ]
Пятница, 21 января 2011, 10:34

Объект можно выделить в теме по его внутреннему номеру с помощью критерия селекции (выше как раз есть пример его использования). Почитайте описание метода Theme::CreateFeaturesetCondition (http://www.objectland.ru/support/doc/comapi/Theme_CreateSelectionCondition.html) и обратите внимание на операцию селекции gdbFeaturesetByFeatureNumbers.

P.S. Доступ к ГБД никакой роли не играет при селекции геометрий.

 Поиск объекта на карте на основе связанной табличной информации [ Александр ]
Пятница, 4 февраля 2011, 10:43

Спасибо большое за направление на путь истинный. Почти все заработала.
Возникла проблема с командной "Селекция\Показать все" в C#.
objGDBThemeBrowser.ExecuteCommand(GdbBrowserCommands.gdbBrowserCmdFeaturesetShowAll); - работате, но постоянно выдает исключение "stack overflow".

GDBFeature feature = objGDBThemeBrowser.Featureset.Feature;
objGDBThemeBrowser.Theme.WindowPosToFeature(feature, 1, 1); - в C# не работает или может я не в том месте вызываю её???

Код выглядит так:
objFeaturesetCondition.FeatureNumbers = objectID;
gdbThemeBrowser.Theme.FeaturesetConditions.Append(objFeaturesetCondition);
gdbThemeBrowser.Featureset = objTheme.OpenFeatureset(true);
GDBFeature feat = gdbThemeBrowser.Featureset.Feature;
if (feat != null)
gdbThemeBrowser.Theme.WindowPosToFeature(feat, 1, 1);
//feat не равен null, т.е. команда выше, срабатывает. проверял. но эффекта 0

 Поиск объекта на карте на основе связанной табличной информации [ Objectland Support ]
Понедельник, 7 февраля 2011, 17:29

Проверьте пожалуйста, что возвращает метод gdbThemeBrowser.Featureset.FeatureCount. Могу предположить, что возвращается 0 из-за того что в метод objTheme.OpenFeatureset(true) передается истина. В Вашем случае надо передавать false. Почитайте обязательно описание метода objTheme.OpenFeatureset.

Ответить

Знаком «*» отмечены обязательные для заполнения поля.
Ваше имя:  *
Адрес электронной почты:  
Тема:  *
Сообщение:
 *
Подтверждение:
(не требуется для зарегистрированных пользователей)
 *
 



Copyright © 1999–2022 ГИС ObjectLand
ГИС ObjectLand ® ООО «Радом-АйТи»
Информация о лицензировании
главная | о продукте | скачать | купить | поддержка | новости