Вопрос специалистам VBScript

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Geology
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 сен 2020, 11:15
Репутация: 1
Откуда: Чита

Вопрос специалистам VBScript

Сообщение Geology » 21 сен 2020, 11:52

Уважаемые форумчане, доброго времени суток.
Требуется помощь с написанием кода на VBScript.
Кратко объясню проблему:
Имеется некая табличная база данных с множеством строк, столбцов и т.д.
Нужно отобразить в надписи на карте только те данные, которые больше определенных значений, причем из нескольких столбцов (от 3 до 10) и если хотя бы одно из них больше заданного значения, то отобразить его на карте, исключив те которые меньше, если таких значений нет то ничего отображать не надо.
Например: Столбец1 содержит номер, столбец2 числа от 0.0005 до 99, тоже Столбец3, а Столбец4 содержит числа от
1 до 9999.
Для Столбца2 нужно выбрать числа больше или равно 0,1, для Столбца3 >=1, для Столбца4 нужно чтобы сначала их содержимое было сокращено на тысячу, т.е. выбиралось не так как они находятся в базе (1.5, 4.5, 15, 1000), а как 0.0015, 0.0045, 0.015 и 1.0, и далее уже выбрать числа >=0,1.
Возможно ли написать код на VBScript для такой выборки? Буду благодарен если кто подскажет как именно.

Ivor
Завсегдатай
Сообщения: 345
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 102
Откуда: Иркутск

Re: Вопрос специалистам VBScript

Сообщение Ivor » 22 сен 2020, 00:30

Для этого не нужен скрипт. Это делается определяющим запросом (вроде так в русской версии называется, в английской это Definition Query) в свойствах слоя. Пишете там что-то вроде

Код: Выделить всё

("ИмяСтолбца1" >= 0.1) OR ("ИмяСтолбца3" >= 1) OR ("ИмяСтолбца3" / 1000 >= 0.1) 
и получаете искомое. Это при условии, что таблица - атрибутивная у шейпа, конечно.
А вообще для этих целей нужно изучить SQL, хотя бы раздел про оператор выборки (SELECT).

Да, если речь идет про подписи объектов - то же самое делается во вкладке "Подписи" свойств слоя. Только нужно выбрать метод подписывания по классам, и в "SQL Query" задать условия отбора.

В любом случае это будет работать быстрее чем код VBScript, причём на больших наборах данных - сильно быстрее

Geology
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 сен 2020, 11:15
Репутация: 1
Откуда: Чита

Re: Вопрос специалистам VBScript

Сообщение Geology » 22 сен 2020, 03:43

Спасибо за советы. Таблица атрибутов на экране отображается пустой, хотя по факту подписи из БД отображаются. Просто раньше баловался с программированием поэтому ближе и понятнее Бейсик, а что за зверь этот SQL? Придётся покопаться. Ещё раз благодарю за отклик. Всего доброго.

Ivor
Завсегдатай
Сообщения: 345
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 102
Откуда: Иркутск

Re: Вопрос специалистам VBScript

Сообщение Ivor » 22 сен 2020, 04:39

Geology писал(а):
22 сен 2020, 03:43
Таблица атрибутов на экране отображается пустой, хотя по факту подписи из БД отображаются
Тогда здесь явно что-то не так. Что за БД, что за слои, как они связаны с БД и как именно подписываются объекты?

Ivor
Завсегдатай
Сообщения: 345
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 102
Откуда: Иркутск

Re: Вопрос специалистам VBScript

Сообщение Ivor » 22 сен 2020, 05:17

Geology, да, SQL - распространённый язык взаимодействия с базами данных. А поскольку ГИС - это в первую очередь БД (в векторной своей части, по крайней мере), то хотя бы базовое знание SQL практически обязательно для продуктивной работы. Диалекты языка SQL существуют разные, но база - оператор select в простых применениях - практически едина.

Geology
Новоприбывший
Сообщения: 3
Зарегистрирован: 21 сен 2020, 11:15
Репутация: 1
Откуда: Чита

Re: Вопрос специалистам VBScript

Сообщение Geology » 23 сен 2020, 06:29

Да спасибо большое, буду осваивать, SQL действительно проще чем сценарии. База данных подгружена .xls с сервера баз данных Acces. Но один момент все же хотел уточнить. Кроме того что надо подписать объекты на карте в соответствии с приведенной выборкой, нужно ещё что бы они отображались разным цветом (красный, синий, зеленый) в одной строчке, друг за другом. Думаю все же лучше написать код на VBScripte, потому что подписывая каждый класс отдельно не удается выровнять надпись в одну строчку. Но в Бейсике то же не Ас. Поэтому и прошу подсказку именно по поводу использования операторов if ... else и т.д. Как правильно написать код в этом случае?
Вернее код я написал, в отдельности для каждой надписи, как это объединить и что бы работало и с выборкой и цветами и другими параметрами.
Примерно так:
Function FindLabel ([Ст1],[Ст2]) if [Ст2] >=0.1 then FindLabel = [Ст1] & " "& "<CLR red = '255'>" & [Ст2]& "</CLR>" else FindLabel = [Ст1] end if

End Function

Но это для одного столбца, нужно для нескольких, причем с разными допами (о них не пишу, роли не играет), требуется чтобы были проверены все столбцы ( Ст2,Ст3,Ст4) на задаваемые условия и в случае выполнения хотя бы одного из них, возвращал именно (только) этот параметр, плюс столбец Ст1.

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Вопрос специалистам VBScript

Сообщение gamm » 23 сен 2020, 14:26

Geology писал(а):
23 сен 2020, 06:29
База данных подгружена .xls с сервера баз данных Acces.
xls - это не база, а просто таблица Ёкселя. Подключите Access, в нем нормальный SQL есть ...

Ответить

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

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

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