Identifica i punti in un file di forma che non hanno altri punti entro x km con QGIS


11

Questa è probabilmente una domanda ingenua ma sto lottando come nuovo utente per QGIS.

Ho un file di forma molto grande (275.000 punti, ma posso dividerlo in circa 10 sottoregioni se necessario per un'elaborazione più veloce).

Voglio identificare tutti i punti che non hanno altri punti entro 200 metri e quindi codificare ciascuno di quei punti con il valore "unico" in un campo del file.

Per tutti gli altri punti che fanno parte dei cluster locali, desidero quindi codificarli come "raggruppati".

Dopo averlo ottenuto, desidero quindi selezionarne uno solo per ciascun cluster su base casuale da conservare nel set di dati, scartando gli altri.

Attualmente non riesco a raggiungere il passaggio 1, quindi qualsiasi assistenza sarebbe benvenuta.

Risposte:


0

Puoi anche provare un self join con il plug-in NNJoin in QGIS.

Per ogni funzione del livello di input troverà la funzione più vicina (escludendo se stessa in caso di auto-unione) e includerà la distanza e tutti gli attributi della funzione più vicina nel set di dati generato. Ci vorrebbe un po 'di tempo per il tuo set di dati (ho provato con un set di dati punto con circa 175000 funzionalità, e questo richiede alcuni minuti ...).


9

Puoi usare Vettore> Strumenti di analisi> Matrice della distanza e un join per ottenere ciò che chiedi.

Userò QGIS dati di esempio strato di aeroporto per esemplificare. Questo è un piccolo set di dati, quindi non sono sicuro di come andrà con un shapefile di 275000 punti.

1. Crea una matrice di distanza usando il tuo livello come destinazione e come destinazione.

Non dimenticare di selezionare "Usa solo i punti target (k) più vicini" e impostalo su 1.

inserisci qui la descrizione dell'immagine

2. Apri CSV con aggiungi livello di testo delimitato

Scegli "Virgola" come delimitatore e imposta la definizione della geometria come nessuna geometria

inserisci qui la descrizione dell'immagine

3. Creare un join nel livello originale con la tabella appena creata

inserisci qui la descrizione dell'immagine

4. Utilizzare il calcolatore di campo per popolare un campo con i valori desiderati

Grazie al join, ora abbiamo accesso ai valori della tabella delle distanze all'interno della tabella degli attributi degli aeroporti, quindi è abbastanza semplice creare un nuovo campo e popolarlo con valori "raggruppati" e "unici" a seconda dei valori della matrice della distanza . a causa dei miei dati di esempio ho usato il valore 1200000 (1200 km), dovresti adattarlo al tuo caso (200).

inserisci qui la descrizione dell'immagine

Alla fine il tuo livello dovrebbe avere un nuovo campo chiamato point_type con valori diversi in base alla distanza minima dal punto più vicino.

inserisci qui la descrizione dell'immagine


Sembra una soluzione elegante. Tuttavia ho una complicazione. So che ci sono alcuni punti che hanno posizioni IDENTICHE (questi derivano dai sinonimi dei nomi durante l'acquisizione dei dati originali). In un caso ho identificato 3 sullo stesso punto. Penso che la tua soluzione presupponga (sensibilmente) che tutti i punti siano posizionati in modo univoco. Esiste un modo ovvio in cui posso esaminare la mia copertura per eliminare prima i punti della stessa posizione?
Leigh Bettenay,

@LeighBettenay Se questa risposta affronta la tua domanda originale, penso che dovresti accettarla (segno di spunta verde), per premiare lo sforzo dei rispondenti e ricercare / porre il tuo requisito aggiuntivo come una nuova domanda. +1 per un'ottima prima domanda!
PolyGeo

@PolyGeo Siamo spiacenti, sono nuovo di zecca in questo forum e non conosco il protocollo. Felice di "spunta verde" una risposta meravigliosa ma purtroppo non so come !!
Leigh Bettenay,

Basta fare clic sul segno di spunta grigio sotto la votazione della domanda (nell'angolo sinistro della domanda). Grazie
Alexandre Neto,
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.