Unire più record a una singola funzione usando QGIS?


25

Sto cercando di creare un join / relazione in QGIS in cui ho uno shapefile di edifici e al quale vorrei unirmi a una tabella non spaziale (.csv) contenente persone che lavorano in ogni edificio. Quindi ho più record nella mia tabella che vorrei poter unire alle mie singole funzionalità nel mio shapefile. Posso solo eseguire un join in QGIS in cui il primo record viene unito alla funzione shapefile (ovvero costruzione) ma i record successivi vengono rimossi.

Qualcuno potrebbe farmi sapere come completare questa unione / relazione in QGIS?


Ho avuto una domanda simile qui gis.stackexchange.com/questions/5797/… RT plugin SQL Layer e sono stati suggeriti i plug-in eVis. Ho usato il plug-in eVis ma non era la soluzione ideale.
Ando,

2
Sto avendo lo stesso problema e in effetti unirmi ai tavoli di lavoro. Il trucco è unire le tabelle con più valori alla tabella con il singolo valore (qui, da persona a costruzione, piuttosto che viceversa). Il problema, per quanto ne provo, è che, facendo questo, non puoi quindi cercare ed esportare il risultato come un file georeferenziato, che è un bugger (almeno per me). Un modo per aggirare questo problema? marc

Qual è il risultato finale che vuoi ottenere? Anche se riesci a fare un join, vuoi presentarlo su una mappa? Fare statistiche? A seconda di ciò, è possibile seguire flussi di lavoro diversi, ma l'utilizzo di un database è in genere una buona idea se si desidera creare join.
johanvdw,

Risposte:


15

Ho risolto questo problema utilizzando QGIS 1.7.0 salvando innanzitutto il livello vettoriale come tabella di valori separati da virgola (CSV) con il campo della geometria convertito in testo noto. Per fare ciò, il campo del livello della finestra di dialogo "Salva livello vettoriale come ..." deve leggere GEOMETRIA = AS_WKT per creare un campo di testo noto della geometria con la colonna denominata WKT.

Il file di geometria CSV è stato quindi unito alla tabella degli attributi non geometrici in un join uno-a-molti nella scheda Join proprietà della tabella degli attributi non geometrici.

Il join risultante è stato salvato come un altro file CSV della geometria.

Quando questa tabella è aperta in QGIS, ogni record di attributo era rappresentato dalla sua geometria vettoriale appropriata.

Nel fare tutto ciò, ho scoperto che Il plug-in di testo delimitato non è necessario per aprire un file di geometria CSV se i delimitatori sono virgole e il campo della geometria WKT è denominato WKT.

Per i dettagli su come eseguire questa operazione, consultare il mio tutorial su http://georgiawildlife.com/node/2849 .


Buon approccio, ho fatto una cosa simile solo usando ogr2ogrper creare i file CSV dai Shapefile. Quindi un semplice script R per unire i file sul campo comune che volevo e riscrivere in CSV. Quindi di ogr2ogrnuovo per creare lo shapefile unito.
vpipkt,

1
Questo può essere valutato il più alto, ma il processo previsto per questo è risposto da @underdark di seguito. Questo è un trucco e non è affatto l'opzione migliore, è lento e inefficiente e si traduce in file più grandi e più passaggi.
nittyjee,


7

In QGIS 1.7 esiste un nuovo motore per Joins (lo trovi nelle proprietà del vettore).

Le tabelle senza geometria ora possono essere aggiunte a un progetto come qualsiasi altro livello (vettoriale).


7

A partire dalla versione 2.2 QGIS supporta relazioni uno-a-molti. Definirli nelle Proprietà del progetto, tuttavia, non nelle Proprietà del livello vettoriale. Quindi i record correlati verranno visualizzati nella Tabella degli attributi del livello o Identificazione dei risultati tramite il modulo.

Vedi la risposta e il link alla buona guida qui .


4

Partecipa a LibreOffice Base.

Non puoi superare il fatto che stai cercando di gestire una relazione da 1 a molte.

Per il non spaziale al non spaziale vale la pena di imparare. Trovo che il trucco più grande sia assicurarsi che i campi dell'attributo join abbiano esattamente gli stessi termini.

Apri i dati posizionati nello spazio come layer in QGIS, quindi seleziona tutti i record nella tabella degli attributi in QGIS (cancella selezione, inverti selezione) e copia questi in un nuovo foglio in LibreOffice Calc. Il primo campo è WKT, che è una descrizione della funzione che può essere universalmente utilizzata in GIS. Calc ti darà una finestra di dialogo per importare la tabella incollata, scegliere la scheda delimitata, assicurarti che la virgola non sia spuntata in quanto masticherà il campo WKT in bit. Quindi evidenzia questa tabella in Calc, passa a Base, evidenzia l'icona Tabelle a sinistra e incolla. Base passerà attraverso una finestra di dialogo per importare la tabella. Il campo WKT può essere mantenuto attraverso il join e quando il file viene importato nuovamente in QGIS come .csv, questi vengono utilizzati per riposizionare le funzionalità. Ricorda solo la proiezione.

In questo modo avrai il pieno controllo del join e potrai farlo in "reverse". Per eseguire i join in Base, assicurarsi che il campo dati univoco (1) sia una chiave primaria e quindi si punti su "molti" se si ha familiarità con un concetto da 1 a molti o da 1 a n. I join vengono creati creando relazioni | STRUMENTI |. Come ho già detto, probabilmente vorrai dare un calcio a qualcuno quando trovi che i campi di join hanno le stesse informazioni ma hanno usato testo o sintassi diversi per rappresentarla.

hth


2

Non credo sia possibile collegare tabelle con una relazione da 1 a molte in QGIS. In alternativa, potresti provare gvSIG. Qui puoi creare da 1 a molti link. Dopo aver creato il collegamento, selezionando una funzione nella mappa verranno evidenziati tutti i record correlati nella tabella collegata.


1
Dall'introduzione dei livelli virtuali, questa risposta non è più corretta.
underdark
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.