2 votos

¿Cómo reordenar los atributos de un polígono basándose en los atributos del archivo polilínea?

Tengo un shapefile de polilíneas (subcuencas) y polígonos (subcuencas) con ambos se muestran below junto con las tablas. Su índice FID no se solapa espacialmente, por ejemplo, el atributo de la segunda fila de surivers no se solapa con el atributo de la segunda fila de subshed. Quiero reordenar el orden de los atributos en la subcuenca según los subrivers, de modo que el FID de la subcuenca se lea como 1,3,4,2,5 (atributos FROM_NODE) con los valores GRIDCODE barajados en consecuencia. Cualquier sugerencia para hacerlo será muy apreciada.

fc = "C:/temp/spatial_join.shp"
sc = arcpy.da.SearchCursor(fc, ("FID","SHAPE@))
poly = "C:/temp/polygon.shp"
fc = arcpy.da.InsertCursor(poly, ("FID","SHAPE@"))
row1 = sc.next()
for i in sc:
    fc.insertRow(row1)

del row1

1voto

xenny Puntos 670

No puede actualizar su campo FID, por lo que debe crear una nueva clase de característica en la que inserte los polígonos en el orden que desee. Sin embargo, esto no es necesariamente una buena idea porque el FID podría cambiar en caso de una sesión de edición. De todos modos, el primer paso es una unión espacial para obtener el atributo de las líneas que están dentro de sus polígonos. Para evitar una relación espacial ambigua, recomiendo hacer esta unión espacial usando el punto central ("feature vertices to point" con la opción "MID"), pero esto no es necesario.

En Python, puede utilizar arcpy.da.searchCursor(subshed, ("joint_subriver_FID_FIELD" , "SHAPE@"))

A continuación, se realiza un bucle en el cursor para crear una tupla de Python

Usted ordenar esta tupla en función de su primer elemento

Usted crea un insertcursor en un shapefile vacío

Se hace un segundo bucle para insertar las filas en el orden que se desee

EDITAR :

Primer paso: asignar el FID de las polilíneas a los polígonos. Crear puntos para evitar ambigüedades entre las líneas y los polígonos al unirlos. Cree una copia del campo FID de la línea para asegurarse de que se transmitirá a los puntos.

arcpy.featureVerticesToPoints_management("lines.shp", "points.shp", "MID") arcpy.SpatialJoin_analysis("polygon.shp", "points.shp", "joinpolygon.shp")

Ahora tienes una nueva capa de polígono con los atributos de las líneas. A continuación, debe crear un nuevo shapefile de tipo "polígono" que almacenará las nuevas geometrías. El shapefile debe contener también los campos que desea conservar. Sobre la base de estos dos shp (jointpolygon.shp y newpolygon.shp), puede utilizar el siguiente Python script.

fc = "C:/jointpolygon.shp"
sc = arcpy.da.SearchCursor(fc, ("FID_from_lines", "otherfield","SHAPE@)) 

storage = []
for row in cursor:
        storage.append(row)
sortedlist = sorted(storage, key=lambda x: x[0]) #sort based on line FID

poly = "C:/temp/newpolygon.shp"
fcout = arcpy.da.InsertCursor(poly, ("FID_from_lines","otherfield","SHAPE@"))

for i in sortedlist:
    fcout.insertRow(i)

del fcout, sc

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