2 votos

Extracción de los valores de los píxeles en diferentes bandas para diferentes puntos dando NAs y no valores de los píxeles

Estoy trabajando con estadísticas en R. Y estoy tratando de extraer los valores de los píxeles para cada punto en cada banda de Landsat, sin embargo, sólo estoy recibiendo NAs en lugar de obtener los valores de los píxeles

¿Alguien tiene alguna otra idea sobre lo que estoy haciendo mal?

##point files
trainData_crs<- read.csv(file.csv)

##images loading and convert it to bricks
all_landsat_bands<-list.files ("file.tif")
img <- brick(all_landsat_bands)
##convert to same projection 

## conver~t csv to shp

coordinates(trainData_crs)<-~Latitude +Longitude
proj4string(trainData_crs) <- ("+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-138,-105,-289,0,0,0,0 +units=m
+no_defs ")
class(trainData_crs)

##extract pixel values 
trainData_bands<-raster::extract(x=img,y=trainData_sf, df=T)
View(trainData_bands)

1voto

Jay Bazuzi Puntos 194

Los números en su CSV de puntos parecen grados en lat-long. Esto es (999 veces de 1000) el sistema de coordenadas EPSG 4326. Después de leer los datos, tienes que asignar ese SRC antes de transformarlo en cualquier otra cosa. Ten en cuenta que hay una gran diferencia entre asignar un sistema de coordenadas a unos datos (que no cambia los números de las coordenadas) y transformarlos a otro sistema (que sí cambia los números).

trainData_crs<- read.csv(file.csv)

## convert csv to shp

coordinates(trainData_crs)<-~Latitude +Longitude

en este punto tienes un conjunto de datos espaciales con esos números de coordenadas lat-long. Dile a R que están en lat-long:

proj4string(trainData_crs) = CRS("+init=epsg:4326")

Ahora debería ser capaz de transformarlos en el CRS de la imagen:

trainData_crs_sp <- spTransform(trainData_crs, crs(img))

Trazar la imagen [ plot(img) ] y añadir los puntos [ plot(trainData_crs_sp, add=TRUE) ] para comprobar el solapamiento de los puntos.

0voto

real Puntos 43

Gracias por su respuesta. No sé cómo suministrar mis datos, no veo ningún lugar para adjuntarlos, pero también soy nuevo en publicar aquí, pero voy a tratar de darle la impresión de los datos.

##point files
trainData_crs<- read.csv(file.csv)                                                                       > class(trainData_crs)
[1] "data.frame"

> summary(trainData_crs)
       PlotType      Class          Latitude       Longitude    
 closedforest:22   Min.   :1.000   Min.   :17.81   Min.   :24.72  
 grass       :34   1st Qu.:2.000   1st Qu.:17.86   1st Qu.:24.98  
 lowforest   :24   Median :3.000   Median :17.92   Median :25.02  
 mediumforest:26   Mean   :2.904   Mean   :17.95   Mean   :25.02  
 shrubs      : 4   3rd Qu.:4.000   3rd Qu.:18.01   3rd Qu.:25.10  
 unknown     : 3   Max.   :7.000   Max.   :18.46   Max.   :25.16  
 water       : 1 

##images load and convert it to bricks
all_landsat_bands<-list.files ("file.tif")
img <- brick(all_landsat_bands)
> img <- brick(LandsatAprJune_2019_st)
> class(img)
[1] "RasterBrick"
attr(,"package")
[1] "raster"
> names(img)
[1] "B1"  "B2"  "B3"  "B4"  "B5"  "B6"  "B7"  "B10" "B11"
>

##convert to same projection 

coordinates(trainData_crs)<-~Latitude +Longitude
trainData_crs <- SpatialPoints(cbind(trainData_crs$Latitude, trainData_crs$Longitude), 
                            proj4string=CRS("+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-138,-105,-289,0,0,0,0 +units=m
+no_defs "))
trainData_crs_sp <- spTransform(trainData_crs, crs(img))

##confirm if points and image are in same coordinates
> crs(trainData_crs_sp)
CRS arguments:
 +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-138,-105,-289,0,0,0,0 +units=m
+no_defs 
> crs(img)
CRS arguments:
 +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-138,-105,-289,0,0,0,0 +units=m
+no_defs 

##summary on transformed points
> summary(trainData_crs_sp)
Object of class SpatialPoints
Coordinates:
                 min        max
coords.x1   177676.9   244145.4
coords.x2 12738109.3 12786443.7
Is projected: TRUE 
proj4string :
[+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-138,-105,-289,0,0,0,0 +units=m
+no_defs]
Number of points: 114

##extract pixel values 
trainData_bands<-raster::extract(img, trainData_crs_sp)

He editado el código anterior para intentar usar spTransform en los puntos pero sigo obteniendo NAs

Gracias

0voto

real Puntos 43

Leer archivos de datos

trainData_crs<- read.csv(".csv")

coordenadas(trainData_crs)<-~Latitud +Longitud

establecer números de coordenadas lat-long

proj4string(trainData_crs) = CRS("+init=epsg:4326")

crs(trainData_crs) Argumentos del CRS: +init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0

ransformarlas al CRS de la imagen

trainData_crs_sp <- spTransform(trainData_crs, crs(img))

imágenes de la parcela

plotRGB(img, r = 4, g = 3, b = 2, stretch = "lin", escala=1000, ejes = TRUE, main = "Imagen compuesta RGB \n Bandas Landsat 7, 3, 2") box(col = "black"); plot(trainData_crs_sp, add=T)

plot(trainData_crs_sp)

crs(img) crs(trainData_crs_sp)

crs(trainData_crs_sp) Argumentos del CRS: +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-138,-105,-289,0,0,0,0 +units=m +no_defs crs(img) Argumentos CRS: +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-138,-105,-289,0,0,0,0 +units=m +no_defs

Parece que están en la misma coordenada pero cuando los trazo, no aparecen en el mismo lugar/no se superponen. Creo que es por eso que estoy recibiendo NAs porque no hay superposición. ¿Alguna idea de las posibilidades ¿Por qué no se superponen si están en las mismas coordenadas ahora?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X