R: crear un cuadro delimitador, convertir a clase Polígono y trazar

11

Tengo el NE lat lngy SW lat lng. Mi objetivo es simple, estoy usando RStudio y quiero crear un cuadro delimitador a partir de los dos lats y longs anteriores y luego generar Polygon y quiero agregar puntos aleatorios en el polígono cuadrado. Tengo NELat / Lng y SW-Lat / Lng en un archivo csv que podría importar a un data.frame.

Solo necesito un poco de orientación para comenzar, soy muy nuevo en el lenguaje R, es realmente diferente a lo que estoy acostumbrado.

Hasta ahora tengo esto:

coords = cbind(78.46801, 19.53407)
coordsmax = cbind(78.83157, 19.74557 )
sp = SpatialPoints(coordsmax)
sp2 = SpatialPoints(coords)

r1 = rbind(coords, coordsmax[1, ])  # join
P1 = Polygon(r1)
Ps1 = Polygons(list(P1), ID = "a")
plot(Ps1)

Acabo de ver algunos ejemplos en otro lugar, pero no puedo trazar un polígono de 4 esquinas.

usuario134611
fuente
Solo tiene una sola coordenada duplicada en r1, ¿está destinado a ser 'r1 = rbind (coords, coordsmax) `??
mdsumner
Sí, lo corrigió. Sin embargo, todavía no funciona
user134611
Trabajar los problemas cuidadosamente uno por vez es una buena manera de encontrar una solución. Considero que es un error que Polygon () no comete errores cuando se le dan solo dos o una coordenadas, lo he notado en los problemas de sp. Para ti q, biblioteca (raster); SPs1 <- como (extensión (r1), "Polígonos espaciales"); plot (SPs1)
mdsumner
Lamento tener que usar la función de respuesta de stackexchange, pero mi reputación no es lo suficientemente alta como para comentar. @ dof1985 usa (x_min, y_min), (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) como coordenadas para crear el polígono. He intentado lo mismo, pero fallé. luego miré más de cerca tu ejemplo y examiné que usas en lugar de (x_min, y_min), (x_max, y_min), ... siguiente (x_min, y_min), (x_min, y_max), ... ¿podría ser este el razón de mi error? por favor corrija su ejemplo :)
ExploreR

Respuestas:

7

Se han realizado algunos cambios en su código:

Primero, tenga en cuenta que abandoné la creación de puntos. Puede formar un polígono sin el uso de SpatialPoints. Aunque en caso de que haya muchos puntos involucrados, sería mejor crear un polígono a partir de puntos.

En segundo lugar, escribí 5 pares de coordenadas en la matriz a continuación. Cada par de coordenadas representa una esquina de su cuadro delimitador, y el quinto repite el primer punto. A saber, la matriz incluye: [ (x_min, y_min) , (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) ]

Por último, he utilizado SpatialPolygonscon espg:4326para formar un objeto trama capaz dentro de un contexto geográfica.

library(sp)

coords = matrix(c(78.46801, 19.53407,
               78.46801, 19.74557,
               78.83157, 19.74557,
               78.83157, 19.53407,
               78.46801, 19.53407), 
             ncol = 2, byrow = TRUE)


P1 = Polygon(coords)
Ps1 = SpatialPolygons(list(Polygons(list(P1), ID = "a")), proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
plot(Ps1, axes = TRUE)

Esto es lo que sucede si trazo tu código:

Un polígono que se parece a una línea.

y esto es después de las modificaciones de código presentadas aquí:

Caja de unión

dof1985
fuente
¡Eso es! ¿Podrías comentar un poco proj4String? ¿Estás definiendo las características de un lat y largo a través de él?
user134611
Presiona ?is.projecteden R-console para ver la proj4stringayuda. Sí, se usa para definir la clase CRS en un objeto espacial
dof1985
21

Puede anidar la extentfunción, desde la biblioteca ráster, aspara crear un objeto SpatialPolygons.

library(sp)
e <- as(raster::extent(78.46801, 78.83157, 19.53407, 19.74557), "SpatialPolygons")
proj4string(e) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
plot(e)
Jeffrey Evans
fuente
2
Esta parece una mejor manera que mi respuesta.
dof1985