Lo strumento Crea punto casuale è in grado di generare un certo numero di punti all'interno dei poligoni. Mi chiedo, dato un rettangolo di selezione, esiste un modo per generare punti casuali al di fuori di quel poligono?
Lo strumento Crea punto casuale è in grado di generare un certo numero di punti all'interno dei poligoni. Mi chiedo, dato un rettangolo di selezione, esiste un modo per generare punti casuali al di fuori di quel poligono?
Risposte:
Personalmente non mi piace l'algoritmo a punti casuali in ArcGIS. In alternativa, utilizzare la funzione Geospatial Modeling Environment (GME) genrandompnts
. Sarai in grado di identificare specifici poligoni in cui verranno esclusi i punti casuali (vedi l'area evidenziata in allegato .jpg). Il meglio di tutto questo software è gratuito.
GME offre una suite di strumenti di analisi e modellazione, che vanno dai piccoli "blocchi" che è possibile utilizzare per costruire un flusso di lavoro sofisticato, fino ai programmi di analisi completamente autonomi. Utilizza inoltre il software open source straordinariamente potente R come motore statistico per guidare alcuni degli strumenti di analisi. Uno dei tanti punti di forza di R è che è open source, completamente trasparente e ben documentato: caratteristiche importanti per qualsiasi software scientifico analitico.
Dovrai creare un poligono di ciambella con il foro della ciambella che rappresenta lo spazio interno non puntuale e una certa estensione spaziale che rappresenta l'area di delimitazione dell'area poligonale.
Scusa, non riesco proprio a resistere. Dato che è sempre bene sapere cosa succede sotto il cofano con qualcosa come GME, ecco una soluzione nel codice R attuale.
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)
Questo approccio è probabilmente molto diverso da come il GME fa questo, ma sta usando classi spaziali R native e una libreria di topologia abbastanza nuova che rende il codice molto efficiente. Questo fornisce anche un esempio che può essere facilmente inserito in un ciclo for.