Формы VBA в ArcMap

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
esmo
Участник
Сообщения: 73
Зарегистрирован: 03 сен 2007, 12:40
Репутация: 3
Откуда: Москва
Контактная информация:

Формы VBA в ArcMap

Сообщение esmo » 23 май 2011, 12:40

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

Аватара пользователя
gimran
Гуру
Сообщения: 1902
Зарегистрирован: 07 июл 2010, 15:43
Репутация: 242
Откуда: Уфа

Re: Формы VBA в ArcMap

Сообщение gimran » 23 май 2011, 14:01

help.arcgis.com

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

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

esmo
Участник
Сообщения: 73
Зарегистрирован: 03 сен 2007, 12:40
Репутация: 3
Откуда: Москва
Контактная информация:

Re: Формы VBA в ArcMap

Сообщение esmo » 23 май 2011, 15:00

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

anvg
Новоприбывший
Сообщения: 13
Зарегистрирован: 29 мар 2011, 08:58
Репутация: 0

Re: Формы VBA в ArcMap

Сообщение anvg » 24 май 2011, 09:06

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)

esmo
Участник
Сообщения: 73
Зарегистрирован: 03 сен 2007, 12:40
Репутация: 3
Откуда: Москва
Контактная информация:

Re: Формы VBA в ArcMap

Сообщение esmo » 24 май 2011, 10:51

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

anvg
Новоприбывший
Сообщения: 13
Зарегистрирован: 29 мар 2011, 08:58
Репутация: 0

Re: Формы VBA в ArcMap

Сообщение anvg » 25 май 2011, 02:06

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, чтобы получить её имя.

Алексей Дорофеев
Участник
Сообщения: 98
Зарегистрирован: 20 ноя 2010, 14:37
Репутация: 0

Re: Формы VBA в ArcMap

Сообщение Алексей Дорофеев » 15 фев 2012, 11:11

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

Ответить

Вернуться в «ArcGIS»

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

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