poligono para pairs librerias graficos grafico graficas graficar grafica ejemplos cuadricula animados r gis geospatial

para - Cómo convertir el marco de datos a coordenadas espaciales



poligono en r (3)

He estado trabajando en datos de terremotos que tienen valores de latitud larga, y quiero convertir esos valores de latitud larga en coordenadas espaciales.

Supongamos que tengo el siguiente conjunto de datos df :

longitude latitude 128.6979 -7.4197 153.0046 -4.7089 104.3261 -6.7541 124.9019 4.7817 126.7328 2.1643 153.2439 -5.6500 142.8673 23.3882 152.6890 -5.5710

Quiero convertirlo en puntos espaciales. Algo como esto:

lon lat [1,] 2579408.24 1079721.15 [2,] 2579333.69 1079729.18 [3,] 2579263.65 1079770.55 [4,] 2579928.04 1080028.46 [5,] 2579763.65 1079868.92 [6,] 2579698.00 1079767.97

Use el siguiente código:

library(sp) df.sp<-df coordinates(df.sp)<-~x+y

Pero recibo el siguiente error:

Error in `[.data.frame`(object, , -coord.numbers, drop = FALSE) : undefined columns selected


Con

structure(list(longitude = c(128.6979, 153.0046, 104.3261, 124.9019, 126.7328, 153.2439, 142.8673, 152.689), latitude = c(-7.4197, -4.7089, -6.7541, 4.7817, 2.1643, -5.65, 23.3882, -5.571)), .Names = c("longitude", "latitude"), class = "data.frame", row.names = c(NA, -8L))

Para convertir a SpatialPointsDataFrame

coordinates(df) <- cbind(df$longitude , df$latitude)

Como lo señaló @jazzurro, probablemente necesitará asignar un CRS a su objeto espacial.

proj4string(df) = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")

el proceso inverso SpatialPointsDataFrame al df original

df <- data.frame(longitude = coordinates(df)[,1], latitude = coordinates(df)[,2])


O usando sf lugar de objetos sp (consulte más información sobre las Características simples para R o la migración de sp a sf here ):

require(sf) my.df <- read.table(text=" longitude latitude 128.6979 -7.4197 153.0046 -4.7089 104.3261 -6.7541 124.9019 4.7817 126.7328 2.1643 153.2439 -5.6500 142.8673 23.3882 152.6890 -5.5710", header=TRUE) my.sf.point <- st_as_sf(x = my.df, coords = c("longitude", "latitude"), crs = "+proj=longlat +datum=WGS84") # simple plot plot(my.sf.point) # interactive map: require(mapview) mapview(my.sf.point) # convert to sp object if needed my.sp.point <- as(my.sf.point, "Spatial")


Primero, toma las columnas de lon y lat y crea un objeto para coord . Luego, los resta del marco de datos original y crea un nuevo objeto. Finalmente, utiliza SpatialPointsDataFrame() para crear un SpatialPointsDataFrame . Cuando crea un SpatialPointsDataFrame , necesita asignar proj4string . Elija uno apropiado para usted.

En su caso, no tiene otras columnas, pero lon y lat , el método no funcionará. A propósito dejé lon y lat @data.

DATOS

mydf <- structure(list(longitude = c(128.6979, 153.0046, 104.3261, 124.9019, 126.7328, 153.2439, 142.8673, 152.689), latitude = c(-7.4197, -4.7089, -6.7541, 4.7817, 2.1643, -5.65, 23.3882, -5.571)), .Names = c("longitude", "latitude"), class = "data.frame", row.names = c(NA, -8L)) ### Get long and lat from your data.frame. Make sure that the order is in lon/lat. xy <- mydf[,c(1,2)] spdf <- SpatialPointsDataFrame(coords = xy, data = mydf, proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")) #> str(spdf) #Formal class ''SpatialPointsDataFrame'' [package "sp"] with 5 slots #..@ data :''data.frame'': 8 obs. of 2 variables: #.. ..$ longitude: num [1:8] 129 153 104 125 127 ... #.. ..$ latitude : num [1:8] -7.42 -4.71 -6.75 4.78 2.16 ... #..@ coords.nrs : num(0) #..@ coords : num [1:8, 1:2] 129 153 104 125 127 ... #.. ..- attr(*, "dimnames")=List of 2 #.. .. ..$ : NULL #.. .. ..$ : chr [1:2] "longitude" "latitude" #..@ bbox : num [1:2, 1:2] 104.33 -7.42 153.24 23.39 #.. ..- attr(*, "dimnames")=List of 2 #.. .. ..$ : chr [1:2] "longitude" "latitude" #.. .. ..$ : chr [1:2] "min" "max" #..@ proj4string:Formal class ''CRS'' [package "sp"] with 1 slot #.. .. ..@ projargs: chr "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"