Aggancia automaticamente le linee ai punti?


19

Ho due shapefile vettoriali: un file è costituito da punti che rappresentano i tombini e l'altro è un file polilinea che rappresenta le condotte che conducono da e verso i tombini. Ho bisogno di agganciare le linee entro una distanza specificata al tombino più vicino.

C'è un modo semplice per farlo senza farlo manualmente?

linee -> punti

Aggiornare

Come per Alexandre, ho esportato i miei shapefile in formato spazialite. Non sono sicuro di cosa succederà dopo.

inserisci qui la descrizione dell'immagine

Aggiornamento n. 2 Ho creato un nuovo file db e importato gli shapefile nel nuovo db usando spatialite-gui, ho modificato la mia query SQL ma come puoi vedere ottengo un errore "nessuna colonna del genere: f.geom"

inserisci qui la descrizione dell'immagine


In una tabella spaziale (layer) di Spatialite, le geometrie delle caratteristiche vengono salvate in un attributo. I nomi possono essere diversi. Nella tabella "pipe" quell'attributo è chiamato Geometria. Aggiornerò la mia risposta assumendo che mh sia anche un attributo Geometry.
Alexandre Neto,

Ho ricevuto un errore "nessuna di queste funzioni: ST_Snap". Sto usando QGIS 1.8 su Windows 7 64 bit.
GreyHippo,

Che Spatialite hai? Puoi controllarlo in QGIS> Aiuto> Informazioni su
Alexandre Neto,

"nessuna colonna del genere: f.geom" - prova con f.Geometry
vinayan

La mia versione di Spatialite è 3.0.1
GreyHippo il

Risposte:


26

Se sei disposto a inserire i tuoi dati in Postgis (o Spatialite ), puoi utilizzare ST_Snap per fare ciò che desideri.

Usa semplicemente il livello linee \ tabella come input e il livello punti come riferimento e imposta la tolleranza. Qualcosa come questo:

SELECT
    f.gid as gid,
    ST_Snap(f.Geometry, g.Geometry, 2) as geom
FROM
    pipe as f,
    (SELECT ST_Collect(Geometry) as Geometry
     FROM mh) as g

Il risultato è questo:

inserisci qui la descrizione dell'immagine

È quindi possibile aggiornare le geometrie utilizzando l'identificatore di funzione.


Dove metterei il codice "Seleziona ... da ..."? Che cosa significa "utilizzando l'identificatore di funzione"?
GreyHippo,

Dopo aver importato i file nel database (postgis o spatialite), è possibile utilizzare DB Manager per visualizzare le tabelle del database ed eseguire la query SQL (il codice) in SQL Window, quindi caricarlo nell'area di disegno. Dimmi se funziona per te, e poi faremo la parte di aggiornamento.
Alexandre Neto,

Alexandre, vedi aggiornamento sopra. Ho esportato il file in due file spazialliti.
GreyHippo,

Dovresti inserire entrambi i file nello stesso database Spatialite, trascina semplicemente "pipe" nel database "mh.sqlite". Dopo di che aggiorna il codice SQL per cambiare "punti" in "mh" e "linee" in "pipe". Adatta anche "gid" al tuo ID "pipe". Successivamente è possibile eseguire e caricare i risultati.
Alexandre Neto,

3

Non so molto su QGIS o GRASS, ma alcuni googling veloci hanno prodotto v.clean in GRASS dovrebbe fare il trucco.

Dai un'occhiata a questo post e a questo .

Alternative a QGIS e GRASS:

Se dovessi farlo in ArcGIS, probabilmente memorizzerei i miei dati in un set di dati delle caratteristiche in un file geodatabase e creerei una topologia per identificare le aree in cui il livello punto non si trovava sugli endpoint delle linee. È quindi possibile correggere gli errori utilizzando Error Inspector .

Ma probabilmente la soluzione più semplice e veloce sarebbe in FME. Puoi provare a utilizzare lo strumento Snapper o, meglio ancora, lo strumento AnchoredSnapper . Se si utilizza AnchoredSnapper, assicurarsi che il tipo di aggancio sia Aggancio punto finale. Ovviamente, avrai bisogno di una licenza per FME. Ma puoi scaricare una versione di prova di 14 giorni se non ne hai una.


Ho guardato v.clean ma usa solo un livello, ho bisogno di confrontare un livello con un altro. Inoltre, ero più alla ricerca di un'opzione QGIS / opensource.
GreyHippo,

1
@GreyHippo, GRASS è opensource
Quadri21

1
So che GRASS è opensource ma le altre opzioni no.
GreyHippo,


-1

Modo manuale

Qgis -> Impostazioni -> Opzioni di snap (e non sono sicuro, ma potrebbe essere necessaria l'estensione CadTools) e abilitare la modifica topologica.

Modo automatico

v.clean che si trova negli strumenti GRASS nella toolbox SEXTANTE in QGIS. Se hai PostGIS 2.0, allora ST_Snap e ST_SnapToGrid () (E non c'è motivo per cui non puoi usarlo, è un ottimo strumento spaziale)

Modo commerciale

Strumento FME e MRF (estensione commerciale, avevo una versione di valutazione. Era molto buona).

Inoltre sono interessato alla gestione delle condotte idriche / fognarie con strumenti open source, hai qualche suggerimento?


Penso che sia ciò che GreyHippo intende "eseguendolo manualmente". Basta usare le opzioni Snapping, dovrai spostare manualmente ogni nodo penzolante per attivare lo snapping. Oppure mi sfugge qualcosa?
Jake,

no. ero cieco.
simplexio,

Simplexio, NON voglio farlo manualmente. Speravo in un plugin o in un processo che non conosco.
GreyHippo,

Non pensavo che potresti usare GRASS v.clean su due livelli?
GreyHippo,

1
se ricordo bene può sistemare linee troppo brevi. vedi, il problema che hai non è che i tombini non sono posizionati correttamente, è che la tua rete fognaria non è topologicamente corretta. E questo ha bisogno solo dello strato di tubi. Ogni sistema di rete di utilità che ho visto presume che ci sia un tombino in ogni incrocio di fognature. Questo rapporto suppone che tu voglia avere una topologia corretta.
simplexio,
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.