1 votos

¿Añadir un número de secuencia formateado basado en la ubicación?

Tengo datos de puntos de interés. Necesito añadir algún número de secuencia al atributo de cada punto, basado en su ubicación en el mapa de visualización. En mi atributo está ordenado de forma inversa.

Direction i want to add

enter image description here

En la tabla de atributos su inicio desde allí ..

He intentado descender el ObjectID primero y poner este código de ESRI pero el resultado sigue la secuencia de ObjectID..

rec=0 
def autoIncrement(): 
 global rec 
 pStart = 1  
 pInterval = 1 
 if (rec == 0):  
  rec = pStart  
 else:  
  rec += pInterval  
 return rec

Intenté buscar cómo hacer una secuencia de adición en forma descendente. Encontré algunos consejos de este pero todavía no puedo hacerlo porque es demasiado complicado para mis datos. Mis datos sólo contienen ObjectID y shape.

Así que lo que quiero hacer es crear un número de secuencia opuesto al ObjectID o crear un número de secuencia descendente para el simple.

¿Cómo lo hago?

1voto

Anton8000 Puntos 165

Puedes probar herramienta de clasificación y ordenar de izquierda a derecha:

Reordena, en orden ascendente o descendente, los registros de una clase de características o tabla en función de uno o varios campos.

Utilice el spatial_sort_method UL La clasificación comienza en la esquina superior izquierda. Sin embargo, no estoy seguro de que obtengas el orden correcto.

Si no es así, puedes utilizar arcpy. Ejecutar en la ventana de Python:

import arcpy

sequence_field = 'SomeFieldName' #Change
fc = r'C:\data.gdb\points' #Change

arcpy.AddField_management(in_table=fc, field_name=sequence_field, field_type='SHORT')

all_points = [i for i in arcpy.da.SearchCursor(fc,['OID@','SHAPE@X'])] #list all points as pairs of objectid and x coord
all_points.sort(key=lambda x: x[1]) #sort by x coord
update_dictionary = {i[1]:i[0] for i in enumerate([j[0] for j in all_points])} #Create a dictionary of objectid and sequential number using enumerate function

#Update field with sequence
with arcpy.da.UpdateCursor(fc,['OID@',sequence_field]) as cursor:
    for row in cursor:
        row[1] = update_dictionary[row[0]]
        cursor.updateRow(row)

0voto

evolutionxbox Puntos 133

Pruebe la herramienta mencionada en este artículo https://support.esri.com/en/technical-article/000012218 La herramienta de ordenación en la gestión de datos. Puede ordenar la clase de característica / shapefile permanentemente, lo que cambia la tabla de atributos subyacente. Tenga en cuenta que esto es diferente de hacer la operación de ordenación en la propia tabla de atributos, ya que eso sólo cambia la vista.

Es posible que esto no funcione en el propio campo objectid. Si ese es el caso, entonces empezaría por crear un campo separado y rellenarlo con el objectid, y luego recurrir por este segundo campo.

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