Disegnare il confine di un insieme di punti usando QGIS?


9

Ho una serie di punti che vorrei modificare in un poligono.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Ho provato lo scafo concavo ma non ottengo il poligono previsto come puoi vedere di seguito,

inserisci qui la descrizione dell'immagine

E quando uso la triangolazione di Denaulay, devo eliminare i triangoli esterni.

inserisci qui la descrizione dell'immagine

Esiste un modo efficiente di fare lo stesso?

Ho anche provato lo scafo convesso.

inserisci qui la descrizione dell'immagine


Provi Vector -> Strumenti di geoprocessing -> Scafo convesso / i ... o casella degli strumenti di Geoprocessing -> Strumenti di geometria vettoriale -> Scafo convesso?
Dmitry Baryshnikov il

Sì, l'ho provato. Tuttavia, ho pensato che questo non si applica alla forma richiesta. Aggiornerò la domanda.
Stephen Jacob,

3
hai le linee mostrate sulla tua prima immagine o solo i punti?
Radouxju,

1
Ho una domanda: qual è il tuo obiettivo? cosa rappresentano i dati? fiume ? strada ? Temo che se hai "S" forme o forme contorte, non funzionerà, nemmeno con il pitone ...
Keiko

2
@StephenJacob - Come vengono ordinati i punti? Se hanno un ordine che va in senso orario o antiorario, è possibile prima convertire i tuoi punti in linee (ad es. Usando lo strumento Converti punti in linea (e) di SAGA ) e poi convertire le linee in un poligono (ad esempio lo strumento Linee in poligoni ).
Joseph,

Risposte:


5

Presumo che tu sappia quali punti appartengono alla "sinistra" o "destra", perché altrimenti ci sono molte soluzioni. In tal caso, è possibile utilizzare la triangolazione delaunay seguita da una selezione dei triangoli "centrali". Con questo metodo, non è necessario disporre i punti in un ordine specifico. Tutto quello che devi considerare è il fatto che i triangoli di cui hai bisogno devono toccare almeno un punto da ciascun lato.

apri la tabella degli attributi> seleziona per espressione> "code" = 1

vettore> strumento di ricerca> seleziona per posizione (nuova selezione, interseca)

inserisci qui la descrizione dell'immagine

apri la tabella degli attributi> inverti la selezione dei punti (ctrl + R)

vettore> strumento di ricerca> seleziona per posizione (rimuovi dalla selezione, disgiunge)

inserisci qui la descrizione dell'immagine

vettore> strumento di geoprocessing> dissolve

inserisci qui la descrizione dell'immagine


3

Ho lo stesso risultato di @radouxju.

Operazioni:

  1. Seleziona 1 polilinea [seleziona al clic]
  2. Aggiorna la tua tabella polilinea e influenza un numero per ogni funzione [calcolatrice campo]
  3. Seleziona i punti che intersecano una polilinea [strumento di query spaziale]
  4. Aggiorna i punti selezionati in base al valore della polilinea precedentemente interessato [calcolatrice campo]
  5. Mantenere il punto di selezione e selezionare i triangoli delaunay che intersecano questi punti selezionati [strumento di query spaziale]
    inserisci qui la descrizione dell'immagine
    inserisci qui la descrizione dell'immagine

  6. Invertire la selezione del punto o selezionare i punti che intersecano l'altra polilinea [selezione per espressione] o [inverti selezione]

  7. Rimuovi dalla selezione corrente i triangoli delaunay che sono disgiunti con gli altri punti [strumento di query spaziale]
    inserisci qui la descrizione dell'immagine
    inserisci qui la descrizione dell'immagine

  8. Unisci le funzionalità selezionando [strumento geoprocessing> dissolve]
    inserisci qui la descrizione dell'immagine
    inserisci qui la descrizione dell'immagine


IMPORTANTE : DEVI avere le polilinee per ottenere questo risultato!


Grazie @Keiko la tua risposta è stata utile per interpretare la risposta di Radouxju
Stephen Jacob,

Prego @StephenJacob! Era solo un lavoro di squadra! ;-)
Keiko

1

Se hai esperienza con Python, puoi usare la libreria Shapely e creare un poligono dai punti nelle due linee. Dovrai dire a Python quali sono i punti iniziale e finale di entrambe le linee.

from shapely.geometry import Point, Polygon, LineString
import geopandas as gpd
import pandas as pd
line1 = [(1,1),(2,1.2),(3,1)]
line2 = [(1,2),(2,2.2),(3,2)]
# you need to reverse the order of one line to make it a polygon
line2reverse = list(reversed(line2))
polgonList2 = line1 + line2reverse
Polygon(polgonList2)

Ancora meglio: puoi anche usare geopandas per farlo. geopandas ti consente di salvare facilmente in più formati, inclusi gli shapefile

d = {'identifier' : [1, 2],
 'name' : ["Netherlands", "Germany"],
 "line1": [[(1,1),(2,1.2),(3,1)], [(1,1),(2,1.2),(3,1)]],
 "line2": [[(1.1,2.1),(2.1,2.3),(3.1,2.2)],[(1,2),(2,2.2),(3,2)]]
}

df = pd.DataFrame(d)
def makePolygon(row):
    line2reverse = list(reversed(row["line2"]))
    return Polygon(line1+line2reverse)    
geometries = []

for index, row in df.iterrows():
    geometries.append(makePolygon(row))
crs = {'init': 'epsg:4326'} 
gdf = gpd.GeoDataFrame(df, crs=crs, geometry=geometries)
gdf.to_file('MyGeometries.shp', driver='ESRI Shapefile')

puoi leggere le geometrie di linea usando la funzione geopandas gpd.read_file ().

Ordine dei vertici poligonali in generale GIS: in senso orario o antiorario

https://nbviewer.jupyter.org/gist/rutgerhofste/b01c17aa6851ea577f10c21a4c3717bc


Come convertire questo in un file di forma?
Stephen Jacob,

1
Puoi usare più strumenti ma io sono un fan di geopandas. Usa gdf.to_file ('MyGeometries.shp', driver = 'ESRI Shapefile')
RutgerH
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.