Quali sono i pro ei contro dei componenti aggiuntivi di Python rispetto ai componenti aggiuntivi .NET di ArcGIS per desktop?


11

Ho trovato nella guida di ESRI .NET:

Pitone

Tutte le applicazioni ArcGIS Desktop includono un linguaggio di scripting incorporato chiamato Python. Molte aree di ArcGIS, in particolare il geoprocessing, sono accessibili tramite le interfacce di programmazione (API) delle applicazioni Python semplificate, semplificando la creazione e l'automazione di attività comuni. Gli script Python sono facilmente condivisi e possono essere prodotti senza un ambiente di sviluppo esterno. Esistono numerosi moduli Python di dominio pubblico focalizzati su settori quali scienza, ingegneria e matematica. Con tutti i suoi punti di forza, Python non è adatto a tutte le attività di programmazione. Sebbene la copertura stia migliorando, non tutte le aree di ArcGIS sono attualmente esposte a Python. Inoltre, l'esperienza di modifica e debug in Python non è così sofisticata o facile da usare come quelle incluse negli ambienti di sviluppo commerciale come Visual Studio.Infine, non è possibile ascoltare e rispondere agli eventi ArcGIS, implementare un'interfaccia COM o collegare i numerosi punti di estensibilità COM di ESRI utilizzando Python.

e nella guida di ArcGIS Desktop:

ArcGIS 10.1 introduce Python nell'elenco delle lingue per la creazione di componenti aggiuntivi desktop, fornendo una soluzione semplice per estendere la funzionalità desktop. Per semplificare lo sviluppo dei componenti aggiuntivi di Python, è necessario scaricare e utilizzare la procedura guidata del componente aggiuntivo Python per dichiarare il tipo di personalizzazione. La procedura guidata genererà tutti i file necessari necessari per il funzionamento del componente aggiuntivo.

Se i componenti aggiuntivi di Python e .NET hanno la stessa funzionalità? Ciò significa che posso fare la stessa cosa in Python di .NET ??


Dove dice che "Python e .NET hanno le stesse funzionalità per creare un componente aggiuntivo"?
PolyGeo

