Страница 1 из 1

Формы VBA в ArcMap

Добавлено: 23 май 2011, 12:40
esmo
Ищу совета в реализации следующей задачи:
Есть точечная тема с индексами точек и таблица, где каждому индексу соответствуют записи (индекс, дата, значение). Хочется сделать так, чтобы при нажатии на точку выскакивала форма (например VBA), в которой для данного индекса можно составить SQL-запрос на выбор определенных данных из таблицы. Запрос должен открываться в отдельном окне.
Как это сделать на MySQL+PHP+какой-нибудь карт. API я себе представляю, а в ArcMap почему-то не представляю. Подскажите, пожалуйста.

Re: Формы VBA в ArcMap

Добавлено: 23 май 2011, 14:01
gimran
help.arcgis.com

то есть как понял: щелчок по точке в ArcMap — получение индекса из таблицы атрибутов для данной точки — «некая sql-обработка».
а теперь вопрос: таблица из сторонней программы или запрос из таблицы атрибутов в ArcMap?

можете привести примерную схему работы того, что Вам нужно?
желательно пример приближенный к реальности

Re: Формы VBA в ArcMap

Добавлено: 23 май 2011, 15:00
esmo
запрос из таблицы в базе геоданных (конкретно - таблица Access). Схема - щелкаем на точке из шейпа, получаем ее индекс, по этому индексу строим некий запрос в форме, по выполнении запроса получаем новую таблицу с данными. Проблема в том, что задача поставлена так и никак иначе, а то я бы лучше в онлайне сделал.

Re: Формы VBA в ArcMap

Добавлено: 24 май 2011, 09:06
anvg
esmo
Если индекс (idx) получен, то средствами ADO/DAO выполнить запрос к таблице Access.
Если надо средствами ArcObject, то:
создаёшь новый AcessWorkspaceFactory для интерфейса IWorkspaceFactory
открываешь базу в интерфейс IFeatureWorkspace
IWorkspaceFactory.OpenFromFile("d:\path.mybase.mdb", 0)
открываешь таблицу в интерфейс ITable
IFeatureWorkspace.OpenTable("MyTableName")
Создаёшь QueryFilter для интерфейса IQueryFilter
настраиваешь фильтр на выборку из таблицы IQueryFilter.WhereClause = "MyFieldName = " & CStr(idx)
получаешь строку(и) из таблицы в ICursor
ITable.Search(IQueryFilter, False)
получаешь (или нет) строку в IRow
ICursor.NextRow
далее выводишь значения в форму через IRow.Value(FieldNumber)

Re: Формы VBA в ArcMap

Добавлено: 24 май 2011, 10:51
esmo
anvg
спасибо за очень подробный ответ! буду пробовать! два маленьких вопроса: индекс я получаю из таблицы точечной темы с помощью инструмента Hyperlink? И если база данных подключена к проекту, или является частью базы геоданных, что-нибудь меняется?

Re: Формы VBA в ArcMap

Добавлено: 25 май 2011, 02:06
anvg
esmo
с помощью инструмента Hyperlink?
Честно говоря, не знаю как при помощи этого инструмента получить в коде индекс. Сам делал UIToolControl, который имеет события MouseUp и MouseDown, в которые передаются экранные координаты. Через DisplayTransformation получаем по ним IPoint в координатах карты. Далее, при помощи ITopologicalOperator.Buffer получаем полигон для пространственной выборки объектов. Далее для FeatureClass интересующего слоя создаём ISpatialFilter с геометрией буфера (пространственные отношения для поиска задаём в ISpatialFilter.SpatialRel) и выполняем пространственный запрос IFeatureClass.Search получаем IFeatureCursor, содержащий объект(ы). Перебираем через IFeatureCursor.NextFeature, получив IFeature. Доступ к значениям атрибутивной таблицы IFeature.Value(ИндексПоля).
И если база данных подключена к проекту, или является частью базы геоданных, что-нибудь меняется?
В принципе, нет.
Можно только добраться до таблицы несколько по другому.
Получить через IMxDocument FocusMap (текущий Data Frame), поддерживающий ITableCollection и перебрать подключенные таблицы поиском нужной по имени, для чего очередную таблицу приводить к интерфейсу IDataset, чтобы получить её имя.

Re: Формы VBA в ArcMap

Добавлено: 15 фев 2012, 11:11
Алексей Дорофеев
anvg писал(а):интерфейс IFeatureWorkspace
А с какими форматами таблиц этот интерфейс может работать?