4 votos

Polígonos 3D de la lista

Así que tengo una lista como esta:

 list = [[[-3, -2, 2], [3, -2, 2], [3, 2, 2], [-3, 2, 2]], [[3, -2, -2], [-3, -2, -2], [-3, 2, -2], [3, 2, -2]], [[-3, -2, 2], [-3, 2, 2], [-3, 2, -2], [-3, -2, -2]], [[-3, 2, 2], [3, 2, 2], [3, 2, -2], [-3, 2, -2]], [[-3, -2, -2], [3, -2, -2], [3, -2, 2], [-3, -2, 2]]]
 

Ahora quiero crear un Shapefile 3D con Z-Valores fuera de él. Probé varios enfoques. El que mejor funciona es este:

 import arcpy    
arcpy.env.overwriteOutput = True
arcpy.env.outputZFlag = "Enabled"


features =[]

for feature in list:
    # Create a Polygon object based on the array of points
    # Append to the list of Polygon objects
    features.append(
        arcpy.Polygon(arcpy.Array([arcpy.Point(coordPair[0], coordPair[1], coordPair[2], coordPair[2]) for coordPair in feature])))


# Persist a copy of the Polyline objects using CopyFeatures
arcpy.CopyFeatures_management(features, "C:/Users/test_shape.shp")
 

Lo que recibo son polígonos planos que no muestran valores Z orden M en ArcScene. Pero al menos se muestran en 2D.

Ya probé este:

 arcpy.Polygon(arcpy.Array([arcpy.Point(coordPair[0], coordPair[1], coordPair[2], coordPair[2]) for coordPair in feature]), None, True, True))
 

Pero entonces no aparece ningún polígono.

1voto

John Kramlich Puntos 286

Si usted lee el archivo de ayuda en la creación de un Polígono de clase utilizando arcpy afirma que el constructor de la sintaxis es un Polígono (entradas, {spatial_reference}, {has_z}, {has_m}).

El código no establece explícitamente que son la creación de un polígono con Z y los valores de M, aunque establezca la configuración del entorno. Como la Función de Copia de la herramienta de honores Z y M la configuración de uno hubiera pensado que habría añadido, pero no lo hizo.

Aproveché la oportunidad para expandir su lista de comprensión como me parece que el código casi ilegible y lo que yo aporto a continuación es mucho más legible para los demás. También como nota al margen, no establece la referencia espacial de los datos, confía en mí que va a volver y te muerden, así que sugerimos que establece que!

Por lo tanto el código debe ser como sigue:

import arcpy

arcpy.env.overwriteOutput = True
arcpy.env.outputZFlag = "Enabled"
arcpy.env.outputMFlag = "Enabled"

features =[]
list = [[[-3, -2, 2], [3, -2, 2], [3, 2, 2], [-3, 2, 2]], [[3, -2, -2], [-3, -2, -2], [-3, 2, -2], [3, 2, -2]], [[-3, -2, 2], [-3, 2, 2], [-3, 2, -2], [-3, -2, -2]], [[-3, 2, 2], [3, 2, 2], [3, 2, -2], [-3, 2, -2]], [[-3, -2, -2], [3, -2, -2], [3, -2, 2], [-3, -2, 2]]]

for feature in list:
    # Create a Polygon object based on the array of points
    # Append to the list of Polygon objects
    array = arcpy.Array()
    for coordPair in feature:
        point = arcpy.Point()
        point.X = coordPair[0]
        point.Y = coordPair[1]
        point.Z = coordPair[2]
        point.M = coordPair[2]
        array.append(point)
    features.append(arcpy.Polygon(array,None,True,True))

# Persist a copy of the Polygon objects using CopyFeatures
arcpy.CopyFeatures_management(features, "C:/scratch/test_shape.shp")

Et voila!

ArcScene

0voto

Anton8000 Puntos 165

¿Qué sucede si comienza creando el shapefile y especifica que debería tener Z?

A continuación, puede utilizar el InsertCursor para insertar los polígonos:

 import arcpy,os
folder=r'C:\Test'
name='ZShape.shp'

arcpy.CreateFeatureclass_management(out_path=folder, out_name=name, geometry_type='POLYGON', has_m='DISABLED', has_z='ENABLED', 
                                    spatial_reference="3006")

list = [[[-3, -2, 2], [3, -2, 2], [3, 2, 2], [-3, 2, 2]], [[3, -2, -2], [-3, -2, -2], [-3, 2, -2], [3, 2, -2]], [[-3, -2, 2], [-3, 2, 2], [-3, 2, -2], [-3, -2, -2]], [[-3, 2, 2], [3, 2, 2], [3, 2, -2], [-3, 2, -2]], [[-3, -2, -2], [3, -2, -2], [3, -2, 2], [-3, -2, 2]]]

cursor = arcpy.da.InsertCursor(os.path.join(folder,name),['SHAPE@'])

for feature in list:
    polygon=arcpy.Polygon(arcpy.Array([arcpy.Point(*coords) for coords in feature]))
    cursor.insertRow([polygon])
del cursor
 

introduzca la descripción de la imagen aquí

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X