L'outil Créer un point aléatoire est capable de générer un certain nombre de points dans les polygones. Je me demande, étant donné un cadre de délimitation, est-il possible de générer des points aléatoires en dehors de ce polygone?
L'outil Créer un point aléatoire est capable de générer un certain nombre de points dans les polygones. Je me demande, étant donné un cadre de délimitation, est-il possible de générer des points aléatoires en dehors de ce polygone?
Réponses:
Personnellement, je n'aime pas l'algorithme de point aléatoire dans ArcGIS. Vous pouvez également utiliser lagenrandompnts
fonction GME ( Geospatial Modeling Environment ) . Vous serez en mesure d'identifier des polygones spécifiques où des points aléatoires seront exclus (voir la zone en surbrillance dans le fichier .jpg ci-joint). Le meilleur de tous ces logiciels est gratuit.
GME vous fournit une suite d'outils d'analyse et de modélisation, allant de petits «blocs de construction» que vous pouvez utiliser pour construire un flux de travail sophistiqué, à des programmes d'analyse complètement autonomes. Il utilise également le logiciel open source extraordinairement puissant R comme moteur statistique pour piloter certains des outils d'analyse. L'une des nombreuses forces de R est qu'il est open source, complètement transparent et bien documenté: caractéristiques importantes pour tout logiciel d'analyse scientifique.
Vous allez devoir créer un polygone en anneau avec le trou en anneau représentant l'espace intérieur non ponctuel et une certaine étendue spatiale représentant la zone de délimitation de la zone polygonale.
Désolé, je ne peux tout simplement pas résister. Puisqu'il est toujours bon de savoir ce qui se passe sous le capot avec quelque chose comme GME, voici une solution dans le code R réel.
require(sp)
require(rgeos)
# Create example polygon data
x <- readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))")
y <- readWKT("POLYGON ((3 3, 7 3, 7 7, 3 7, 3 3))")
# Calculate difference in polygon geometries to create null polygon
d <- gDifference(x,y)
# Create random sample in non-null polygon
rs <- spsample(d, 20, type="random")
# Plot results
plot(d, col="red")
plot(rs,pch=19,col="black",add=TRUE)
Cette approche est probablement très différente de la façon dont GME le fait, mais utilise des classes spatiales R sp natives et une bibliothèque de topologie assez nouvelle rendant le code très efficace. Cela donne également un exemple qui peut facilement être enveloppé dans une boucle for.