Vai al contenuto
Torna al blog
QGIS
Tutorial
GeoAI

Da raster a vettore in QGIS: ogni metodo e quando funziona

Tre pannelli: un raster di copertura del suolo disegnato come una griglia di pixel colorati, lo stesso confine tracciato da polygonize come una scala e di nuovo lo stesso confine come una linea verde liscia dopo dissolve, un filtro per area, simplify e smooth.
Tre pannelli: un raster di copertura del suolo disegnato come una griglia di pixel colorati, lo stesso confine tracciato da polygonize come una scala e di nuovo lo stesso confine come una linea verde liscia dopo dissolve, un filtro per area, simplify e smooth.

Per convertire un raster in poligoni vettoriali in , apri Raster > Conversion > Polygonize (Raster to Vector), scegli la banda, assegna un nome al campo di output ed esegui. Ottieni un poligono per ogni gruppo connesso di pixel che condividono un valore, con quel valore scritto nella tabella degli attributi. È la risposta giusta per un raster classificato e quella sbagliata per una fotografia. La maggior parte dei problemi nasce dal non sapere quale dei due si ha davanti.

Sviluppiamo un plugin QGIS presso TerraLab chiamato AI Segmentation. È una riga nella tabella finale di questa pagina, descritta come le altre.

Cosa significa da raster a vettore

Un raster è una griglia di pixel. Un vettore è un insieme di punti, linee e poligoni con coordinate e attributi. Convertire l'uno nell'altro significa decidere dove si trova un confine, e una griglia di pixel non ha confini propri oltre ai bordi delle sue celle.

Ogni metodo qui sotto differisce solo per ciò che considera un bordo. Polygonize usa ogni punto in cui due pixel vicini hanno valori diversi, contour usa una quota scelta e un modello di segmentazione usa il punto in cui termina un oggetto. Ecco perché solo l'ultimo funziona su una fotografia.

Scegli il metodo

Cosa haiIl metodo che funzionaIl costo
Raster classificato o tematico (copertura del suolo, una riclassificazione della pendenza, una maschera)Raster > Conversion > Polygonize (Raster to Vector)Gratuito, nel QGIS di base
Raster continuo (NDVI, pendenza, una banda di riflettanza)Prima Reclassify by table, poi polygonizeGratuito, nel QGIS di base
DEM o qualsiasi superficie altimetricaRaster > Extraction > Contour, oppure Contour PolygonsGratuito, nel QGIS di base
Mappa cartacea scansionata o una planimetriaGRASS r.thin più r.to.vect, oppure uno strumento di tracciamento esterno a QGIS. Nulla nel QGIS di base lo fa beneGratuito e lento. Esiste il tracciamento AI a pagamento
Ortofoto, immagini da drone o satellitariUn modello di segmentazione. Polygonize non si applicaI plugin gratuiti richiedono una scheda NVIDIA. I plugin cloud hanno piani gratuiti, poi un abbonamento

La maggior parte dei lettori ha bisogno della prima riga e può fermarsi dopo le due sezioni successive.

Polygonize, la risposta predefinita

L'algoritmo QGIS è Polygonize (raster to vector), id gdal:polygonize, e utilizza l'utility GDAL gdal_polygonize. Crea un poligono per ogni regione connessa di pixel che condividono un valore comune e scrive quel valore in un attributo.

La pagina della documentazione di QGIS 3.44 per la conversione di raster GDAL, con la voce Polygonize (raster to vector), il menu predefinito e la tabella dei parametri con INPUT, BAND, FIELD ed EIGHT_CONNECTEDNESS
Il riferimento per ogni valore predefinito citato qui sotto: la documentazione di QGIS 3.44 per gdal:polygonize, acquisita il 23 agosto 2026. Menu predefinito, Raster poi Conversion.

Open the tool

Raster > Conversion > Polygonize (Raster to Vector). Si trova anche nel Processing Toolbox, sotto GDAL, Raster conversion.

Pick the band

Banda 1, a meno che le tue classi non si trovino altrove. Una sola banda, quindi un raster RGB deve essere ridotto a una singola banda di classi prima di questo passaggio.

Name the field

DN è il valore predefinito. Rinominalo con qualcosa che riuscirai ancora a capire tra sei mesi, come landcover_code.

