Каковы плюсы и минусы надстроек Python по сравнению с надстройками .NET для ArcGIS for Desktop?

11

Я нашел в справке ESRI .NET:

питон

Все приложения ArcGIS Desktop содержат встроенный язык сценариев, называемый Python. Многие области ArcGIS, особенно геообработка, доступны через упрощенные интерфейсы прикладного программирования (API) Python, что позволяет легко создавать и автоматизировать общие задачи. Сценарии Python легко доступны и могут быть созданы без внешней среды разработки. Существует множество общедоступных модулей Python, ориентированных на такие области, как наука, инженерия и математика. Несмотря на все свои сильные стороны, Python не подходит для любой задачи программирования. Хотя охват улучшается, не все области ArcGIS в настоящее время открыты для Python. Кроме того, опыт редактирования и отладки в Python не такой сложный и простой в использовании, как в коммерческих средах разработки, таких как Visual Studio.Наконец, вы не можете прослушивать и отвечать на события ArcGIS, реализовывать интерфейс COM или подключаться к множеству точек расширения COM ESRI с помощью Python.

а в справке ArcGIS Desktop:

ArcGIS 10.1 вводит Python в список языков для создания надстроек Desktop, предоставляя вам простое решение для расширения функциональности рабочего стола. Чтобы упростить разработку надстроек Python, вы должны загрузить и использовать мастер надстроек Python, чтобы объявить тип настройки. Мастер сгенерирует все необходимые файлы, необходимые для работы надстройки.

Если надстройки Python и .NET имеют одинаковую функциональность? Означает ли это, что в Python я могу делать то же самое, что и .NET?

user7172
источник
Где говорится, что «Python и .NET имеют одинаковые возможности для создания надстроек»?
PolyGeo
извините, я плохо выражаю, что имею в виду. (я обновляю сообщение)
user7172
1
implement a COM interface, or plug into ESRI’s many COM extensibility points using PythonЭто странно. Python может нормально работать с COM.
Натан W
Действительно, я создал (тривиальные) надстройки Python, которые используют ArcObjects через комтипы. Однако я не пытался реализовать COM-интерфейсы в Python. Я не уверен, возможно ли это или насколько сложно это будет по сравнению с .NET. Кроме того, ни один из типов надстроек не допускает автоматическую регистрацию в COM, поэтому некоторые из более сложных компонентов лучше обслуживать с помощью традиционного компонента COM, который может быть зарегистрирован его установщиком или (ESRI) RegAsm.
blah238
1
Это не ArcGIS, но именно так я сделал реализованный COM-интерфейс с использованием Python для MapInfo. Nathanw.net/2011/04/07/using-python-and-mapinfo-with-callbacks. Я бы сказал, что это проще, чем .NET: )
Натан W

Ответы:

24

Ответ на этот вопрос - да и нет. Можно с некоторым усилием сделать все в Python, что вы могли бы сделать в .Net, но легко и возможно - две совершенно разные вещи. После этого простейшая интерпретация - нет , надстройки Python не могут делать столько же, сколько надстройки .Net. Однако задачи, которые могут выполнять надстройки Python , намного проще и быстрее реализовать и протестировать.

С чисто технической точки зрения ArcGIS Desktop Add-In Framework предлагает следующие функциональные возможности:

  • Четко определенная схема на основе XML для описания ряда общих точек и компонентов интеграции рабочего стола: кнопок, панелей инструментов, меню, инструментов, меню и расширений из нескольких элементов, а также способа их простого декларативного соединения из ваш код на рабочий стол ArcGIS
  • Формат файла и структура файла ( .esriaddin) для распространения кода настройки рабочего стола.
  • Установлен механизм установки, проверки и кэширования .esriaddins, поэтому, если исходный файл установленной надстройки был изменен, он перезагрузит измененный файл в локальный кэш надстройки рабочего стола.
  • Набор механизмов безопасности и аутентификации для кода в надстройках: цифровая подпись .esriaddinфайлов, административный контроль того, какой уровень аутентификации требуется для разрешения установки надстройки.

