terra::distance solo informa la distancia a las celdas NA del ráster.
Estoy intentando usar terra::distance
de la misma manera que usaría raster::distanceFromPoints
. Sin embargo, terra::distance
solo reporta la distancia desde el/los punto(s) hasta las celdas NA. ¿Este es el resultado previsto? Incluyo código de muestra con mi solución alternativa.
Gráfico de raster con punto para el cálculo de distancias
Gráfico de terra::distance para el punto
Resultado deseado
r <- terra::rast(ncols=10, nrows=10)
valR <- rep(1, length = 100)
valR[c(1,12,23,34,45,56,67,78,89,100)] <- NA
terra::values(r) <- valR
xp <- c(50)
yp <- c(50)
xyp <- cbind(xp, yp)
vecP <- terra::vect(xyp)
terra::plot(r)
terra::plot(vecP, add=T)
rDist <- terra::distance(r, vecP)
terra::plot(rDist) # solo las celdas NA tienen el valor de distancia
# SOLUCIÓN ALTERNATIVA
r1 = r*0
r1[is.na(r1)] <- 100
r1[r1<1] <- NA
r1Dist <- terra::distance(r1, vecP)
terra::plot(r1Dist)
####################
# utilizando raster::distanceFromPoints
####################
rR <- raster::raster(ncols=10, nrows=10)
raster::values(rR) <- valR
raster::plot(rR)
rRDist <- raster::distanceFromPoints(rR, xyp)
rRDist <- raster::mask(rRDist, rR)
raster::plot(rRDist)
davy.ai
Según el código de muestra y los gráficos proporcionados, parece que la función
terra::distance
solo informa la distancia desde el o los puntos a las celdas NA en el raster de entrada. Esto es probablemente el comportamiento previsto de la función, ya que está diseñada para calcular la distancia desde cada celda hasta la celda no-NA más cercana. Por lo tanto, si el raster de entrada contiene celdas NA, la distancia solo se calculará para aquellas celdas que no sean NA.Para obtener el resultado deseado, la solución alternativa proporcionada en el código de muestra reemplaza efectivamente todas las celdas NA con un valor de 100 antes de calcular la distancia, lo que permite que la función
terra::distance
calcule la distancia desde el punto a todas las celdas en el raster.Alternativamente, se puede utilizar la función
raster::distanceFromPoints
para lograr el mismo resultado deseado. La función toma un raster y uno o más puntos como entradas y calcula la distancia desde cada punto hasta la celda más cercana en el raster. El raster de distancia resultante luego se puede enmascarar para excluir cualquier celda en el raster original que sea NA.En general, la elección entre
terra::distance
yraster::distanceFromPoints
puede depender del caso de uso específico y los requisitos.