Cómo extraer coordenadas aleatorias de un lugar manteniendo su forma geométrica propia?
Me gustaría obtener coordenadas aleatorias dentro del área delimitada en rojo:
El código a continuación es lo que he intentado hasta ahora, pero no estoy seguro si hace lo que se supone que debe hacer, ya que es una mezcla de algunos códigos y nunca he visto un código que muestre coordenadas aleatorias en una geometría original de tal ubicación.
library(raster)
library(sp)
library(rgeos)
library(rgdal)
library(dismo)
library(rgdal)
library(sf)
library(rgdal)
library(maptools)
library(scales)
d=getData('worldclim', lat=-5.49839, lon=-39.32062, res=0.5, var='bio') #estas latitudes y longitudes son las coordenadas centrales
setwd('C:/Users/DAVI/Desktop/Nova pasta (2)') #Mi directorio
estados=readShapePoly("lim_unidade_federacao_a.shp") #Este es un SpatialPolygonsDataFrame que contiene todos los estados de Brasil, la descarga está después de la pregunta.
estados[estados@data$nome=="Ceará",] #Solo me interesa Ceará
plot(estados[estados@data$nome=="Ceará",]) #Ten en cuenta que mantiene la geometría del estado que me interesa
ceara=spsample(estados[estados@data$nome=="Ceará",], n=1000, type="random") #Muestreo de coordenadas aleatorias
Esto se ejecuta sin problemas, pero como mencioné, no estoy seguro si es correcto.
Datos utilizados: https://drive.google.com/file/d/1l5dOt5l2f6DZz3dRq7p0Ig9Q1iE8BdLB/view?usp=sharing
davy.ai
Para obtener coordenadas aleatorias dentro del área limitada en rojo, puedes seguir estos pasos:
shapefile
) del área limitada en rojo como unSpatialPolygonsDataFrame
.gBuffer
del paquetergeos
para crear un área de amortiguación alrededor del polígono. El tamaño de la amortiguación debe ser igual a la distancia máxima desde el borde del polígono hasta cualquier punto dentro del polígono.spsample
del paquetesp
para muestrear puntos aleatorios dentro de la amortiguación. Establecen
como el número de puntos aleatorios que deseas.over
del paquetesp
para quedarte sólo con los puntos que caen dentro del polígono original.Aquí tienes un ejemplo de código:
“`{r}
library(sp)
library(rgeos)
Lee el archivo de forma del área limitada en rojo
red_area <- readShapePoly(“red_bounded_area.shp”)
Crea una amortiguación alrededor del polígono
buffer_size <- gBuffer(red_area, byid=TRUE, width=0)
buffer_poly <- SpatialPolygons(list(Polygons(list(Polygon(buffer_size)), ID=”1″)))
Muestrea puntos aleatorios dentro de la amortiguación
random_points <- spsample(buffer_poly, n=1000, type=”random”)
Conserva sólo los puntos que caen dentro del polígono original
points_within_polygon <- over(random_points, red_area)
points_within_polygon <- points_within_polygon[!is.na(points_within_polygon$ID),]
Extrae las coordenadas de los puntos restantes
coordinates(points_within_polygon)
“`
Asegúrate de reemplazar “red_bounded_area.shp” por el nombre de archivo del shapefile que estés utilizando. Además, ajusta el tamaño de la amortiguación según sea necesario en función del tamaño del polígono: es posible que necesites experimentar para encontrar un valor adecuado.