Создание кнопки.

0 голосов
спросил 07 Май, 09 от Gr.Daniil (1,840 баллов) в категории Программные продукты Esri
Здравствуйте! Подскажите пожалуйста, хочу создать кнопку, которая будет тянуть названия улиц с линейного слоя и номера домов с полигонального слоя в СДЕ. Я ни разу еще не создавал кнопок, поэтому если можно поподробнее, мне бы сам порядок создания. Заранее спасибо за помощь!

8 Ответы

0 голосов
ответил 07 Май, 09 от geologic (39,860 баллов)
Создание кнопок есть и в Help, и в FAQ, вот соответствующий раздел:     про тулбары, кнопки и подключение скриптов начинающим.

А уж как сам скрипт сочинять, это отдельные книжки надо читать, и как следует ;)

    
0 голосов
ответил 09 Май, 09 от Gr.Daniil (1,840 баллов)

А если после нажатия кнопки необходимо, чтобы появлялась форма для введения критериев поиска и отображения результатов поиска в этой форме, а также выделения объекта поиска на карте, то лучше создать ее в Visual Basic?

0 голосов
ответил 09 Май, 09 от TDenis (42,620 баллов)
Это уж как вам удобнее.
Можно написать скрипт на vbs во встроенном редакторе, а можно написать расширение (и сделать инсталлятор), например, в MS Visual Studio на VB.Net или C#. В последнем случае, можно, к примеру, делать формы вообще на WPF и со всякими удобностями навроде LINQ, т.е. можно использовать кучу возможностей VS, включая командную разработку.
Другими словами, писать программы удобнее в VS, но в некоторых случаях не очень удобно их распространять (надо регистрировать в системе своё расширение). И подправить установленную у пользователя программку уже не получится - надо будет перекомпилировать проект на компьютере, где установлена VS.

Смотрите, как вам удобнее, так и делайте.
0 голосов
ответил 10 Май, 09 от Gr.Daniil (1,840 баллов)
Значит подключить форму к базе данных Oracle через встроенный редактор можно? Просто после Delphi немного непонятно, там навесил компонент для связи с внешней СУБД и все. А здесь посмотрел, компонентов нет. А не подскажете, не используя компоненты, как посредством кода законнектиться к Oracle? буду признателен. Еще раз, огромное спасибо за помощь!
0 голосов
ответил 10 Май, 09 от TDenis (42,620 баллов)
Вам что конкретно надо, связываться с SDE или брать данные также из прочих таблиц СУБД?
Если я правильно вам понял, то скорее всего вы хотите сделать следующее. Хотите создать кнопку в ArcMap, если щелкнуть по которой, то должно появиться окошко, где будут перечислены все названия улиц и соответствующие им номера домов.
Вы хотите подсвечивать объекты на карте при щелчке по его названию? Так что ли?


Если всё верно, то подключайте ваши SDE-слои (улицы, дома) в проект, и потом будете просто читать данные из слоёв (проходить по ILayer или IFeatureLayer с помощью ICursor или IFeatureCursor).
При этом, в принципе, неважно, откуда слой - из SDE (и на чем это sde, на sql server, oracle, db2, postgre) или же это простой шейп-файл, потому что интерфейсы, которые вы, скорее всего, будете использовать, не зависят от типа источника данных. И в этом случае вообще не надо никаких датасетов, конекшнов и прочих компонентов для связи с СУБД. Важно лишь то, что у вас в проекте подключен слой. А вот как он туда попал - для чтения, в принципе, неважно.
Если же вам надо читать данные не из SDE-слоев, а прямо из СУБД, то вы можете написать свою кнопку (в виде .dll) и на Delphi, используя привычные вам компоненты.
Давайте что ли для начала разберёмся, что конкретно вы хотите сделать)
0 голосов
ответил 11 Май, 09 от Gr.Daniil (1,840 баллов)
Вы абсолютно правильно меня поняли, только на форме дополнительно должен быть еще выпадающий список, где нужно выбирать наименование населенного пункта (сам город, либо поселок в области). То есть список бы отображал поле NAME таблицы NP (населенный пункт). После выбора поселка, ниже бы отображался бы список улиц данного населенного пункта, то есть поле NAME таблицы STR. Таблица STR связана с таблицей NP полем NPID. После выбора из списка улицы, еще ниже отображался список домов на этой лице, поле NOMER таблицы DOM. Связка с таблицей STR полем STRID. Данные надо брать только из СДЕ слоев, они содержат всю необходимую информацию. А уже при выборе номера дома в списке, объект бы приближался и подсвечивался бы на экране.
А можно поподробнее про ILayer, IFeatureLayer, ICursor, IFeatureCursor, про считывание данных из слоев?
0 голосов
ответил 11 Май, 09 от TDenis (42,620 баллов)
Почитайте вот эту главу, наверное кое-что прояснится:
http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=Sample_VBA_code

На статью про то, как подключать кнопку, уже давали ссылку:
http://www.geofaq.ru/art/1addscript.shtm
Статья хорошая, с картинками :-)

Что касается конкретных объектов и интерфейсов - в редакторе макросов должна работать F1. Если установите интеграцию с visual studio, то справка esri интегрируется в заранее установленную справку msdn. Как там насчёт delphi - не интересовался. Ну и накрайняк можно воспользоваться поиском вот здесь:
http://resources.esri.com/arcgisdesktop/

Вам для начала, наверное, надо научиться делать следующее:
- определять документ (IMxDocument), определять активную карту (IMap);
- на карте находить слой (IFeatureLayer, если это слой с геометрией, т.е. он может быть отображен на карте; ILayer - в более общем случае) по его имени;
- для определенного слоя получать курсор (IFeatureCursor), который бы проходил по всем записям слоя.
- находить нужное поле (IField) в таблице слоя;
- проходить курсором по всем записям слоя, выписывая значения из определенного поля.

Это базовые вещи для ArcGIS, которые надо понимать как работают вне зависимости от того, на чем вы будете кодить. Что бы вы не выбрали, везде будут использоваться эти же интерфейсы (за небольшими отличиями).
Посмотрите, почитайте, попробуйте, если что не будет получаться - пишите.
0 голосов
ответил 13 Май, 09 от Gr.Daniil (1,840 баллов)

Я начал читать, информации очень много. Можете только подсказать, с чего начать писать код. Буду признателен, дело в том, что время поджимает. Кнопка создана, форма появляется.

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...