Не работает инструмент Intersect в среде Python

0 голосов
спросил 30 Март, 10 от drauka (1,060 баллов) в категории Программные продукты Esri
Всем привет! У меня вопрос к тем, кто разбирается в написании скриптов на Python, да и ко всем кто сможет, что-то посоветовать.

Я пишу диплом на тему оценки окружающей среды с использованием GIS. Для этого было написано пару скриптов на Python, которые последовательно подготавливали данные для получения необходимого результата. В первоначальном варианте я их просто последовательно запускал из панели ArcToolBox. Но со временем возникла необходимость создания единого пользовательского интерфейса. Для этих целей я его написал на PyGTK и уже оттуда запускаю скрипты(теперь они в одном файле к часть одного класса).
Но возникла проблема, скрипт который работал раньше при запуске из панели ArcToolBox, теперь не хочет этого делать. Мне кажется, что это связано при запуске нового скрипта фокус передается на интерфейс написанный на PyGTK, а раньше был на ArcMap. Кто-нибудь сталкивался с такой проблемой раньше, или может быть объясните почему действительно это происходит?
Здесь лежит мой скрипт.

http://files.mail.ru/FUOW1J

А это так строчка (187) которая не хочет запускаться

gp.Intersect_analysis("Air #;Finzal_Big_razrez", Air_sel, "ALL","#", "POINT")

А вот строчка из за которой я думаю это происходит.
gtk.main()
- передает фокус на созданный интерфейс!

Жду ваших советов!Smile
P.S. Может для моих целей надо было бы использовать MapObject или ArObject, но не знаю можно ли писать на Python при работе с ними.

2 Ответы

0 голосов
ответил 31 Март, 10 от drauka (1,060 баллов)
Раз никто не ответил, значит либо плохо объяснил, либо не знают в чем проблема.

Объясню по другому!
Раньше скрипт пересечения был отдельным скриптом в панели ArcToolBox ("Пересечение_слоев")
image
Его код был такой
class intersect:

    def __init__(self):
        print("IT's RUN...")
        try:
            self.gp = arcgisscripting.create()
            self.gp.addmessage("It's run")
        except:
            print("Push ME - create")
            raw_input()
            # Load required toolboxes...
        self.gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Analysis Tools.tbx")
        self.gp.addmessage("Analysis tool add")
        # Local variables...
        Air_sel = "D:\\Gis\\WaterAirGB\\WAGB.mdb\\Air_sel"
        Finzal_Big_razrez = "Finzal_Big_razrez"
        Air = "Air"

        # Process: Пересечение (Intersect)...
        try:
            self.gp.Intersect_analysis("Finzal_Big_razrez #;Air #", Air_sel, "ALL", "", "POINT")
            self.gp.addmessage("Intersect done")
        except:
            print("Push ME")
            raw_input()

И он работал без проблем.
НО!!! после того как я стал его запускать из под графического интерфейса ("Запуск комплексного анализа"), он перестал находить пересечение 2 слоев.=(
image
Хотя программа не вылетает..там стоит try/except
Вот так я загружаю интерфейс
class App():

    
    def __init__(self):


        # Загружаем файл интерфейса
        self.gladefile = "Compl_.glade"
        # дерево элементов интерфейса
        self.widgetsTree = gtk.glade.XML(self.gladefile)
       # Соединяем событие закрытия окна с функцией завершения приложения
        self.window = self.widgetsTree.get_widget("window1")


А этой командой я передаю управлению созданному интерфейсу.

if __name__ == "__main__":
    #p1 = T(gtk.main())
    app = App()
    #p1.start()
    gtk.main()

Я не могу понять в чем разница.
В первом как мне кажется я запускаю непосредственно из ArcMap, и как мне кажется связь с геопроцессором прямая!
В другом случае тоже запускаю из ArcMap, но фокус в дальнейшем делается на созданный интерфейс. Может в этом проблема? Или в чем то еще?
Подскажите, кто знает как происходит связь Питона с конкретными выделенными объектами в среде ArcMAP. Могу я ее как то нарушить.
Спасибо image
0 голосов
ответил 31 Март, 10 от drauka (1,060 баллов)
Вообщем в результате долгих экспериментов, было выявлено что по какимто причинам не хочет работать комманда в программе gp.OverwriteOutput = 1.
Как выход перед тем как делать пересечение, необходимо удалить выходной слой из БГД!!! image
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...