4 votos

¿Cómo mover aleatoriamente los puntos?

Tengo una clase de características con una gran cantidad de puntos. Mi propósito es mover aleatoriamente estos puntos para ver qué sucede como resultado. ¿Existen herramientas específicas o métodos de programación en Python para lograr esto?

1 votos

Por favor, especifique por qué quiere eso y más contexto, por favor.

1 votos

Por ejemplo, ¿es necesario mover los puntos o basta con sembrar una zona con un número x/densidad de puntos al azar?

0 votos

Todos los lenguajes de programación tienen algún tipo de función de generación de números aleatorios.

5voto

Aaron Puntos 25882

Puede manipular la geometría de puntos individuales utilizando un Actualizar Cursor . El acceso a la ficha SHAPE@XY es, con mucho, el método más eficaz basado en el cursor. Sin embargo, si usted tiene un polígono de su área de interés, el uso de un generador de puntos al azar probablemente será más eficiente. En este ejemplo, utilizo un umbral mínimo y máximo para establecer los límites de un número aleatorio. Este número aleatorio se utiliza para cambiar las coordenadas X e Y.


enter image description here


import arcpy, random

# The input point feature class
fc = r'C:\temp\points.shp'

# Set the random number limits (units will be PCS units)
min = -100
max =  100

# Start an update cursor to update the point geometry
with arcpy.da.UpdateCursor(fc, ["SHAPE@XY"]) as cursor:
    for row in cursor:
        rand_x = random.randint(min, max)
        rand_y = random.randint(min, max)
        x  = row[0][0] + rand_x
        y  = row[0][1] + rand_y
        xy = (x,y) # The new coordinates
        row[0] = xy
        cursor.updateRow(row)

0voto

GeneQ Puntos 2885

Otro enfoque sería utilizar la calculadora de campo. Aquí está el código que usted necesitará para la calculadora de campo:

from random import randint,choice

def RandMove(old_pnt,min_shift,max_shift):
  neg = [-1,1]

  #get the first point from the geometry object
  old_x = old_pnt.firstPoint.x
  old_y = old_pnt.firstPoint.y

  #calculate new coordinates
  new_x = old_x + (choice(neg) * randint(min_shift,max_shift))
  new_y = old_y + (choice(neg) * randint(min_shift,max_shift))

  #create a new point object and geometry to return
  new_pnt = arcpy.Point(new_x,new_y)
  pt = arcpy.PointGeometry(new_pnt)

  return pt

Para utilizar la calculadora de campos, abra la tabla de atributos de su clase de característica y haga clic con el botón derecho en el campo Shape. Seleccione el analizador de Python y haga clic en la casilla de verificación Mostrar bloque de código, luego pegue el código anterior en el cuadro de texto Código script pre-lógico. La captura de pantalla de abajo muestra el aspecto que debería tener la calculadora de campos.

enter image description here

No estoy seguro de que esto sea mejor que el enfoque de @Aaron pero creo que es un truco interesante.

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