Mehr

Wie verwende ich die Delaunay-Triangulation in QGIS?

Wie verwende ich die Delaunay-Triangulation in QGIS?


Ich muss ein Thiessen-Polygon für einen Standort in New Jersey erstellen und habe im Moment nur die Konzentrationen von Proben, die wir in der Gegend genommen haben. Was benötige ich noch und wie gebe ich es in QGIS ein, um mein gewünschtes Ergebnis zu erzielen? Was ist die Aufteilung des Gesamtaushubs in Polygone basierend auf Konzentrationen? Jede Info wird eine Hilfe sein.


Der einfachste Weg, Ihre Daten für den Import in QGIS vorzubereiten, besteht normalerweise darin, eine CSV ähnlich wie . zu erstellen

x,y,Konzentration 1.2.12,5 1.3.20,7 2.2.30.1

Nachdem Sie die CSV-Datei geladen haben, können Sie den resultierenden Layer als Eingabe für Triangulation, Interpolation oder jede andere gewünschte Analyse verwenden.


CGAL: Delaunay-Triangulation vs. Triangulation im CGAL-Beispiel

In meiner Arbeit muss ich die erste Schale von Voronoi-Nachbarn für ein fokales Teilchen erhalten. Dazu verwende ich die Delaunay-Triangulation, den dualen Graphen der Voronoi-Tessellation. Die von mir verwendete Version von CGAL ist 4.7. Ich habe immer den Basiscode in CGAL manual_4.7 als Vorlage verwendet, um eine Delaunay-Triangulation zu erstellen. Mein Problem sind die Header und Typedefs in diesem Beispiel, weil ich kürzlich entdeckt habe, dass sie sich von CGAL 4.14 unterscheiden, der neuesten verfügbaren Version. In CGAL 4.7:

Dann habe ich das Handbuch doppelt überprüft, um zu sehen, ob die Erklärungen unterschiedlich sind oder nicht. Soweit ich weiß, sind Software Design 4.14 und Software Design 4.7 identisch und entsprechen dem zweiten Beispiel. Da ich eine Triangulation mit leerer Kreiseigenschaft benötige und ich nur die Indizes benachbarter Scheitelpunkte in der Delaunay-Triangulation abrufen muss, führt die erste auch zu den gleichen Ergebnissen? Ich kann sie auf einige Punkte überprüfen, aber ich bezweifle nur, dass sie für alle Punkte die gleichen Ergebnisse liefern?


Ist es möglich, eine Delaunay-Triangulation nur in vertikaler Richtung (Z-Dimension) zu erstellen?

Ich arbeite an einem Plugin in QGIS, das ein 3D-Modell aus Rasterdaten erstellt. In diesem Fall muss ich die Triangulation nur in der vertikalen Ebene erstellen (keine verbindenden vertikalen Flächen mit Nachbarpunkten).

Dies ist mein Code und Beispiel mit dem aktuellen Effekt.

Nach der Delaunay-Funktion erstelle ich eine stl-Datei aus Punkten und Flächen. Unten ist, was ich brauche, aber der Algorithmus funktioniert nur richtig, wenn ich eine gerade Linie habe. Ich brauche es für alle Punkte.

Ich habe deine Idee ausprobiert, aber es hat nicht funktioniert.

Dies ist mein Code der Iterationsfunktion, bei der ich durch alle Pixel iteriere und wenn die Pixel einen Wert haben, füge mein Algorithmus ihn der Liste hinzu. Danach verwende ich diese Liste in der Delaunay-Triangulation.

Dies ist ein Beispiel für ein Raster, das ich in ein 3D-STL-MODELL konvertieren möchte. 1 Pixel hat X,Y und Höhenwert (im Code ist dies block.value)

Edit2: Ich muss dazwischen Gesichter machen. Dies ist eine bessere Visualisierung in ArcScene.


3 Antworten 3

Nach einigem Experimentieren sieht die Lösung einfach aus (dieser Beitrag war sehr hilfreich):

Die Schlüsselmethode zum Verständnis ist die Transformation, die kurz dokumentiert wird, aber die Dokumentation sagt alles, was gesagt werden muss. Für jeden Simplex transformieren[. n,:n] enthält die Transformationsmatrix und transform[:,n,:] enthält den Vektor r, auf den sich die Matrix bezieht. Es scheint, dass der r-Vektor als letzte Ecke des Simplex gewählt wird.

Ein weiterer kniffliger Punkt ist, wie man b bekommt, denn was ich tun möchte, ist so etwas wie