Чего не хватает платформе надстроек, так это любому формальному договору о поведении или функциональности за кнопками и т. Д. При установке .Net SDK для ArcGIS вы получаете интеграцию Visual Studio в форме мастеров надстроек в диалоговых окнах управления проектами. , документация, фрагменты кода, привязки ArcObjects и т. д. Поэтому, как только вы пройдете точки входа, которые предоставляет инфраструктура надстроек, .Net Add-In позволяет вам проделать оставшуюся часть пути с API-интерфейсами ArcObjects, которые также поставляются в комплекте с , а также содержит библиотеку фрагментов кода общих задач, которые уже можно использовать, В ArcGIS нет такого SDK разработчика Python: все функциональные возможности Python доступны через arcgisscripting / arcpy и уже включены в продукт. Таким образом, когда .Net SDK поставляется в виде крупной загрузки, наиболее близкой вещью в Python является относительно небольшая загрузка Мастера надстроек.

С другой стороны, Python является способным потреблять / реализации COM - интерфейсов , но с использованием COM из Python не связан с какой - либо ArcGIS SDK или документирована в справочной системе ArcGIS. Если вы новичок в разработке в ArcGIS, этого должно быть достаточно для входа, чтобы оттолкнуть вас, если вы действительно не знаете, что делаете. Вы можете сделать COM в Python здесь, но он достаточно близок к Turing Tarpit , так что трудно оправдать затраченное время, если вы не являетесь пользователем уровня эксперта, уже знакомым с входами и выходами COM и ArcObjects.

Я бы посоветовал вам посмотреть, что вы можете сделать с arcpy . Вы можете автоматизировать множество задач, таких как вызов инструментов геообработки и выполнение пакетных операций с документами карты , а также надстройки Python, позволяющие использовать некоторые четко определенные приемники событий и некоторые диалоговые элементы управления в дополнение к базовым возможностям arcpy. Если вы не можете придумать способ выполнить свою задачу в Python на основе того, что написано в документации (вам нужно какое-то сложное взаимодействие с пользовательским интерфейсом или подключиться к событиям, не представленным в мастере надстроек Python, или использовать что-то, доступное только в ArcObjects) , затем сделайте свою разработку в .Net Add-In.

Извините, это более нюанс, чем резкий ответ «да» или «нет», но он должен дать вам некоторое представление о том, следует ли вам идти по пути Python или .Net в вашей надстройке.

Полагаю, мне следует добавить это раскрытие: я разработал и разработал большую часть специфичных для Python функций для надстроек в ArcGIS.

Джейсон Шайрер
источник
Интересно, этот ответ от 2013 и Desktop 10.1 все еще актуален. Например, похоже, что надстройки Python теперь называются наборами инструментов Python? Другие возможности могли измениться как в библиотеках Python, так и в SDK.
интехо
2

Одним из недостатков разработки надстроек в .NET является то, что в каждой новой версии ArcGIS используется другая несовместимая версия ArcObjects и другая несовместимая версия Visual Studio. Двоичные файлы, сгенерированные надстройками .NET, обычно совместимы с более поздними версиями ArcGIS, но только если вы не хотите вносить какие-либо изменения в вашу надстройку в версии ArcGIS более поздней, чем та, в которой она была изначально разработаны.

Я разработал надстройку .NET для загрузки слоев данных TIGER / Line Census Bureau на карту в ArcGIS 10.0, и двоичная надстройка все еще работает в ArcGIS 10.4. К сожалению, когда я захотел внести изменения в Надстройку, я попытался перенести решение в версию Visual Studio, совместимую с ArcGIS 10.4, и меня переполнило огромное количество сообщений об ошибках из-за несовместимых вызовов ArcObjects и функций Visual Studio.

Разработка надстроек в Python предполагает использование ArcPy вместо ArcObjects, поэтому документация становится более доступной, и процесс пересмотра кода для новой версии ArcGIS должен быть намного проще.

Основным недостатком использования Python вместо .NET является то, что создание интерфейса с графическим интерфейсом в Python намного сложнее. Пакеты, такие как wxPython, могут быть использованы, но есть много трудностей, чтобы заставить их работать в ArcGIS. Пользовательский интерфейс Toolbox гораздо более ограничен, чем диалоговые окна, которые могут быть встроены в .NET.

JDMorganArkansas
источник
1

Вы смотрите на среду рабочего стола, поэтому .NET, безусловно, вариант. Однако теперь вы будете ограничены в возможностях .NET, поскольку большая часть ArcGIS Server доступна для работы на нескольких платформах.

Мои два цента: если вы делаете глубокую работу с пользовательским интерфейсом, я бы предложил .NET, так как вы можете легко поднять пользовательский интерфейс. Если вы на самом деле просто пишете сценарии и используете более глубокие части анализа ArcGIS Python, вы сможете намного быстрее перейти на сервер (или в «облако»).

Даррелл О'Доннелл
источник