Suite

Comment déplacer des points au hasard ?

Comment déplacer des points au hasard ?


J'ai une classe d'entités avec un grand nombre de points. Mon but est de déplacer ces points au hasard pour voir ce qui se passe en conséquence. Existe-t-il des outils spécifiques ou des méthodes de programmation Python pour accomplir cela ?


Vous pouvez manipuler la géométrie des points individuels à l'aide d'un curseur de mise à jour. L'accès au jeton [email protected] est de loin l'approche basée sur le curseur la plus efficace. Cependant, si vous avez un polygone de votre zone d'intérêt, l'utilisation d'un générateur de points aléatoires sera probablement plus efficace. Dans cet exemple, j'utilise un seuil minimum et maximum pour définir les limites d'un nombre aléatoire. Ce nombre aléatoire est utilisé pour changer les coordonnées X et Y.



import arcpy, random # La classe d'entités ponctuelles en entrée fc = r'C:	emppoints.shp' # Définir les limites des nombres aléatoires (les unités seront des unités PCS) min = -100 max = 100 # Démarrer un curseur de mise à jour pour mettre à jour la géométrie du point avec arcpy.da.UpdateCursor(fc, ["[email protected]"]) comme curseur : pour la ligne dans le curseur : 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) # Les nouvelles coordonnées row[0] = xy cursor.updateRow(row)

Une autre approche serait d'utiliser le calculateur de terrain. Voici le code dont vous aurez besoin pour le calculateur de champs :

from random import randint,choice def RandMove(old_pnt,min_shift,max_shift): neg = [-1,1] #obtenir le premier point de l'objet géométrique old_x = old_pnt.firstPoint.x old_y = old_pnt.firstPoint.y #calculate new coordonnées new_x = old_x + (choice(neg) * randint(min_shift,max_shift)) new_y = old_y + (choice(neg) * randint(min_shift,max_shift)) #créer un nouvel objet point et une nouvelle géométrie pour renvoyer new_pnt = arcpy.Point (new_x,new_y) pt = arcpy.PointGeometry(new_pnt) renvoie pt

Pour utiliser le calculateur de champs, ouvrez la table attributaire de votre classe d'entités et cliquez avec le bouton droit sur le champ Forme. Sélectionnez l'analyseur Python et cliquez sur la case à cocher Afficher le bloc de code, puis collez le code ci-dessus dans la zone de texte Code de script pré-logique. La capture d'écran ci-dessous montre à quoi devrait ressembler le calculateur de champs.

Je ne sais pas si c'est mieux que l'approche de @Aaron mais je pense que c'est une astuce intéressante.


Voir la vidéo: Основные ошибки при возведении перегородок из газобетона #5