Zeichnen der Grenze von Punktmengen mit QGIS?

9

Ich habe eine Reihe von Punkten, die ich in ein Polygon ändern möchte.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Ich habe versucht, konkaven Rumpf, aber nicht das beabsichtigte Polygon zu bekommen, wie Sie unten sehen können,

Geben Sie hier die Bildbeschreibung ein

Und wenn ich Denaulay Triangulation verwende, muss ich die äußeren Dreiecke löschen.

Geben Sie hier die Bildbeschreibung ein

Gibt es eine effiziente Möglichkeit, dasselbe zu tun?

Ich habe auch Convex Rumpf versucht.

Geben Sie hier die Bildbeschreibung ein

Stephen Jacob
quelle
Versuchen Sie Vektor -> Geoverarbeitungswerkzeuge -> Konvexe Hülle (n) ... oder Geoverarbeitungs-Toolbox -> Vektorgeometrie-Werkzeuge -> Konvexe Hülle?
Dmitry Baryshnikov
Ja, das habe ich versucht. Ich dachte jedoch, dass dies nicht für die gewünschte Form gilt. Ich werde die Frage aktualisieren.
Stephen Jacob
3
Haben Sie die Linien auf Ihrem ersten Bild oder nur die Punkte?
Radouxju
1
Ich habe eine Frage: Was ist Ihr Ziel? Was bedeuten die Daten? Fluss ? Straße? Ich befürchte, wenn Sie "S" -Formen oder verdrehte Formen haben, wird es auch mit Python nicht funktionieren ...
Keiko
2
@StephenJacob - Wie werden deine Punkte bestellt? Wenn sie eine Reihenfolge im oder gegen den Uhrzeigersinn haben, können Sie Ihre Punkte zuerst in Linien konvertieren (z. B. mit dem SAGA- Werkzeug Punkte in Linien konvertieren ) und dann die Linien in ein Poygon konvertieren (z. B. Linien in Polygone ).
Joseph

Antworten:

5

Ich gehe davon aus, dass Sie wissen, welche Punkte zu "links" oder "rechts" gehören, da es sonst viele Lösungen gibt. In diesem Fall können Sie die Delaunay-Triangulation verwenden, gefolgt von einer Auswahl der "zentralen" Dreiecke. Bei dieser Methode müssen die Punkte nicht in einer bestimmten Reihenfolge vorliegen. Alles, was Sie berücksichtigen müssen, ist die Tatsache, dass die Dreiecke, die Sie benötigen, mindestens einen Punkt von jeder Seite berühren müssen.

Attributtabelle öffnen> durch Ausdruck auswählen> "Code" = 1

Vektor> Recherchetool> Nach Ort auswählen (neue Auswahl, Schnittpunkt)

Geben Sie hier die Bildbeschreibung ein

Attributtabelle öffnen> Auswahl der Punkte umkehren (Strg + R)

Vektor> Recherchetool> Nach Ort auswählen (aus Auswahl entfernen, trennen)

Geben Sie hier die Bildbeschreibung ein

Vektor> Geoverarbeitungswerkzeug> auflösen

Geben Sie hier die Bildbeschreibung ein

Radouxju
quelle
3

Ich habe das gleiche Ergebnis wie @radouxju.

Operationen:

  1. Wählen Sie 1 Polylinie [beim Klicken auswählen]
  2. Aktualisieren Sie Ihre Polylinientabelle und beeinflussen Sie jede Funktion mit einer Zahl [Feldrechner]
  3. Wählen Sie die Punkte aus, die eine Polylinie schneiden [räumliches Abfrage-Tool]
  4. Aktualisieren Sie die ausgewählten Punkte um den zuvor betroffenen Polylinienwert [Feldrechner]
  5. Behalten Sie den Auswahlpunkt bei und wählen Sie die Delaunay-Dreiecke aus, die diese ausgewählten Punkte schneiden [räumliches Abfrage-Tool]
    Geben Sie hier die Bildbeschreibung ein
    Geben Sie hier die Bildbeschreibung ein

  6. Invertieren Sie die Punktauswahl oder wählen Sie die Punkte aus, die die andere Polylinie schneiden [Auswahl durch Ausdruck] oder [Auswahl umkehren].

  7. Entfernen Sie aus der aktuellen Auswahl die Delaunay-Dreiecke, die nicht mit den anderen Punkten verbunden sind [räumliches Abfrage-Tool]
    Geben Sie hier die Bildbeschreibung ein
    Geben Sie hier die Bildbeschreibung ein

  8. Führen Sie die Features durch Auswahl von [Geoverarbeitungswerkzeug> Auflösen] zusammen.
    Geben Sie hier die Bildbeschreibung ein
    Geben Sie hier die Bildbeschreibung ein


WICHTIG : Sie MÜSSEN die Polylinien haben, um dieses Ergebnis zu erhalten!

Keiko
quelle
Danke @Keiko Ihre Antwort war nützlich, um Radouxjus Antwort zu interpretieren
Stephen Jacob
Gern geschehen @StephenJacob! Es war nur Teamwork! ;-)
Keiko
1

Wenn Sie Erfahrung mit Python haben, können Sie die Shapely-Bibliothek verwenden und aus den Punkten in den beiden Linien ein Polygon erstellen. Sie müssen Python mitteilen, wie die Start- und Endpunkte beider Linien lauten.

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)

Noch besser: Sie können dazu auch Geopandas verwenden. Mit Geopandas können Sie problemlos in mehreren Formaten speichern, einschließlich Shapefiles

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')

Sie können die Liniengeometrien mit der Funktion geopandas gpd.read_file () lesen.

Reihenfolge der Polygonscheitelpunkte im Allgemeinen GIS: im oder gegen den Uhrzeigersinn

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

RutgerH
quelle
Wie konvertiere ich dies in eine Formdatei?
Stephen Jacob
1
Sie können mehrere Tools verwenden, aber ich bin ein Fan von Geopandas. Verwenden Sie gdf.to_file ('MyGeometries.shp', driver = 'ESRI Shapefile')
RutgerH