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?
Respuestas
¿Demasiados anuncios?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.
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)
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.
No estoy seguro de que esto sea mejor que el enfoque de @Aaron pero creo que es un truco interesante.
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.