Ошибка цикла в Network Analyst (ArcGIS 9.3) - PullRequest
1 голос
/ 04 февраля 2012

Я делаю цикл, используя инструмент Make Service Area Layer от Network Analyst, но он не работает.Я хотел бы сделать 3 разных зоны обслуживания с 3 разными точками, каждая из которых соответствует объекту.Средство - это класс пространственных объектов или слой, который является источником для новых сетевых расположений.Эти точки называют «Броня», «Бугене» и «Чантрери».Мой атрибут импеданса - "Minutes_S1"

А вот мой код:

import arcgisscripting
gp = arcgisscripting.create()
gp.CheckOutExtension("Network")
gp.AddToolbox("C:/Program Files (x86)/ArcGIS/ArcToolbox/Toolboxes/Network Analyst Tools.tbx")
network = "D:/Travaux/NantesMetropole/Traitements/SIG_Final/Modelisation/voiture/Reseau_Voiture_TOP_ND.nd" 
Armor = "D:/Travaux/NantesMetropole/Traitements/SIG_Final/pts_kml/Pt_Ar.shp"
Bouguenais = "D:/Travaux/NantesMetropole/Traitements/SIG_Final/pts_kml/Pt_Boug.shp"
Chantrerie = "D:/Travaux/NantesMetropole/Traitements/SIG_Final/pts_kml/Pt_Chanr.shp"

facilities_points = ["Armor", "Bouguenais", "Chantrerie"]
while 1:
    for i in facilities_points:
        try:
            gp.MakeServiceAreaLayer_na (network, "Service Area_" + i, "Minutes_S1", "TRAVEL_FROM", "10 20 30 40 50", "SIMPLE_POLYS", "MERGE", "DISKS", "NO_LINES", "OVERLAP", "NO_SPLIT", "", "", "ALLOW_UTURNS", "", "TRIM_POLYS", "200 Meters", "NO_LINES_SOURCE_FIELDS")
            gp.AddLocations_na("Service Area_" + i, "Facilities_" + i, i, "", "100 Meters")
            gp.Solve_na ("Service Area_" + i, "HALT")
            gp.CopyFeatures_management("Service Area_" + i + "/Polygons", "D:/Travaux/NantesMetropole/Traitements/SIG_Final/Modelisation/voiture/test_" + i +".shp")
            print "Minutes_S1 done on", i
        except:
             print "Error on", i
    break

На самом деле в строке "gp.AddLocations_na" уже возникает ошибка, говорящая:

Error on Armor
Error on Bouguenais
Error on Chantrerie

Я проверил справку ESRI, но я все еще не знаю, как решить мою проблему.Вы можете мне помочь?

1 Ответ

0 голосов
/ 04 февраля 2012

Вы говорите, что gp.AddLocations_na вызывает проблему, но она не очевидна из вашего кода.Для отладки добавьте оператор повышение в ваш блок кроме.Это скажет вам, какая строка вызывает ошибку.Вы всегда можете удалить его, когда разберетесь с перегибами.

Похоже, что одинокий я - виновник.Вы передаете его как строку, когда она, вероятно, должна быть переменной класса объектов.Вы можете использовать словарь для хранения имен и переменных.

#store table/feature class names with the variables
facilities_points = {"Armor":Armor, "Bouguenais":Bouguenais, "Chantrerie":Chantrerie}

#note the while loop is superfluous here
while 1:
    for i in facilities_points:
        try:
            gp.MakeServiceAreaLayer_na (network, "Service Area_" + i, "Minutes_S1", "TRAVEL_FROM", "10 20 30 40 50", "SIMPLE_POLYS", "MERGE", "DISKS", "NO_LINES", "OVERLAP", "NO_SPLIT", "", "", "ALLOW_UTURNS", "", "TRIM_POLYS", "200 Meters", "NO_LINES_SOURCE_FIELDS")
            gp.AddLocations_na("Service Area_" + i, "Facilities_" + i, facilities_points[i], "", "100 Meters")
            gp.Solve_na ("Service Area_" + i, "HALT")
            gp.CopyFeatures_management("Service Area_" + i + "/Polygons", "D:/Travaux/NantesMetropole/Traitements/SIG_Final/Modelisation/voiture/test_" + i +".shp")
            print "Minutes_S1 done on", i
        except:
            #this error message tells you nothing about what really happened
            print "Error on", i

            #Raise the full exception to assist with debugging
            #comment it out once the script works
            raise
    break 

В качестве отступления, хотя обработка ошибок - хорошая привычка, на мой взгляд, она редко бывает полезна для этого типа сценариев.Если вы не готовы принять неудачный вызов функции геообработки и продолжить работу, лучше всего позволить сценарию остановиться и вернуться туда, где произошла ошибка.Однако, если вы внедрили протоколирование для захвата трассировок и в тех случаях, когда это выполняется как запланированная задача, тогда блоком исключений будет место для сообщения журнала.

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