Decide on 8-connectedness

Disattivata per impostazione predefinita, quindi i pixel devono condividere un bordo completo per unirsi. Attivala e si uniranno anche i pixel che si toccano diagonalmente. Sulle geometrie diagonali sottili, lasciarla disattivata divide una singola geometria in una catena di poligoni.

Save to a real file

Il valore predefinito è un layer temporaneo. Su un raster grande questo produce decine di migliaia di geometrie, quindi salva direttamente in un GeoPackage.

La finestra di dialogo Polygonize (Raster to Vector) di QGIS. Il layer di input è Land cover 10 m [EPSG:32631], il numero di banda è Band 1 (Palette), il campo da creare si chiama landcover_code, Use 8-connectedness non è selezionato e l'output viene scritto in un GeoPackage.
I quattro parametri importanti, su un ritaglio ESA WorldCover da 10 m della valle della Drome. Il campo è stato rinominato da DN a landcover_code e l'output va direttamente in un GeoPackage invece che in un layer temporaneo.

Due cose ti fanno risparmiare tempo.

Imposta un valore NoData sulla classe che non vuoi. GDAL usa la maschera di validità della banda, quindi i pixel NoData vengono saltati invece di diventare un enorme poligono di sfondo che avvolge tutto il resto. È il problema più comune dell'output di polygonize, ed è una proprietà del raster, non un'impostazione dello strumento.

La pagina di riferimento di gdal_polygonize su gdal.org, con la sintassi e le opzioni -8, -nomask e -mask
L'utility GDAL sottostante all'algoritmo QGIS, acquisita il 23 agosto 2026. Il flag -nomask è all'origine del comportamento della maschera di validità.

Assicurati che la banda sia di tipo intero. gdal:polygonize scrive sempre un campo intero, quindi converte una banda float durante l'input. Questo fallisce in due modi diversi a seconda di come il raster memorizza i valori, e nessuno dei due casi produce un avviso. Float32 passa prima da Reclassify by table, come spiegato nella prossima sezione.

Il problema dei bordi a scalini e come correggerlo

Polygonize traccia i bordi dei pixel. Nient'altro. Quindi un bordo diagonale di un campo torna come una serie di scalini ad angolo retto, uno per pixel, e una classificazione Sentinel da 10 m ti restituisce scalini da 10 m.

Output di polygonize sopra un raster di copertura del suolo da 10 m a circa 1:1.500. Una porzione di terreno coltivato rosa si trova tra la copertura arborea verde e il prato giallo, e ogni bordo diagonale è una serie di scalini quadrati larghi un pixel.
Output grezzo di gdal:polygonize, 3.551 poligoni, sopra il raster ESA WorldCover da cui proviene. Conta gli scalini lungo una diagonale: ognuno è un pixel da 10 m.

È un output corretto. Lo strumento disegna esattamente ciò che dice il raster. Semplicemente non sembra una mappa, e nessuna impostazione dentro polygonize lo cambia. La correzione consiste in quattro algoritmi di geometria vettoriale, eseguiti successivamente in quest'ordine.

1. Dissolve (native:dissolve). Imposta come campo di dissolvenza il campo delle classi appena creato. I poligoni confinanti della stessa classe vengono uniti in una geometria per classe. Eseguilo per primo, mentre la geometria è ancora esatta, perché unire bordi semplificati lascia sliver lungo ogni confine condiviso. Se vuoi mantenere separate le singole porzioni invece di una geometria multipart per classe, seleziona Keep disjoint features separate nei parametri avanzati.

2. Filtra per area (native:extractbyexpression, in Vector selection). Espressione:

$area > 500

Le unità sono quelle del CRS del layer, quindi usa un CRS proiettato o il numero non significa nulla. Imposta la soglia in base a quella che rappresenta una porzione reale nei tuoi dati. In una classificazione da 10 m, 500 m2 equivalgono a cinque pixel, più o meno il punto in cui termina il rumore e iniziano le geometrie. La figura qui sotto usa 2.000 m2 sullo stesso raster, perché con 500 gli sliver rimasti si intersecavano dopo la semplificazione. Guarda l'istogramma delle tue aree invece di copiare uno dei due numeri. Se il raster lascia pixel singoli di un'altra classe all'interno di una porzione, native:deleteholes dopo questo passaggio li rimuove.

