Скрипты Python, созданные в ArcGIS Desktop с помощью arcpy.na, должны быть изменены перед запуском в ArcGIS Pro. Дополнительно, если вы хотите сохранить обратную совместимость с ArcGIS Desktop, следует учесть некоторые особенности. В следующих разделах приведены необходимые изменения и некоторые особенности.
Использование Python 3
ArcGIS Pro использует Python 3. Возможно, вам придется изменить некоторые элементы стандартного синтаксиса Python. Если вы собираетесь использовать автономные скрипты, вам необходимо установить 64-разрядный Python.
Создание слоев сетевого анализа
Начиная с ArcGIS Pro, слои сетевого анализа можно создавать с помощью нового набора инструментов геообработки. Старые инструменты для создания слоев сетевого анализа не рекомендуются. Инструмент Создать слой маршрута заменен на Создать слой анализа маршрута, то же сделано для других типов слоев сетевого анализа. Новые инструменты предлагают расширенную функциональность, такую как возможность работы с режимами передвижения и использования для анализа как локального набора сетевых данных, так и сервиса портала. Устаревшие инструменты продолжат работать в ArcGIS Pro, но их следует использовать только для сохранения обратной совместимости скрипта с ArcGIS Desktop или с версиями ArcGIS Pro до 1.2.
Задание параметров среды рабочей области
В ArcGIS Pro слои сетевого анализа хранят данные на диске в классах пространственных объектов файловой базы геоданных. При создании нового слоя сетевого анализа в скрипте Python (например, используя arcpy.na.MakeRouteAnalysisLayer()), необходимо сначала явно задать среду рабочей области для файловой базы геоданных, в которой вы собираетесь хранить данные слоя, используя arcpy.env.workspace = "<path to file gdb>". После создания слоя в файловую базу геоданных будет добавлен новый набор классов объектов, содержащий соответствующие подслои для классов пространственных объектов.
Работа с файлами слоя
Файлы слоя, созданные в ArcGIS Desktop, имеют расширение .lyr, а файлы слоя, созданные в ArcGIS Pro, имеют расширение .lyrx. Существующие файлы слоев сетевого анализа .lyr могут быть использованы в скриптах в ArcGIS Pro, но они будут автоматически сконвертированы в новый формат слоев и данные из них будут сохранены в классы объектов на диске. Перед использованием файла слоя сетевого анализа .lyr в скрипте, вам необходимо сначала явно задать среду рабочей области для файловой базы геоданных, в которой вы собираетесь хранить данные слоя, используя arcpy.env.workspace = "<path to file gdb>". Если вы хотите сохранить существующий файл слоя сетевого анализа .lyr в новом формате .lyrx, используйте arcpy.management.SaveToLayerFile(). Независимо от того, куда вы сохранили файл .lyrx, данные слоя остаются в файловой базе геоданных, указанной в среде рабочей области.
Работа с объектами слоев
Модуль arcpy.mapping теперь заменен модулем arcpy.mp, и эти изменения повлияют на работу с объектами слоев сетевого анализа в скриптах. А именно, изменился синтаксис доступа к подслоям, получения объектов слоев из файлов слоев и сохранение объектов слоев в качестве файлов слоев.
Для создания объекта слоя из существующего файла слоя сетевого анализа .lyrx (или .lyr), используйте arcpy.mp.LayerFile(lyrxPath).listLayers()[0]. Учтите, что arcpy.mapping.ListLayers() был заменен на layer_object.listLayers(), а вместо arcpy.mapping.Layer следует использовать arcpy.mp.LayerFile. Метод listLayers возвращает список объектов слоев, содержащихся в файле .lyrx; первый элемент – это всегда объект слоя сетевого анализа, а остальные объекты являются подслоями. Для сохранения слоя сетевого анализа в файл .lyrx, используйте NA_layer_object.saveACopy("<path to output .lyrx>").
Чтобы получить доступ к определенному подслою слоя сетевого анализа, вы можете использовать групповой символ в listLayers для фильтрации результатов, если вы знаете имя подслоя, к которому нужно получить доступ: facilities_sublayer = NA_layer_object.listLayers(facilities_layer_name)[0]. Если вы не знаете имени подслоя, или хотите убедиться, что ваш скрипт работает на локализованной версии ArcGIS Pro, вы можете получить имена подслоев, используя arcpy.na.GetNAClassNames, как вы это делали в ArcGIS Desktop. Вы больше не можете получить доступ к подслоям, используя строку пути, например, "Route/Stops" для подслоя Остановки в слое сетевого анализа с именем Маршрут.