es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener coordenadas aleatorias dentro del área limitada en rojo, puedes seguir estos pasos:

    1. Lee el archivo de forma (shapefile) del área limitada en rojo como un SpatialPolygonsDataFrame.
    2. Utiliza la función gBuffer del paquete rgeos 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.
    3. Utiliza la función spsample del paquete sp para muestrear puntos aleatorios dentro de la amortiguación. Establece n como el número de puntos aleatorios que deseas.
    4. Utiliza la función over del paquete sp para quedarte sólo con los puntos que caen dentro del polígono original.
    5. Extrae las coordenadas de los puntos restantes.

    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.

Comments are closed.