3. Simplify (native:simplifygeometries). La tolleranza predefinita è 1.0 nelle unità del layer. Impostala all'incirca alla dimensione di un pixel e gli scalini collasseranno in segmenti diritti, spostando il bordo meno di quanto un lettore possa vedere. Il menu del metodo offre Douglas-Peucker (basato sulla distanza), Visvalingam (basato sull'area) e snap to grid. Visvalingam mantiene meglio la forma delle geometrie piccole quando aumenti la tolleranza.

4. Smooth (native:smoothgeometry). Solo per elementi realmente curvi: corsi d'acqua, coste, porzioni di vegetazione. Offset ha come valore predefinito 0.25, mentre le iterazioni controllano quanto diventa arrotondata. Imposta Maximum node angle to smooth su 90 e ogni angolo più acuto resterà tale. In questo modo lo strumento non arrotonda gli angoli di edifici e particelle.

Se vuoi anche porzioni solide senza vuoti interni, native:deleteholes rimuove i buchi sotto un'area minima, mentre 0.0 li rimuove tutti.

La stessa estensione di copertura del suolo dopo la pulizia. I contorni dei poligoni ora seguono curve lisce attraverso la griglia di pixel, ancora visibile sotto, e i piccoli poligoni di rumore sono scomparsi.
Stessa estensione, stessa simbologia, dopo Dissolve, un filtro per area a 2.000 m2, deleteholes, Simplify a 10 m e Smooth con un angolo massimo del nodo pari a 90. Il conteggio scende da 3.551 a 724 e gli scalini diventano curve.

Riclassifica prima quando il raster è continuo

Polygonize su un raster continuo produce uno di due risultati errati, a seconda di come sono memorizzati i valori.

Memorizzato come numeri interi scalati, come vengono effettivamente distribuiti i prodotti NDVI, ottieni un poligono per quasi ogni pixel, perché quasi nessuna coppia di pixel condivide un valore. Abbiamo misurato 39.801 poligoni su 40.000 pixel in una scena Sentinel-2.

Memorizzato come float grezzi tra -1 e 1, la conversione a intero appiattisce ogni valore a -1, 0 oppure 1 prima che inizi il tracciamento. La stessa scena è tornata come 238 poligoni in due classi. Sembra un risultato pulito, ma non lo è: i tuoi dati sono spariti.

Lo stesso vale per pendenza, quota, temperatura o una banda di riflettanza grezza. Lo strumento non ha fallito in nessuno dei due casi. Traccia i confini tra valori interi e un raster continuo non ha valori interi utili da tracciare.

Una vista ravvicinata di un raster NDVI a circa 1:1.000 su terreni agricoli, con una porzione boscata verde scuro accanto a campi chiari. Ogni pixel da 10 m ha il proprio contorno poligonale, quindi l'inquadratura appare come una griglia. La voce nel pannello dei layer è ndvi_polygonized con 39801 geometrie.
NDVI da una scena Sentinel-2 dell'11 agosto 2025, memorizzato come numeri interi scalati nel modo in cui vengono distribuiti i prodotti NDVI, poi polygonize eseguito direttamente. 39.801 poligoni su 40.000 pixel, perché quasi nessuna coppia di pixel contiene lo stesso valore.

Trasforma prima la superficie continua in classi con Reclassify by table, id native:reclassifybytable. La tabella di riclassificazione contiene tre colonne, minimo, massimo e nuovo valore, e accetta -inf, inf e nan per NoData. Una maschera della vegetazione è composta da tre righe:

MinimumMaximumValue
-inf0.21
0.20.52
0.5inf3
La finestra di dialogo Reclassify by Table di QGIS con il raster NDVI Float32 come input e i Parametri avanzati aperti, che mostrano Range boundaries impostato su min less than value less than or equal to max e Output data type impostato su Byte. Sopra è aperto l'editor della tabella fissa con tre righe: da meno infinito a 0.2 dà 1, da 0.2 a 0.5 dà 2, da 0.5 a infinito dà 3.
La maschera della vegetazione a tre righe, inserita nella tabella fissa. Nella sezione avanzata ci sono due valori predefiniti che vale la pena cambiare: Output data type, qui impostato su Byte, e Range boundaries.

