Mehr

Zeichnen einer 3D-Linie aus den x,y,z-Koordinaten der Start- und Endpunkte der 2D-Linie für die Trajektorienmodellierung?

Zeichnen einer 3D-Linie aus den x,y,z-Koordinaten der Start- und Endpunkte der 2D-Linie für die Trajektorienmodellierung?


Ich habe ein Polylinien-Shapefile mit über 13.000 Linien, das ich in 3D anzeigen möchte, um grob die Flugbahnen von Partikeln zu modellieren, die aus einem Vulkan ausbrechen.

Ich habe 2D-Linien, die sich von den x,y-Koordinaten, wo jedes Partikel ausgestoßen wurde, bis zu seiner Landung erstrecken. Die Z-Koordinaten für den Start- und Endpunkt jeder Linie befinden sich ebenfalls in der Attributtabelle.

Das Endziel besteht darin, Linien zu haben, die im richtigen Winkel und an der richtigen Stelle zum Boden geneigt sind, damit ich herausfinden kann, wie viele der Partikelflugbahnen sich mit Gebäuden schneiden (die ich bereits in 3D extrudiert habe).


Mit der Erweiterung 3D Analyst können Sie die x-, y-, z-Koordinaten aus Tabellen aufnehmen, die jeweils ein Feature im Eingabe-Dataset darstellen. Ein Python-Skript wie dieses kann das Schreiben dieser Tabellen automatisieren und sie dann alle in das Werkzeug ASCII 3D to Feature Class einlesen:

import arcpy import os myworkspace = "C:UsersMeSomewhere" # your workspace fc = "C:UsersMeSomewheremyInput.shp" # your input in your workspace desc = arcpy.Describe(fc) # wir brauchen seinen Raumbezug SpatialRef = desc.spatialReference # für später. # Jedes Feature im Dataset durchgehen und für jedes eine XYZ-Textdatei erstellen. # Wir verweisen auf die Felder OID, SHAPE und Z-Wert in der Feature-Class, # vorausgesetzt, Ihre Z-Werte sind in "Zcoord". for row in arcpy.da.SearchCursor(fc, ["[email protected]", "[email protected]", "Zcoord"]): # Erstellen Sie eine Datei für diese Funktion/Zeile, an die wir Werte anhängen. with open(os.path.join(myworkspace, "feat" + str(row[0]) + ".XYZ"), "a") as thisFile: thisFile.write("xyz") # für den Dateiheader für jede XYZ-Datei # Schritt für Schritt durch jeden Teil des Features (auch wenn nur einer, wie wir in diesem Fall annehmen) für part in row[1]: # Schritt für Schritt durch jeden Scheitelpunkt im Feature-Teil für pnt in part: # Schreiben Sie eine Zeile für jeden Scheitelpunkt als "xyz" thisFile.write("{} {}".format(pnt.X, pnt.Y) + " " + str(row[2]) # Nun hat unser Workspace-Verzeichnis eine Reihe von . xyz-Dateien, die jeweils eine Feature-Nummer in der ursprünglichen Eingabe-Feature-Class darstellen. Verwenden Sie ASCRII 3D to Feature Class, um in 3D zu wechseln. arcpy.CheckOutExtension("3D") arcpy.ddd.ASCII3DToFeatureClass(myworkspace, "XYZ", "out3D.shp" , "POLYLINE", z_factor = 1, input_coordinate_system = SpatialRef, "#", file_suffix = "XYZ")

Stellen Sie außerdem sicher, dass Ihre Koordinaten für alle drei von x, y und z in projizierten Metern (oder Fuß) angegeben sind, um sicherzustellen, dass Ihre Winkelberechnungen später korrekt sind.


Ich konnte dieses Problem sehr einfach mit dem Tool "Feature To 3D By Attribute" lösen.

Sobald Sie Ihre Linien und die Höhen haben, auf die jedes Ende der Linie in der Attributtabelle erhöht werden soll, können Sie die beiden Höhen mit diesem Werkzeug eingeben.


Schau das Video: How to Draw a 3D Hand - Trick Art Optical Illusion