Помощь по написанию скрипта

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Anton0310
Новоприбывший
Сообщения: 5
Зарегистрирован: 03 сен 2017, 16:24
Репутация: 1
Откуда: Откуда

Помощь по написанию скрипта

Сообщение Anton0310 » 08 сен 2017, 14:03

Всем добрый день! Пишу скрипт, который связывает таблицы и переносит данные из одной таблицы в другую. Так вот возник такой вопрос: возможно ли создать поле ввода данных, чтобы при выполнении скрипта он при необходимости в окне ввода данных просил пользователя ввести какое-то число или текст или выбрать данные из ниспадающего списка? Скрипт я запускаю кнопкой на панели инструментов. Программирование начал изучать всего несколько недель назад, так что и вопросы соответствующие :D

Или может быть подскажете где почитать об этом.

5Nap
Участник
Сообщения: 84
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 31

Re: Помощь по написанию скрипта

Сообщение 5Nap » 08 сен 2017, 16:33

Anton0310, логика скриптов в аркгисе не подразумевает их остановки в середине выполнения. То, о чем вы говорите, предполагает работу с UserInterface и это можно без проблем сделать на питоне (Tk, например), НО!
Аркгис не дружит с оконными библиотеками (со встроенным Tk как минимум) и рушится - всегда, без исключений. Я обходил это один раз, когда прям очень надо было, вызывая отдельный скрипт в отдельном потоке как subprocess. Это плохой путь.
Как пишут сами ребята из ESRI, такие вещи задаются ДО выполнения скрипта. Т.е. ваш инструмент должен изначально спросить у пользователя необходимые данные.
Если ввод необходим именно в середине выполнения, это значит, что у вас во вселенной Аркгис не один, а два скрипта.
Возможный вариант обхода - на кнопку повесить выполнения скрипта из тулбокса, в котором прописать функцию проверки входных данных, которые делают всё, что нужно до момента ввода данных от пользователя.
А вообще - ArcObjects.

freeExec
Гуру
Сообщения: 830
Зарегистрирован: 23 апр 2011, 10:32
Проекты: 1
Репутация: 123
Откуда: Ульяновск

Re: Помощь по написанию скрипта

Сообщение freeExec » 08 сен 2017, 16:38

Там же VB в котором есть InputBox или нет?

Anton0310
Новоприбывший
Сообщения: 5
Зарегистрирован: 03 сен 2017, 16:24
Репутация: 1
Откуда: Откуда

Re: Помощь по написанию скрипта

Сообщение Anton0310 » 08 сен 2017, 17:42

5Nap писал(а):
08 сен 2017, 16:33
Как пишут сами ребята из ESRI, такие вещи задаются ДО выполнения скрипта. Т.е. ваш инструмент должен изначально спросить у пользователя необходимые данные.
5Nap, Спасибо за ответ.
Такой вариант меня вполне устраивает. Подскажите только как это реализовать или где об этом почитать?

5Nap
Участник
Сообщения: 84
Зарегистрирован: 21 ноя 2010, 17:36
Репутация: 31

Re: Помощь по написанию скрипта

Сообщение 5Nap » 09 сен 2017, 12:05

Anton0310, Python Toolbox. Если количество операций ДО того, как нужно вмешательство пользователя, невелико и укладывается в секунду-две, то можно всё пихнуть в функцию updateParameters.

Как пример, вам нужен скрипт, которые выбирает в слое все записи с определённым значением (не заданным изначально, а одним из тех, что в этом поле есть). Вы задате два параметра - входной слой (param0) и значение из поля (param1). Пользователь выбирает слой как param0, в updateParameters стоит условие, что при изменении param0 подсчитываются уникальные значения в заданном поле и дальше задаётся фильтр для второго параметра param1 по этим значениям. При выполнении пользователь выбирает слой, происходит небольшой затуп на подсчёт статистики и далее он выбирает значение из ниспадающего списка во втором параметре. Дальше выполняется остальная часть скрипта, где вмешательство пользователя уже не нужно.

Если вы хотите всё это повесить на кнопку - создаёте python-addin, в нём кнопку, в ней - импорт тулбокса и вызов инструмента из него. Сам python toolbox кладёте туда же к основному скрипту add-in'а.

То же самое можно сделать и в обычном тулбоксе (не python toolbox). Если зайдёте в свойства, увидите закладку со сценариями, выполняемыми до запуска основного скрипта.

Barbaris
Интересующийся
Сообщения: 33
Зарегистрирован: 22 сен 2014, 15:50
Репутация: 0

Re: Помощь по написанию скрипта

Сообщение Barbaris » 22 сен 2017, 10:40

Добрый день! Не стал создавать новую тему. Крайне крайне редко пользуюсь ArcGis и тем более написанию скриптов.
Значительно упростит жизнь, если подправить вот этот запрос:
Function FindLabel ([A], [V])
FindLabel = [A]+vbNewLine+[V]
End Function
Нужно,
1. чтобы А ставилось, если оно больше определенного числа (например 5) и если можно окрулялось до целого.
2. если А больше 5, то V стоит одна.
Спасибо за помощь!

trir
Гуру
Сообщения: 3686
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 618
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Помощь по написанию скрипта

Сообщение trir » 22 сен 2017, 11:06


Barbaris
Интересующийся
Сообщения: 33
Зарегистрирован: 22 сен 2014, 15:50
Репутация: 0

Re: Помощь по написанию скрипта

Сообщение Barbaris » 22 сен 2017, 11:59

trir, Спасибо за ссылку. Но увы, я не спец по пргограмированию, если вот переделать похожий запрос-это еще в моих силах, то новый написать :roll:

Anton0310
Новоприбывший
Сообщения: 5
Зарегистрирован: 03 сен 2017, 16:24
Репутация: 1
Откуда: Откуда

Re: Помощь по написанию скрипта

Сообщение Anton0310 » 25 сен 2017, 19:00

Добрый день, уважаемые форумчане!

Пишу я свой инструмент (см. выше) и возникла очередная нубская проблема)) В инструменте-скрипте тулбокса при описании параметров я создавал таблицу, в ней 5 полей и в каждом поле ниспадающие списки со своими значениями использовав при этом параметр filters[]. Но вот только проблема такая, что работодатели мои жмоты и до сих пор используют ArcGIS 10.1, а filters доступен начиная с версии 10.2. Вопрос такой какой параметр использовать для создания полей с ниспадающим списком, используя параметры из 10.1?

Фрагмент кода

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

def getParameterInfo(self):
    param0 = arcpy.Parameter(
        displayName ='Протяженность,
        name ='in_lenght',
        datatype ="GPLong",
        parameterType ='Required',
        direction ='Input')
    param1 = arcpy.Parameter(
        displayName='in_table',
        name='stat_fields',
        datatype='GPValueTable',
        parameterType='Required',
        direction='Input')
    param1.columns = [['GPString', 'Материал'], ['GPString', 'Диаметр']]
    param1.filters[0].type = 'ValueList'
    param1.filters[0].list = ["Сталь", "Полиэтилен"]
    param1.filters[1].type = 'ValueList'
    param1.filters[1].list = ["25мм", "32мм"]
    

Ответить

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

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

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