Im Wesentlichen brauche ich ein Array von Punktprodukten, während dot ein Produkt aus zwei Arrays ergibt. Die Schleife über die einzelnen Simplexe wie oben würde funktionieren, geht aber schneller in einem Schritt, wofür es numpy.einsum gibt:

Nun enthält v Indizes von Scheitelpunkten für jedes Simplex und w enthält entsprechende Gewichte. Um die interpolierten Werte p_values ​​an den Punkten p zu erhalten, tun wir (Hinweis: Werte müssen dafür NumPy-Array sein):

Oder wir können dies in einem einzigen Schritt tun, indem wir erneut `np.einsum' verwenden:

In Situationen, in denen einige der interpolierten Punkte außerhalb des Gitters liegen, ist Vorsicht geboten. In einem solchen Fall gibt find_simplex(p) -1 für diese Punkte zurück und dann müssen Sie sie ausmaskieren (möglicherweise mit maskierten Arrays).


Anspruch. Dies ist generell nicht möglich.

Beweis. Wenn keine vier Punkte in Ihrer Punktmenge kokreisförmig sind, ist die Delaunay-Triangulation eindeutig. Solange das Hindernispolygon also mindestens eine Nicht-Delaunay-Kante enthält, können Sie nicht zu der eindeutigen Delaunay-Triangulation der Punktmenge gelangen. Dies ist ziemlich einfach zu sehen: Betrachten Sie, wie im Flip-Algorithmus, ein Viereck in allgemeiner Position, dessen Diagonale umgedreht werden muss, um Delaunay zu sein. Nun sei eines der schlechten Dreiecke das Hindernis und die Menge der vier Eckpunkte des Vierecks die Menge der Punkte. Dann kommt man eindeutig nie zu einer Delaunay-Triangulation.

Aktualisieren: Das von Ihnen beschriebene Problem ist ein Sonderfall des Constrained Delaunay Triangulation Problems. In Ihrem Fall sind die eingeschränkten Kanten nur die Kanten der Grenzen Ihrer Hindernisse. Es gibt eine Reihe von Python-Bibliotheken, die dies tun können. Beispielsweise


1 Antwort 1

Ihr Beispiel ist ein 3D-Modell. Sie sehen, dass es an jeder Kreuzung keinen Verbindungsknoten gibt. Diejenigen Oberflächen, die nicht gerade vor Ihrem Gesicht liegen, haben ein scheinbar dichteres Dreiecksnetz.

Es gibt viele 3D-Software, die Oberflächen als Dreiecke darstellt. Einige von ihnen erlauben 2D-Drahtgitter-Exporte, die die Projektionen der Dreiecke als Vektoren haben. Leider habe ich keine solche Software. In jedem Stück, das ich habe, ist das Exportieren eines Dreiecksnetzes als 2D-Vektorbild deaktiviert.

Ohne in 3D zu wechseln, können Sie eine Form triangulieren. Dies kann manuell oder mithilfe einer Triangulationssoftware erfolgen. Die Delaunay-Triangulation ist eine bekannte Methode, um dies irgendwie optimal zu tun. Diese Methode ist eine etwa 90 Jahre alte mathematische Regel und in viele Grafikprogramme einprogrammiert.

Wenn Sie ein Rasterbild haben, das Schattierungen verwendet, um 3D-Formen darzustellen, können Sie es auf eine begrenzte Anzahl von Graustufen oder Farben vektorisieren (=Bitmap verfolgen). Dann triangulieren Sie verschiedene Bereiche zu unterschiedlicher Dichte von Dreiecken. Auf diese Weise können Sie wie in Ihrem Beispiel die Schattierung mit Dichte simulieren.

Nehmen wir an, Sie haben endlich ein paar Dreiecke. So können Sie die Knoten und den Glüheffekt in Inkscape hinzufügen:

Die Dreiecke. Wenn es sich um separate Liniensegmente handelt, müssen sie nicht unterbrochen werden. Diese Dreiecke sind geschlossene Formen (eigentlich die 3-seitigen Polygone von Inkscape, die zuerst in Pfade umgewandelt werden müssen)

Brechen Sie die Dreiecke, um Liniensegmente zu trennen

  • Wählen Sie Alle
  • Gruppierung bei Bedarf aufheben
  • Gehe bei Bedarf zu Pfad > Objekt zum Pfad
  • Wählen Sie mit dem Knotenwerkzeug alle Knoten aus, indem Sie über die Dreiecke ziehen und gleichzeitig die Umschalttaste gedrückt halten
  • Klicken Sie in der Werkzeugoptionsleiste auf "Pfad an ausgewählten Knoten unterbrechen" . goto Pfad > Auseinanderbrechen Das bricht alle Dreiecke in separate Liniensegmente

Alles auswählen, im Strichstil-Bedienfeld jeder Linie Punktstartmarkierungen zuweisen

Alles auswählen, alles duplizieren, auf die Duplikate setzen 3. 5% Unschärfe

HINZUFÜGEN: In Illustrator können Sie Dreiecke auch mit der Funktion "Umriss" im Pathfinder-Bedienfeld in Linien aufteilen. Das Ergebnis ist anders, Sie benötigen mehr Handarbeit. An jedem Kreuzungspunkt werden Wege geschnitten. Einzelne Ecken benötigen das Scherenwerkzeug. Die positive Seite ist, dass Duplizieren und Unschärfen nicht erforderlich sind. Sie können den Effekt Stilisieren > Äußeres Glühen einfügen. Für die Ausrichtung der Pfeilspitze ist eine Einstellung im Bedienfeld „Strokes“ erforderlich, um Punktcluster zu verhindern, bei denen sich mehrere Linien am selben Punkt treffen.

HINZUFÜGEN2 Ein einfaches Beispiel, das in 3D beginnt, ist hier zu lesen. Welches Programm wird verwendet, um eine Dreiecksnetzillustration zu erstellen?. Das angegebene Rezept kann dies in wenigen Minuten erzeugen:


Schritt 2: Anzeigen von Tabellen und Datenschichten¶

Verwenden von WPSBuilder¶

  • Der Inhalt der Datenbank kann mit eingesehen werden Display_Datenbank.
  • Eine räumliche Schicht kann visualisiert werden mit Table_Visualization_Map.
  • Eine Datentabelle kann visualisiert werden mit Table_Visualization_Data.

Anzeigen der Datenbank¶

Es ist auch möglich, die Tabellen über . zu exportieren Export_Tabelle im Shapefile-, CSV- oder GeoJSON-Format.

Importieren Sie diese Tabellen dann in Ihr bevorzugtes geografisches Informationssystem (z.B. OrbisGIS, QGIS). Anschließend können Sie Ihre Datenschicht, aber auch die darin enthaltenen Daten grafisch visualisieren. Nehmen Sie sich die Zeit, sich mit Ihrem gewählten GIS vertraut zu machen.

Mit OrbisGIS/QGIS können Sie eine OSM-Hintergrundkarte hinzufügen: https://wiki.openstreetmap.org/wiki/QGIS

Mit OrbisGIS/QGIS können Sie Layer-Farben ändern (z. B. Surface_osm in Grün, Buildings_OSM in Grau, ROADS in Rot).


Trianguliertes unregelmäßiges Netzwerk

EIN Trianguliertes unregelmäßiges Netzwerk (ZINN) (triangulieren ['traɪæ ɳgjʊleɪt] verbo transitivo triangular) ist eine digitale Datenstruktur, die in einem geografischen Informationssystem (GIS) zur Darstellung einer Oberfläche verwendet wird. Ein TIN ist eine vektorbasierte Darstellung der physischen Landoberfläche oder des Meeresbodens, die aus unregelmäßig verteilten Knoten und Linien mit dreidimensionalen Koordinaten (x, y und z) besteht, die in einem Netzwerk nicht überlappender Dreiecke angeordnet sind. TINs werden häufig aus den Höhendaten eines gerasterten digitalen Höhenmodells (DEM) abgeleitet. Ein Vorteil der Verwendung eines TIN gegenüber einem DEM bei der Kartierung und Analyse besteht darin, dass die Punkte eines TINs basierend auf einem Algorithmus variabel verteilt werden, der bestimmt, welche Punkte für eine genaue Darstellung des Geländes am notwendigsten sind. Die Dateneingabe ist daher flexibel und es müssen weniger Punkte gespeichert werden als in einem DEM mit regelmäßig verteilten Punkten. Während ein TIN für bestimmte Arten von GIS-Anwendungen, wie die Analyse der Neigung und des Aspekts einer Oberfläche, möglicherweise weniger geeignet ist als ein DEM-Raster, haben TINs den Vorteil, dass sie Terrain in drei Dimensionen darstellen können. TINs haben jedoch Nachteile und sind nicht für jedes Projekt geeignet. Bei der Verwendung von TINs können Details zu den tatsächlichen Dreiecken verloren gehen. Da TINs linear sind, erscheinen viele Kanten außerdem gezackt und verzerren das Bild. [1]

Triangulated Irregular Network stellt eine topografische Höhenoberfläche durch eine Tessellation von nicht überlappenden Dreiecken mit Höhen an ihren Ecken dar. Dreidimensionale Visualisierungen werden leicht durch das Rendern der dreieckigen Facetten erzeugt. In Bereichen mit geringer Variation der Oberflächenhöhe können die Punkte weit beabstandet sein, während in Bereichen mit stärkeren Variationen in der Höhe die Punktdichte erhöht wird.

Ein TIN basiert normalerweise auf einer Delaunay-Triangulation, sein Nutzen wird jedoch durch die Auswahl der Eingabedatenpunkte begrenzt: Ausgewählte Punkte werden so lokalisiert, dass signifikante Änderungen der Oberflächenform erfasst werden, z , Talböden, Gruben und Spalten.

Es ist technisch möglich, ein TIN mit überlappenden Facetten zu generieren. [2] Solche TINs können für die Modellierung bestimmter geografischer Merkmale nützlich sein, einschließlich Überhängen und Höhlen, jedoch sind nicht alle GIS-Pakete dafür ausgelegt, solche TINs zu verarbeiten. Der Teil einer TIN, der sich nicht selbst überlappt, wird manchmal als funktionales Terrain bezeichnet.

Obwohl TINs normalerweise mit dreidimensionalen Daten (x, y und z) und Topographie verknüpft sind, sind sie auch für die Beschreibung und Analyse von horizontalen (x und y) Verteilungen und Beziehungen nützlich.

Das erste triangulierte irreguläre Netzwerkprogramm für GIS wurde 1973 von Randolph Franklin an der Simon Fraser University geschrieben. [3]


Syntax

Das TIN-Dataset, das generiert wird.

Der Raumbezug des Ausgabe-TIN sollte auf ein projiziertes Koordinatensystem eingestellt werden. Geografische Koordinatensysteme werden nicht empfohlen, da die Delaunay-Triangulation nicht garantiert werden kann, wenn die XY-Koordinaten in Winkeleinheiten ausgedrückt werden, was sich negativ auf die Genauigkeit entfernungsbasierter Berechnungen wie Neigung, Volumen und Sichtlinie auswirken könnte.

Die Eingabe-Features und ihre zugehörigen Eigenschaften, die zur Definition des TIN beitragen.

  • in_features —Das Feature, dessen Geometrie in das TIN importiert wird.
  • height_field —Die Höhenquelle für die Eingabe-Features. Jedes numerische Feld aus der Attributtabelle des Eingabe-Features kann zusammen mit Shape.Z für die Z-Werte von 3D-Features und Shape.M für die mit der Geometrie gespeicherten M-Werte angegeben werden. Wenn Sie das Schlüsselwort <None> wählen, wird die Höhe des Features von der umgebenden Oberfläche interpoliert.
  • sf_type —Die Rolle des Eingabe-Features beim Definieren der TIN-Oberfläche. Die gültigen Optionen hängen von der Geometrie der Eingabe-Features ab. Punkt- und Multipoint-Features können als Mass_Points definiert werden, die Höhenwerte beitragen, die als TIN-Datenknoten gespeichert werden. Linien-Features können durch Angabe von Hard_Line oder Soft_Line als Mass_Points oder Bruchkanten bezeichnet werden. Polygon-Features können die Interpolationsgrenze durch Angabe von Hard_Clip oder Soft_Clip, innere Teile ohne Daten durch Auswahl von Hard_Erase oder Soft_Erase oder Bereiche konstanter Höhe durch Angabe von Hard_Replace oder Soft_Replace darstellen. Darüber hinaus können Polygone auch verwendet werden, um ganzzahlige Attributwerte zuzuweisen, indem Sie Hardvalue_Fill oder Softvalue_Fill angeben.
  • tag_field —Ein numerisches Attribut, das von einem ganzzahligen Feld in der Attributtabelle des Eingabe-Features abgeleitet wird, dessen Werte verwendet werden können, um den Datenelementen des TINs eine grundlegende Form der Attribution zuzuweisen. Die Angabe von <None> führt dazu, dass keine Tag-Werte zugewiesen werden.

Gibt die Triangulationstechnik an, die entlang der Bruchkanten des TIN verwendet wird.

  • DELAUNAY —Das TIN verwendet die Delaunay-konforme Triangulation, die jedes Segment der Bruchkanten verdichten kann, um mehrere Dreieckskanten zu erzeugen. Dies ist die Standardeinstellung.
  • CONSTRAINED_DELAUNAY —Das TIN verwendet die eingeschränkte Delaunay-Triangulation, bei der jedes Segment als einzelne Kante hinzugefügt wird. Delaunay-Triangulationsregeln werden überall eingehalten, außer entlang von Bruchkanten, die nicht verdichtet werden.

Schau das Video: Samfunnsvitenskapelig undersøkelser