C'è un modo per rendere le linee con curve morbide (più bezier) in QGIS?


33

Mi sto muovendo dalla creazione di mappe con Illustrator alla creazione di QGIS e dati reali. Una delle cose che non sono stato in grado di ricreare in QGIS sono le linee curve morbide che posso ottenere in Illustrator. Non sto parlando degli stili Join e Cap, ma di come viene rappresentata un'intera linea.

Sto cercando una risposta che non includa l'esportazione come SVG in Illustrator e il completamento della mappa lì.

Inoltre, mi rendo conto che potrebbero essere considerate una rappresentazione imprecisa ma, per la maggior parte, queste mappe sono per dare ai ciclisti un'idea di dove si trovano e non devono necessariamente essere una rappresentazione esatta.

Ecco un esempio di cosa intendo: inserisci qui la descrizione dell'immagine


2
Come vengono archiviati i tuoi dati? La maggior parte dei formati di dati (ad es. Shapefile) non consente gli archi. Ora credo che alcuni database lo facciano.
Darren Cope,

Risposte:


24

Dai un'occhiata al plugin Generalizer, dovrebbe fare quello che vuoi. Il plugin ha opzioni di smoothing che funzionano abbastanza bene.

Non cambia la modalità di rendering delle linee, ma crea invece un nuovo shapefile con lo smoothing (o la semplificazione / generalizzazione) applicato.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Non riesco a trovare questo plugin per QGIS 1.7.3 anche se ho repository di terze parti abilitati. Puoi mostrare come abilitarlo / trovarlo? Sembra interessante e semplice.
Sault,

3
Strano. Dovrebbe essere nel programma di installazione del plug-in in quanto proviene dal repository principale del plug-in QGIS.
Nathan W,

3
Hai ragione, ma dal programma di installazione del plugin Python ho dovuto andare alla scheda delle opzioni e modificare "Plugin consentiti" in: "Mostra tutti i plug-in, anche quelli contrassegnati come sperimentali".
Sault,

Ho finito per giocare con questo plugin un po 'stasera e in realtà ha funzionato meglio per me poiché non dovevo usare un livello GRASS e potevo semplicemente convertire il mio shapefile corrente.
Brian Kelly,

