4 votos

¿Separación de puntos con coordenadas idénticas mediante ArcPy?

Necesito separar puntos con coordenadas idénticas.

Tengo una capa de puntos en la que puede haber hasta 4 puntos superpuestos (misma coordenada). Quiero separar estos puntos entre sí (con una distancia definida en x e y), utilizando un pyscript. Ahora mismo, sólo funciona la primera parte del script (Parte 1), pero luego por alguna razón el script deja de mover los puntos en el segundo "bucle del cursor". ¿Hay alguna forma mejor de resolver la tarea?

#------------------------------------------------------
#Enviroments
    import arcpy
    arcpy.env.overwriteOutput = True
    workspace = r"*"
    arcpy.env.workspace = workspace
    fc = "*"
    fields = ['SHAPE@X', 'SHAPE@Y']

    #Copy feature class:
    arcpy.CopyFeatures_management(fc, fc + "Copy")
    #Set FC to Copied data
    fcCopy = fc + "Copy"

    edit = arcpy.da.Editor(workspace)

    ----------------------Part 1----------------------

    Xlist1 = []
    Ylist1 = []
    edit.startEditing(False, False)

    edit.startOperation()
    with arcpy.da.UpdateCursor(fcCopy, fields) as cursor:
        for row in cursor:
            if row[0] in Xlist1 and row[1] in Ylist1:
                row[0] = row[0] + 10.0 #Move the point 10 meters in X
            if row[0] not in Xlist1 and row[1] not in Ylist1:
                Xlist1.append(row[0])
                Ylist1.append(row[1])
            cursor.updateRow(row)
        print(Xlist1, Ylist1)
        del row
        del cursor
    edit.stopOperation()
    edit.stopEditing(True)

    print("Script Part Done 1")

#----------------------Part 2 ----------------------

Xlist = []
Ylist = []

    edit.startEditing(False, False)
    edit.startOperation()
    with arcpy.da.UpdateCursor(fcCopy, fields) as cursor:
        for row in cursor:
            if row[0] in Xlist and row[1] in Ylist:
                row[1] = row[1] + 10.0   #Move the point 10 meters in Y
            if row[0] not in Xlist and row[1] not in Ylist:
                Xlist.append(row[0])
                Ylist.append(row[1])
            cursor.updateRow(row)
        del row
        del cursor
    edit.stopOperation()
    edit.stopEditing(True)

    print("Script Part Done 2")

Desde enter image description here

Para:

enter image description here

0 votos

¿Podrías añadir una captura de pantalla mostrando cómo quieres que acaben los cuatro coordiantes en el mismo punto?

1 votos

Hola, aprox. como esta esto

2voto

Deepesh Deepak Puntos 21

Tienes esto configurado correctamente, donde esencialmente "saltas" el primer punto en una ubicación dada y luego mueves los puntos subsecuentes en esa ubicación. El problema creo que es que tu lista x y tu lista y son independientes, por lo que podrías tener una coordenada sin duplicados que aparezca ahí si CADA una de sus coordenadas x e y coincide con otro punto. También es innecesario iniciar una sesión de edición ya que el módulo da actualizará los datos directamente sin eso.

Usando tu propio enfoque, podrías cambiar la "Parte 1" para realizar los movimientos x e y, y evitar el problema de las listas x e y independientes con el comando zip:

Xlist1 = Ylist1 = []
with arcpy.da.UpdateCursor(fcCopy, fields) as cursor:
    for row in cursor:
        if (row[0], row[1]) in zip(Xlist1, Ylist1):
            row[0] = row[0] + 10.0 #Move the point 10 meters in X
            row[1] = row[1] + 10.0
            cursor.updateRow(row)
        else:
            Xlist1.append(row[0])
            Ylist1.append(row[1])
        cursor.updateRow(row)
    print(Xlist1, Ylist1)

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