In che misura il linguaggio SQL è accessibile tramite gli strumenti ArcGIS?


10

Questa domanda sembra così ridondante ...
Ad ogni modo, mi è stato chiesto di esplorare gli usi di SQL in ArcGIS. Utilizziamo un DB SDE per tutto l'archiviazione sul lato server e per la gestione / modifica DB su larga scala. Tuttavia, sto cercando di approfondire quanto SQL integrato sia negli strumenti di ArcGIS. C'è una nota nella Guida di riferimento alle query SQL della guida di ArcGIS 10 che afferma chiaramente che la sintassi SQL non funziona quando si utilizza lo strumento Field Calculator. Lo trovo molto deludente in quanto sembrerebbe molto utile essere in grado di estrarre e manipolare le informazioni direttamente dal database stesso durante il calcolo dei valori dei campi.

Quali sono le maggiori limitazioni e insidie ​​che si potrebbero incontrare quando si tenta di utilizzare SQL in ArcGIS? Quali strumenti vedono la migliore funzionalità quando integrati con SQL?

Se è necessario un esempio per rendere questa domanda più chiara, sto tentando di tenere traccia del numero di punti di interesse di un certo tipo in una determinata regione. Ogni punto ha un attributo che ne descrive il tipo e la regione. La mia attuale soluzione prevede un uso intenso dei cursori per il conteggio e il recupero dei dati, ma un superiore ha sottolineato che una semplice query SQL potrebbe fare tutto questo e altro. Sfortunatamente, sembra che la funzionalità non sia presente per questo.

O è?


Qualcuno delle tabelle interrogate ha una versione?
Michael Todd,

Di versione? Non credo di avere familiarità con quel termine.
Nathanus,

1
Il controllo delle versioni di un livello consente di apportare modifiche al livello mantenendo le funzionalità precedenti. Pertanto, se una funzione viene eliminata, la versione corrente del livello mostra che la funzione non esiste più; tuttavia, la funzione esiste ancora nel livello "base" e gli strumenti GIS possono essere utilizzati per visualizzare diverse versioni del livello che mostrano la funzione. Puoi sapere se il tuo layer è aggiornato facendo clic con il tasto destro del mouse su ArcCatalog e selezionando Proprietà. La parte inferiore della scheda Generale ha una sezione chiamata Versioning e le informazioni qui ti diranno se il layer è versionato.
Michael Todd,

Risposte:


9

Se vuoi usare Python dai un'occhiata al comando ArcSDESQLExecute . Ciò ti consentirà di eseguire SQL arbitrario ma deve essere collegato tramite SDE. Se il risultato della query è un insieme di righe, gli attributi verranno restituiti come un elenco di elenchi Python. Altrimenti restituirà True se SQL eseguito correttamente o None in caso contrario. Vedi anche: Esecuzione di SQL usando una connessione ArcSDE


Lo farò sicuramente! Sembra proprio quello che stavo cercando, in questo contesto. Molte grazie.
Nathanus,

5

Se si scrive ArcObjects personalizzato, è possibile eseguire SQL arbitrario su un'area di lavoro SDE utilizzando il metodo ExecuteSQL . Questo metodo è limitato alle query che non restituiscono set di risultati, come INSERT, UPDATE o alcune stored procedure.

Se stai utilizzando l'interfaccia utente di ArcMap, le tue opzioni sono un po 'più limitate. Il motivo per cui non è possibile utilizzare SQL tramite Calculate Field è perché l'espressione è in realtà VBScript e / o Python. Potresti usare VBScript o Python per eseguire un'espressione SQL arbitraria ed estrarre valori dal cursore risultante, ma non lo consiglierei.

In alternativa, è possibile utilizzare la risposta di Regan e creare un livello di query. Per i dati di sola lettura, questo è l'approccio migliore. Se è necessario aggiornare i dati, è leggermente più complicato. Dovrai creare un livello di query con i tuoi "nuovi" valori, eseguire un join con la tabella esistente e quindi utilizzare i campi di calcolo. Questo potrebbe essere combinato con ExecuteSQL per eseguire aggiornamenti complessi e quindi visualizzare i risultati (tipo di goffa).

L'ultima alternativa è eseguire direttamente SQL su tabelle ArcSDE.


1
Il tuo ultimo punto (eseguendo SQL direttamente contro le tabelle) è stato il motivo per cui ho posto la mia domanda sul controllo delle versioni. Una query SQL a livello di database viene estratta solo dal livello base (a meno che non si configuri una vista a più punti), quindi non funzionerà se il livello è aggiornato.
Michael Todd,

Il lavoro che sto facendo è principalmente in Python, ma sembra sempre più che la vera funzionalità nell'interfaccia utente si basi su ArcObjects.
Nathanus,

Tutto è costruito su ArcObjects internamente, inclusa la funzionalità Python.
James Schek,

se ArcSDESQLExecute in Python può restituire risultati, come si può ottenere lo stesso tramite IWorkspace.ExecuteSQL?
Petr Krebs,

@petr non puoi direttamente ... Ho aggiornato la mia risposta.
James Schek,


1

A seconda di quale RDBMS si sta utilizzando, è possibile sfruttare le librerie SQL al di fuori di ArcObjects o arcpy, purché non si dipenda dal recupero dei dati delle funzionalità. Molte delle query nel database di SQL Server che utilizzo quotidianamente non sono di natura spaziale, quindi userò le classi System.Data all'interno di .NET o la libreria Python pymssql all'interno delle applicazioni Python. Se richiedi l'uso di dati spaziali, i livelli di query sono la soluzione migliore. L'unico avvertimento con i livelli di query è che funzionano solo con i dati archiviati utilizzando i tipi di dati spaziali (non il tipo SDEBINARY standard).


Questo sta iniziando a diventare intenso. Immagino di dover valutare più attentamente le mie esigenze. Non avrò bisogno di dati "spaziali", se con ciò intendi cose come i poligoni e i punti / le linee stesse, ma semplicemente i valori nei campi testo / intero.
Nathanus,

Se è necessario restituire i tipi di geometria, utilizzare l'accesso ArcObjects / arcpy standard. Se tutto ciò che stai facendo è accedere ai dati "tabulari" (nessun tipo di spazio coinvolto), effettua semplicemente le chiamate al database usando SqlConnections regolari (per SQL Server - il tuo tipo di connessione può variare). I risultati sono più flessibili di quello che ottieni da ICursor. Se capisco la tua domanda e sei limitato a utilizzare il calcolatore di campo, non sarai in grado di utilizzare SQL non elaborato.
SagebrushGIS
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.