Ho dovuto farlo in due passaggi per la mia digitalizzazione molto dettagliata ma frastagliata: prima semplifica (ad esempio l'algoritmo di Lang) e poi leviga. Ha funzionato a meraviglia.
un diverso ben

16

Utilizzando il plug-in QGIS + GRASS:

Aggiungi la barra degli strumenti di Grass dalla finestra "Gestisci plugin". aggiungi il plug-in degli strumenti per erba a qgis

Le tue linee dovranno essere un vettore di erba, quindi convertile in un mapset GRASS nuovo o esistente.

Dalla barra degli strumenti GRASS, selezionare Strumenti GRASS ... inserisci qui la descrizione dell'immagine

Cerca il modulo: v.generalize ( tutorial WIKI qui )

È quindi possibile scegliere diversi algoritmi di generalizzazione: Strumento GRASS v.generalize selezione algoritmi

Nota gli algoritmi: Chaiken, Hermite o persino Sliding Average. Ce ne sono anche molti altri!

Le differenze sono visibili nelle immagini della wiki: v.generalize semplifica l'esempio delle differenze

da Wiki: "Nota, una differenza tra" Chaiken "e" Hermite "è che le linee prodotte da" Chaiken "" scrivono "le linee originali mentre le linee" Hermite "" circoscrivono "le linee originali come si può vedere nella foto [sopra]. (La linea nera è la linea originale, la linea verde è "Chaiken" e il blu è "Hermite")


Usando uDig + jgrasstools o grass:

Se hai difficoltà a ottenere risultati desiderabili da v.generalize di GRASS, prova l'ultima versione di uDig con jgrasstools . Puoi anche prendere il barattolo di erba dallo stesso posto di jgrasstools.

Una volta installato e avviato uDig, abilitare la casella degli strumenti spaziali : Finestra> Mostra vista> Altro ... abilita toolbox spaziale in uDig

Scollega la barra degli strumenti per una migliore leggibilità (fai clic con il pulsante destro del mouse sulla scheda Spatial Toolbox> Stacca ...): staccare la casella degli strumenti spaziali in uDig

Carica i moduli jgrasstools e grass (opzionali) richiesti: caricamento di jgrasstools / grass in udig

Non dimenticare di impostare i parametri di grass (punta al file eseguibile grass o al file bat su windows o al comando grass in linux cioè, / usr / bin / grass) se carichi anche il file grass jar: impostazione dei parametri dell'erba in uDig

Finalmente! Utilizzando gli strumenti di jgrasstools (non erba) è possibile generalizzare facilmente la linea con Elaborazione vettoriale> LineSmootherJaiTools Elaborazione vettoriale su LineSmootherJaiTools in uDig

Assicurati di impostare correttamente l'input e l'output (funziona solo su Shapefile, quindi non è necessario convertire i tuoi dati in mapset / posizioni per l'erba) : impostazioni di input e output per Spatial Toolbox in uDig

Una volta terminata l'impostazione della tolleranza al livellamento (0,0 - 1,0) e dell'input / output, premere il pulsante Play nella finestra Spatial Toolbox (in alto a destra): riproduci il modulo in Spatial Toolbox per uDig

risultati:
uDig semplifica i risultati di jgrasstools ...


Questo modifica i dati originali o li filtra in un modo prima che QGIS li visualizzi?
Brian Kelly,

Ah, qui si risponde: "Il livellamento (linea) è un processo" inverso "che prende come input una linea e produce un approssimativo più uniforme dell'originale. In alcuni casi, ciò si ottiene inserendo nuovi vertici nella linea originale, e può raggiungere il 4000% del numero di vertici dell'originale. In tal caso, è sempre una buona idea semplificare la linea dopo il livellamento. " da grass.osgeo.org/grass64/manuals/html64_user/v.generalize.html
Brian Kelly

Quindi sembra che questo sia qualcosa che probabilmente applicheresti dopo aver confermato che le tue linee sono tutte corrette e non hai bisogno di ulteriori modifiche (a meno che tu non voglia regolare tutti i vettori aggiuntivi e poi lisciarlo di nuovo)
Brian Kelly

@spline Sì, perché devi lavorare con un "set di dati grass" che è essenzialmente - NON un file di forma, ti consigliamo di assicurarti che il file di forma originale sia completo. Semplificare la linea per eliminare vertici extra è un'opzione, a seconda della lunghezza della linea e della quantità di vertici presenti nella curva di Bezier .
Sault,

Oh, parola mia, l'erba non ha senso per me ... nomi delle mappe, nomi delle località, base dati, PERMANENTE ... Ho cercato di "scoprire" come usare questa risposta (senza ammettere che non avevo alcuna conoscenza precedente dell'erba) e ho fallito miseramente. I file sembrano andare dove meno te lo aspetti (anche se immagino che non siano file?), Non sono riuscito a scegliere il mio livello convertito nella finestra di dialogo generalizza dopo aver finalmente scoperto come selezionare una mappa (non che io sappia cosa si intende per una mappa) ... incubo. Sembra la merce se potessi risolvere tutto però :)
un diverso ben

1

C'è un altro modo, forse così solo dalla versione QGIS 2.0:

In Elaborazione> Casella degli strumenti è possibile accedere agli strumenti GRASS e SAGA. Per il livellamento, troverai v.generalize, ma anche la semplificazione della linea di SAGA. Questi strumenti funzionano su file di forma regolari, quindi non è necessario alcun vettore di erba:

inserisci qui la descrizione dell'immagine

La modalità batch non è stata ancora risolta (fai clic con il tasto destro nel menu di destra e scegli "Esegui come batch", poiché devi scegliere manualmente ogni singolo file. Il plug-in generalizzatore menzionato più sopra ti permette di scegliere molti file più semplicemente , ma ora funziona solo se non si specifica un file in cui salvare, altrimenti il ​​plug-in si arresta in modo anomalo.


1

C'è un algoritmo di geometria Smooth sotto Processing Toolbox -> QGis geoalghoritms -> Vector.

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.