Nei parametri avanzati devi cambiare due valori predefiniti. Output data type è impostato su Float32, quindi seleziona Byte o Int16 e polygonize si comporterà correttamente. Range boundaries è impostato su min < value <= max, e decide da quale lato di 0.2 finirà un pixel esattamente uguale a 0.2.

Poi esegui polygonize sul raster riclassificato e applica la pulizia descritta sopra.

Contour per un DEM

Per la quota, non usare polygonize. Usa Contour in Raster > Extraction > Contour, id gdal:contour. L'intervallo predefinito è 10.0 nelle unità del raster, e la quota viene inserita per impostazione predefinita in un campo chiamato ELEV.

La finestra di dialogo Contour di QGIS con Copernicus DEM 30 m come layer di input, intervallo tra le curve di livello impostato su 10, nome dell'attributo ELEV e Parametri avanzati aperti, con Produce 3D vector non selezionato.
gdal:contour su una tile Copernicus DEM 30 m sopra la Drome. Intervallo 10 nelle unità del raster, quota scritta in ELEV e Produce 3D vector lasciato disattivato.

Seleziona Produce 3D vector se vuoi l'altezza su ogni vertice. Lascialo disattivato per una mappa stampata, perché molti software eliminano silenziosamente la coordinata Z.

Il suo algoritmo fratello gdal:contour_polygon restituisce fasce riempite tra due quote invece di linee, con ELEV_MIN e ELEV_MAX su ogni poligono. È quello che vuoi per una mappa ipsometrica o un'estensione allagata, e ti evita di polygonizzare manualmente un DEM riclassificato.

Due pannelli della stessa area collinare. A sinistra, curve di livello marroni ogni 10 m sopra un hillshade grigio, con le curve a 50 m più spesse ed etichettate 400, 450, 500, 550, 600 e 650. A destra, lo stesso terreno come fasce riempite che vanno dal verde delle valli al marrone delle cime.
Stesso DEM, stesso intervallo di 10 m, due algoritmi. gdal:contour produce linee da etichettare usando ELEV. gdal:contour_polygon produce fasce riempite con ELEV_MIN ed ELEV_MAX, ciò che serve a una mappa ipsometrica.

Le curve di livello ottenute da un DEM lidar risultano rumorose perché è rumorosa la superficie. Smussa il raster prima del passaggio Contour, non le linee dopo. Smussare le linee fa sì che si intersechino.

Mappe cartacee scansionate: QGIS non ha ArcScan

Se arrivi da ArcGIS e cerchi l'equivalente QGIS di ArcScan, non esiste. Il tracciamento interattivo del raster, in cui fai clic su una linea della scansione e lo strumento la segue, è una lacuna reale. Preferisco dirlo chiaramente invece di lasciarti cercare il menu.

Quello che si usa davvero, più o meno in ordine di efficacia:

  • GRASS, incluso nella maggior parte degli installer di QGIS. Soglia la scansione per ottenere un raster binario, assottiglialo con r.thin, poi esegui r.to.vect con il tipo di geometria line. La documentazione GRASS avverte che questo crea nodi in eccesso alle giunzioni e diramazioni sospese, quindi prevedi una fase di pulizia. È gratuito e funziona su linee pulite.
  • Potrace o AutoTrace, esterni a QGIS. Da bitmap a vettore, poi reimporta il risultato e georeferenzialo. Funziona bene sulle scansioni ad alto contrasto, ma non sa nulla della geografia.
  • Bunting Labs AI Vectorizer (voce nel repository QGIS). Un plugin QGIS che completa automaticamente una linea mentre digitalizzi, pensato proprio per mappe geologiche, as-built e planimetrie. Il limite: invia porzioni di raster ai propri server, non offre un piano gratuito oltre la prova e i prezzi pubblicati partono da 29 dollari al mese, secondo i dati del 23 agosto 2026.

Per una manciata di geometrie su un singolo foglio, la digitalizzazione manuale con lo snapping attivo resta la soluzione migliore. Non costruirei un flusso di tracciamento per meno di una cinquantina di geometrie.

Quando polygonize è lo strumento sbagliato

