Uno-a-molti si unisce a una classe di caratteristiche a una tabella


10

Sto usando ArcMap 10.2.2 con una licenza avanzata. Ho usato ArcMap per altre analisi di base, ma sono abbastanza nuovo per il programma e ho solo competenze di codifica di base, senza esperienza SQL al di fuori di query molto basilari utilizzando i compilatori di codice SQL in ArcMap.

Ho poligoni delle gamme geografiche delle specie e ho una tabella con un elenco di agenti patogeni / malattie trasportati da quelle specie. Alcune specie portano più agenti patogeni. In un mondo ideale, unirei i poligoni degli intervalli alla tabella delle specie + agenti patogeni e terrei i dati poligonali / spaziali, ma non sembra che ci sia uno strumento GIS per fare questo ( successivamente contano i patogeni sovrapposti, quindi è importante che ogni combinazione specie-patogeno abbia la sua caratteristica, piuttosto che una caratteristica che abbia le informazioni per più agenti patogeni). Ecco come sono i miei dati (# 1 e # 2, # 3 è per dopo):

Tabella degli attributi per le caratteristiche spaziali:

tabella degli attributi per le caratteristiche spaziali

Tabella senza dati spaziali:

tabella senza dati spaziali

(Si noti che questi non sono dati reali e che le combinazioni patogeno-specie potrebbero non essere reali. In realtà ho 115 poligoni e 519 righe di tabella. Le specie trasportano ovunque tra 1-40 agenti patogeni e quindi le specie hanno ovunque tra 1-40 righe in il mio tavolo)

Come bonus aggiuntivo, a causa delle future analisi che devo fare, vorrei idealmente essere in grado di fare questo join uno-a-molti in modo da poter mantenere una colonna aggiuntiva di dati dalla tabella (vedi sotto per un esempio di come potrebbe apparire). Tuttavia, questo è meno importante perché se riesco a capire come eseguire il join, posso semplicemente ripetere l'analisi.

tabella senza dati spaziali, con campo aggiuntivo

Ci sono alcune soluzioni che ho riscontrato a questo problema, ma non hanno funzionato per me per i motivi elencati di seguito:

Soluzione 1: blog di David Aalbers - Sono troppo alle prime armi per capire come modificare lo script più recente e capire come importarlo in ArcMap. Ho provato lo script precedente e ha appena generato una tonnellata di poligoni vuoti intitolati test, test_1, test_1_1, test_1_1_1, ecc.

Soluzione 2: One-To-Many Join : ho provato a utilizzare lo strumento Crea tabella query (e non ho alcuna conoscenza SQL, anche se ho usato il generatore di espressioni) e ho ottenuto ERRORE 000383: Problema con una tabella, impossibile trovare l'area di lavoro e Impossibile eseguire (MakeQueryTable). Tutti i miei file sono nella stessa cartella, ma non si trovano in un geodatabase.


1
Make Query Table funzionerà solo con database
FelixIP

1
Crea tabella query richiede tutti i dati nella stessa fgdb.
Klewis,

Risposte:


22

Per moltiplicare le funzionalità, fai questo (disponibile per coloro che hanno ArcGIS 10.1 o versioni successive).

  1. Posiziona le funzionalità e la tabella nello stesso file geodatabase (devi convertire i file Shapefiles / Excel / DBF nel geodatabase per farlo funzionare).
  2. Assicurati che i tuoi poligoni abbiano un campo ID univoco che verrà conservato (puoi creare un campo Lungo e calcolare l'ObjectID in esso in modo da non perdere il valore dell'ObjectID).
  3. Esegui un join standard della tabella (attributi, nessun dato spaziale) con le caratteristiche (dati spaziali) sul campo corrispondente. Nota che la tabella degli attributi delle caratteristiche (dati spaziali) avrà lo stesso numero di caratteristiche che aveva prima, ma non preoccuparti di ciò, appariranno tutti nel passaggio successivo.
  4. Esporta le funzionalità nello stesso geodatabase di una nuova classe di caratteristiche (fai clic con il pulsante destro del mouse sul livello dal sommario e scegli esporta). Si noti che il numero di funzioni nella tabella degli attributi delle funzioni esportate ora ha il giusto numero di funzioni, lo stesso della tabella originale (con attributi, nessun dato spaziale) o, nel caso di un numero di join molti o molti, un set completo di funzionalità per tutte le combinazioni di funzionalità e relativi record.

Le funzionalità si moltiplicheranno in una nuova classe di funzionalità in cui tutte le funzionalità saranno presenti (anche se non aveva una corrispondenza nella tabella) e dove prima c'era una corrispondenza 1: M, le caratteristiche verranno moltiplicate per creare un 1: 1 corrispondenza di ciascuna funzione a tutte le voci della tabella. Il campo ID univoco creato nel passaggio 2 ti consentirà di mettere in relazione i poligoni moltiplicati con il singolo set poligonale originale. Con la nuova classe di funzionalità di funzionalità moltiplicate è possibile effettuare selezioni sui campi della tabella, riepiloghi, join spaziali, ecc.

Se si desidera generare un valore ID univoco che rappresenti ciascuna combinazione unica di specie e malattia, è possibile utilizzare la versione 10.2 dello strumento descritta in questo post sul blog . Avere questo tipo di chiave consente di utilizzarlo per eseguire join standard a tabelle di riepilogo e statistiche basate su una relazione a più campi come sostituto della creazione di una relazione a più campi effettiva utilizzando un'impostazione Crea tabella di query.

Ecco un buon riferimento da esri: https://support.esri.com/en/technical-article/000001228


Funziona perfettamente se esportato all'interno del geodatabase!
MooseGirl

1
Ho modificato il mio passaggio 4 per affermare che l'esportazione dovrebbe avvenire in una nuova classe di funzionalità nello stesso geodatabase dei dati originali. Seguire tale procedura dovrebbe sempre funzionare, sebbene sia possibile che siano consentite anche alcune variazioni della posizione in cui sono archiviati i dati di origine e di output.
Richard Fairhurst,

Prima era chiaro (anche se le future persone disperate apprezzeranno sicuramente la sua spiegazione), ma in origine non mi ero collegato correttamente alla cartella del geodatabase (o qualcosa del genere) perché non mi avrebbe permesso di esportare nel geodatabase. Ho riavviato e ha funzionato bene.
MooseGirl

1
Ho aggiunto che le funzionalità unite non avranno il giusto numero di attributi e le funzionalità esportate lo avranno. Questo mi ha frustrato molto quando l'ho provato, fino a quando non ho completato tutti i passaggi.
nittyjee,

Sembra che manchi "no" nel n. 3, "... avrà notlo stesso numero di funzionalità ..."
matt wilkie,

-2

Query SQL:

SELECT spp, disease, type
FROM table1, table2
WHERE table1.bimonial = table2.spp;
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.