Importieren von 3D-Dateien (3D Analyst)
Zusammenfassung
Hiermit wird mindestens ein 3D-Modell in eine Multipatch-Feature-Class importiert.
Verwendung
-
Das Werkzeug unterstützt Dateien in den Formaten 3D Studio Max (*.3ds), VRML und GeoVRML 2.0 (*.wrl), SketchUp 6.0 (*.skp) und OpenFlight 15.8 (*.flt) sowie COLLADA (*.dae).
-
Behalten Sie Bilder mit Textur in den 3D-Modellen bei, indem Sie das Ausgabe-Multipatch in einer Geodatabase speichern. Shapefiles unterstützen die Beibehaltung von Texturen nicht.
-
Falls die obere Seite der entstehenden Multipatch-Features seitwärts ausgerichtet ist, versuchen Sie die Ausrichtung anzupassen, indem Sie das Werkzeug mit aktiviertem Parameter Y_Is_Up erneut verwenden.
-
GeoVRML ist das einzige Format mit einem definierten Koordinatensystem. Viele 3D-Modelle werden mit lokalen Koordinatensystemen generiert, deren XYZ-Achse um 0, 0, 0 zentriert ist. Solche Features können mit einer der folgenden Methoden mit realen Koordinaten georeferenziert werden.
- Wenn die 3D-Modelle gedreht und verschoben werden müssen, müssen Sie die Methode der räumlichen Anpassung anwenden, um die Features ordnungsgemäß zu positionieren.
- Wenn die 3D-Modelle für ein bestimmtes Koordinatensystem ordnungsgemäß ausgerichtet sind und nur in die richtige Position verschoben werden müssen, passen Sie die Koordinatensystem-Eigenschaften so an, dass die notwendige Verschiebung erfolgt. Wenn Punkt-Features, die die Position des Schwerpunktes der einzelnen Modelle in realen Koordinaten definieren, verfügbar sind, verwenden Sie die Punkte als Eingaben für das Werkzeug, um die Modelle zu georeferenzieren.
-
Punkt- und Liniengeometrien, die in einer 3D-Datei vorhanden sein können, bleiben in der Ausgabe-Multipatch-Feature-Class nicht erhalten, da sie von Multipatches nicht unterstützt werden.
Hinweis:Nicht unterstützte Geometrietypen für VRML-Dateien sind: Box, Kegel, Zylinder, Extrusion, PointSet, Kugel und Text.
Syntax
Parameter | Erläuterung | Datentyp |
in_files |
Ein oder mehrere 3D-Modelle oder Ordner mit solchen Dateien in den unterstützten Formaten 3D Studio Max (*.3ds), SketchUp (*.skp), VRML und GeoVRML (*.wrl), OpenFlight (*.flt) und COLLADA (*.dae). | File; Folder |
out_featureClass |
Das Multipatch, das aus den Eingabedateien erstellt wird. | Feature Class |
root_per_feature (optional) |
Gibt an, ob ein Feature pro Datei oder ein Feature für jeden Stammknoten in der Datei generiert werden soll. Diese Option gilt nur für VRML-Modelle.
| Boolean |
spatial_reference (optional) |
Das Koordinatensystem der Eingabedaten. Für die meisten Formate ist dies unbekannt. Nur beim GeoVRML-Format wird das Koordinatensystem gespeichert. Der Standardwert wird aus der ersten Datei in der Liste abgerufen, wenn hier kein Raumbezug angegeben ist. | Spatial Reference |
y_is_up (optional) |
Gibt die Achse an, welche die vertikale Ausrichtung der Eingabedateien definiert.
| Boolean |
file_suffix |
Die Dateierweiterung der Dateien, die aus einem Eingabeordner importiert werden sollen. Dieser Parameter ist erforderlich, wenn als Eingabe mindestens ein Ordner angegeben wird.
| String |
in_featureClass (optional) |
Die Punkt-Features, deren Koordinaten die reale Position der Eingabedateien definieren. Jeder Eingabedatei wird basierend auf den Dateinamen im Symbolfeld der entsprechende Punkt zugeordnet. Der Parameter Koordinatensystem sollte in Übereinstimmung mit dem Raumbezug der Punkte definiert werden. | Feature Class |
symbol_field (optional) |
Das Feld in den Punkt-Features, das für jeden Punkt den Namen der zugeordneten 3D-Datei enthält. | Field |
Codebeispiel
Anhand des folgenden Beispiels wird die Verwendung dieses Werkzeugs im Python-Fenster veranschaulicht:
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.Import3DFiles_3d("AddisSheraton.skp", "Test.gdb/AddisSheraton", False, "", False)
Im folgenden Beispiel wird die Verwendung dieses Werkzeugs in einem eigenständigen Python-Skript veranschaulicht:
'''*********************************************************************
Name: Model Shadows For GeoVRML Models
Description: Creates a model of the shadows cast by GeoVRML models
imported to a multipatch feature class for a range of dates
and times. A range of times from the start time and end
time can also be specified by setting the EnforceTimes
Boolean to True. This sample is designed to be used in a
script tool.
*********************************************************************'''
# Import system modules
import arcpy
from datetime import datetime, time, timedelta
#************************* Script Variables **************************
inFiles = arcpy.GetParameterAsText(0) # list of input features
spatialRef = arcpy.GetParameterAsText(1) # list of GeoVRML files
outFC = arcpy.GetParameterAsText(2) # multipatch from 3D files
inTimeZone = arcpy.GetParameterAsText(3) # time zone
startDate = arcpy.GetParameter(4) # starting date as datetime
endDate = arcpy.GetParameter(5) # ending date as datetime
dayInterval = arcpy.GetParameter(6) # day interval as long (0-365)
minInterval = arcpy.GetParameter(7) # minute interval as long (0-60)
enforceTime = arcpy.GetParameter(8) # minute interval as Boolean
outShadows = arcpy.GetParameterAsText(9) # output shadow models
outIntersection = arcpy.GetParameterAsText(10) # shadow & bldg intersection
# Function to find all possible date/time intervals for shadow modelling
def time_list():
dt_result = [startDate]
if dayInterval:
if endDate: #Defines behavior when end date is supplied
while startDate < endDate:
startDate += timedelta(days=dayInterval)
dt_result.append(startDate)
dt_result.append(endDate)
else: # Behavior when end date is not given
daymonthyear = datetime.date(startDate)
while startDate <= datetime(daymonthyear.year, 12, 31, 23, 59):
startDate += timedelta(days=dayInterval)
dt_result.append(startDate)
return dt_result
try:
arcpy.CheckOutExtension('3D')
importFC = arcpy.CreateUniqueName('geovrml_import', 'in_memory')
# Import GeoVRML files to in-memory feature
arcpy.ddd.Import3DFiles(inFiles, importFC, 'ONE_FILE_ONE_FEATURE',
spatialRef, 'Z_IS_UP', 'wrl')
# Ensure that building models are closed
arcpy.ddd.EncloseMultiPatch(importFC, outFC, 0.05)
# Discard in-memory feature
arcpy.management.Delete(importFC)
dt_result = time_list()
for dt in dt_result:
if dt == dt_result[0]:
shadows = outShadows
else:
shadows = arcpy.CreateUniqueName('shadow', 'in_memory')
arcpy.ddd.SunShadowVolume(outFC, dt, shadows, 'ADJUST_FOR_DST',
inTimeZone, '', minInterval, 'MINUTES')
if dt is not dt_result[0]:
arcpy.management.Append(shadows, outShadows)
arcpy.management.Delete(shadows)
arcpy.ddd.Intersect3D(outFC, outIntersection, outShadows, 'SOLID')
arcpy.CheckInExtension('3D')
except arcpy.ExecuteError:
print arcpy.GetMessages()
except:
# Get the traceback object
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate error information into message string
pymsg = "PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}"\
.format(tbinfo, str(sys.exc_info()[1]))
msgs = "ArcPy ERRORS:\n {0}\n".format(arcpy.GetMessages(2))
# Return python error messages for script tool or Python Window
arcpy.AddError(pymsg)
arcpy.AddError(msgs)