Applica polygonize a un'ortofoto e ottieni rumore, perché non c'è nulla da sottoporre a soglia. Un tetto rosso e un'auto rossa hanno valori di pixel simili. Un tetto grigio e una strada grigia hanno valori di pixel simili. Le classi esistono nella tua testa, non nel file.

Estrarre oggetti da immagini fotografiche richiede un modello che abbia imparato l'aspetto degli oggetti. Questi strumenti scrivono direttamente i vettori, quindi polygonize non entra mai in gioco. Ecco cosa installare e cosa richiede ciascuno.

StrumentoCosa installiGPUAccountL'immagine lascia il tuo computerRisultatoCosto
Deepness (sorgente)Plugin manager, poi i suoi pacchetti Python e un modello ONNXOpzionale, la CPU funzionaNoNoLayer poligonale, bounding boxes o un rasterGratuito
Geo-SAMPlugin manager, poi dipendenze e pesi del modello dalla sua finestra delle impostazioniOpzionale, i clic vengono eseguiti sulla CPUNoNoLayer poligonale, a livello di pixel o semplificatoGratuito
samgeoUn pacchetto Python nel tuo ambiente, senza pannello QGISConsigliataNoNoGeoJSON, Shapefile o GeoPackage che carichi autonomamenteGratuito
Mapflow (sito)Plugin managerNoSì, il GeoTIFF che carichi o il servizio tile a cui lo indirizziLayer poligonaleCrediti, a pagamento
Bunting Labs AI VectorizerPlugin managerNoSì, in porzioni di rasterVertici nel layer che stai digitalizzandoProva, poi 29 dollari al mese
AI Segmentation, il nostroPlugin managerNoSì in entrambe le modalità cloud, no per il piccolo modello localeLayer poligonale nel CRS del progetto, con label, class, score, area_m2 e perimeter_mQuota gratuita, poi 39 euro al mese IVA esclusa

Un limite per ciascuno.

  • Deepness esegue il modello che gli fornisci, quindi devi prima trovarne o addestrarne uno.
  • Geo-SAM usa clic e riquadri, un oggetto alla volta.
  • samgeo non ha un'interfaccia QGIS. Devi scrivere Python.
  • Mapflow offre un catalogo fisso di modelli, per edifici, foreste, strade e cantieri, quindi non può trovare un oggetto per il quale nessuno lo ha addestrato.
  • Bunting Labs AI Vectorizer segue le linee mentre digitalizzi. Non trova ogni oggetto in una zona.
  • AI Segmentation, il nostro, invia le immagini a un server in entrambe le modalità cloud. Solo il piccolo modello locale resta sul tuo computer.

Costi e piani gratuiti verificati il 23 agosto 2026.

Una strada suburbana sulle immagini Google Satellite in QGIS. Sei tetti di case a destra della strada sono delineati e riempiti di rosso, mentre altri poligoni di colori diversi coprono le case a sinistra.
Estrazione basata su modello in QGIS sopra immagini Google Satellite, acquisita il 23 agosto 2026. Ogni tetto è un poligono indipendente, modificabile come qualsiasi altra geometria vettoriale. Polygonize non può produrre questo risultato, perché nei valori dei pixel nulla separa un tetto da un vialetto.

L'output grezzo di qualsiasi modello ha bisogno di un filtro, così come l'output di polygonize ha bisogno di una pulizia. In un'esecuzione sul centro di Parigi abbiamo conservato 82 poligoni su 635, e questi 82 rappresentavano comunque l'84 percento dell'area edificata. La guida alle impronte degli edifici illustra il filtraggio dall'inizio alla fine, mentre il post su SAM in QGIS spiega quali oggetti questi modelli individuano bene.

Try it free in QGIS, no card needed

La versione in due minuti

Apri le proprietà del raster e guarda il tipo della banda e l'intervallo dei valori. Un raster intero con meno di cento valori distinti significa che puoi andare direttamente a Raster > Conversion > Polygonize (Raster to Vector), poi Dissolve, filtro per area e Simplify. Un raster float con migliaia di valori distinti significa usare prima Reclassify by table. Una fotografia significa che nulla di tutto questo si applica, e il confronto tra plugin AI per QGIS è la pagina che vuoi visitare dopo.

Se ti servono solo gli edifici, il nostro strumento gratuito per le impronte degli edifici li recupera dai dati aperti direttamente nel browser, senza alcun plugin.