scusate, ho espresso male ciò che intendo. (
aggiorno

1
implement a COM interface, or plug into ESRI’s many COM extensibility points using PythonQuesto è strano. Python può funzionare bene con COM.
Nathan W,

In effetti, ho creato componenti aggiuntivi (banali) per Python che usano ArcObjects attraverso i comtypes. Tuttavia non ho provato a implementare interfacce COM in Python. Non sono sicuro che sia possibile o quanto sia difficile rispetto a .NET. Inoltre, nessuno dei due tipi di componente aggiuntivo consente la registrazione automatica con COM, quindi alcune delle cose più avanzate vengono meglio servite con un componente COM tradizionale che può essere registrato dal suo installatore o (ESRI) RegAsm.
blah238,

1
Questo non è ArcGIS ma è così che ho implementato un'interfaccia COM usando Python per MapInfo nathanw.net/2011/04/07/using-python-and-mapinfo-with-callbacks Direi che è più semplice di .NET: )
Nathan W,

Risposte:


24

La risposta a questa domanda è sì e no. In Python è possibile fare tutto ciò che si può fare in .Net, ma facile e possibile sono due cose molto diverse. Successivamente, l'interpretazione più semplice è no , i componenti aggiuntivi di Python non possono fare quanto i componenti aggiuntivi .Net. Tuttavia, le attività che i componenti aggiuntivi di Python possono svolgere sono molto più semplici e veloci da implementare e testare.

Da un punto di vista puramente tecnico, ArcGIS Desktop Add-In Framework offre le seguenti funzionalità:

  • Uno schema ben definito basato su XML per la descrizione di una serie di punti e componenti di integrazione desktop comuni: pulsanti, barre degli strumenti, menu, strumenti, menu ed estensioni multi-articolo, nonché un modo per collegarli facilmente in modo dichiarativo da il tuo codice sul desktop ArcGIS
  • Un formato e una struttura di file ( .esriaddin) per la distribuzione del codice di personalizzazione del desktop.
  • Un meccanismo per l'installazione, la verifica e la memorizzazione nella cache installati .esriaddins, quindi se il file di origine del componente aggiuntivo installato è cambiato, ricaricherà il file modificato nella cache del componente aggiuntivo del desktop locale.
  • Una serie di meccanismi di sicurezza e autenticazione per il codice nei componenti aggiuntivi: firma digitale dei .esriaddinfile, controllo amministrativo su quale livello di autenticazione è necessario per consentire l'installazione di un componente aggiuntivo.

Ciò che manca al framework del componente aggiuntivo è qualsiasi contratto formale del comportamento o della funzionalità dietro i pulsanti, ecc. Quando si installa .Net SDK per ArcGIS, si ottiene l'integrazione di Visual Studio sotto forma di procedure guidate del componente aggiuntivo nelle finestre di dialogo di gestione del progetto , documentazione, frammenti di codice, collegamenti ArcObjects, ecc. Quindi, una volta superati i punti di ingresso forniti dal framework del componente aggiuntivo, un componente aggiuntivo .Net consente di fare il resto con le API di ArcObjects e viene fornito in bundle con , oltre a contenere una libreria di frammenti di codice di attività comuni già lì da usare. In ArcGIS non esiste un simile SDK per sviluppatori Python: tutte le funzionalità di Python sono esposte tramite arcgisscripting / arcpy ed è già inclusa nel prodotto. Quindi, dove .Net SDK viene fornito come download di grandi dimensioni, la cosa più vicina in Python è il download della procedura guidata del componente aggiuntivo relativamente piccolo.

D'altra parte, Python è in grado di utilizzare / implementare interfacce COM , ma l'utilizzo di COM da Python non è in bundle con alcun ArcKIS SDK o documentato nel sistema di aiuto di ArcGIS. Se sei nuovo allo sviluppo in ArcGIS, questo dovrebbe essere abbastanza una barriera all'ingresso per respingerti a meno che tu non sappia davvero cosa stai facendo. Puoi fare COM in Python qui, ma è abbastanza vicino a un Tarpit di Turing che è difficile giustificare il tempo trascorso a meno che tu non sia un utente di livello esperto che abbia già familiarità con i dettagli di COM e ArcObjects.

Ti consiglierei cosa puoi fare con arcpy . Puoi automatizzare molte attività come la chiamata agli strumenti di Geoprocessing e la manipolazione in batch dei documenti della mappa , mentre i componenti aggiuntivi di Python ti consentono di utilizzare alcuni sink di evento ben definiti e alcuni controlli delle finestre di dialogo oltre alle funzionalità di base di arcpy. Se non riesci a pensare a un modo per eseguire la tua attività in Python in base a ciò che dice la documentazione (hai bisogno di alcune interazioni dell'interfaccia utente complessa o di agganciarti ad eventi non esposti nella procedura guidata del componente aggiuntivo Python o utilizzare qualcosa disponibile solo in ArcObjects) , quindi esegui lo sviluppo in un componente aggiuntivo .Net.

Mi dispiace che questo sia più sfumato di una risposta sì o no dura e veloce, ma dovrebbe darti un'idea del fatto che dovresti andare sul percorso Python o .Net nel tuo componente aggiuntivo.

Suppongo che dovrei aggiungere questa informativa: ho progettato e sviluppato gran parte delle funzionalità specifiche di Python per i componenti aggiuntivi in ​​ArcGIS.


Mi chiedo se questa risposta del 2013 e Desktop 10.1 sia ancora attuale. Ad esempio, sembra che i componenti aggiuntivi di Python siano ora chiamati toolbox python? Altre funzionalità potrebbero essere cambiate in entrambe le librerie Python e SDK.
intotecho

2

Uno degli svantaggi dello sviluppo di componenti aggiuntivi in ​​.NET è che ogni nuova versione di ArcGIS utilizza una diversa versione incompatibile di ArcObjects e una diversa versione incompatibile di Visual Studio. I binari generati dai componenti aggiuntivi .NET sono generalmente compatibili con le versioni successive di ArcGIS, ma solo se non si desidera apportare modifiche al componente aggiuntivo in una versione di ArcGIS successiva a quella in cui era originariamente sviluppato.

Ho sviluppato un componente aggiuntivo .NET per il caricamento dei livelli TIGER / Line Data Census Bureau su una mappa in ArcGIS 10.0 e il componente aggiuntivo binario funziona ancora in ArcGIS 10.4. Sfortunatamente, quando volevo apportare modifiche al componente aggiuntivo, ho provato a portare la soluzione nella versione di Visual Studio compatibile con ArcGIS 10.4 e sono stato invaso da un numero enorme di messaggi di errore a causa di chiamate incompatibili ad ArcObjects e funzionalità di Visual Studio.

Lo sviluppo di componenti aggiuntivi in ​​Python implica l'uso di ArcPy invece di ArcObjects, quindi la documentazione è più accessibile e il processo di revisione del codice per una nuova versione di ArcGIS dovrebbe essere molto più semplice.

Il principale svantaggio dell'utilizzo di Python anziché .NET è che la creazione di un'interfaccia GUI in Python è molto più difficile. Pacchetti come wxPython possono essere usati, ma ci sono molte difficoltà nel farli funzionare in ArcGIS. L'interfaccia utente di Toolbox è molto più limitata rispetto alle finestre di dialogo che è possibile creare in .NET.


1

Stai guardando l'ambiente desktop, quindi .NET è sicuramente un'opzione. Tuttavia, sarai limitato a ciò che puoi fare con .NET ora che gran parte di ArcGIS Server è disponibile per l'esecuzione su più piattaforme.

I miei due centesimi: se stai facendo un lavoro approfondito sull'interfaccia utente, suggerirei .NET in quanto puoi creare un'interfaccia utente abbastanza facilmente. Se stai davvero solo copiando e stai utilizzando le parti di analisi più approfondite di ArcGIS Python ti permetterà di passare al Server (o al "cloud") molto, molto più facilmente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.