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.

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 o raster con celdas NA diagonales y punto en 50,50

Gráfico de terra::distance para el punto

Raster de terra::distance mostrando distancia calculada solo para celdas NA

Resultado deseado

Solución alternativa para obtener valores de distancia utilizando terra::distance

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)
Tags:  , ,

Answer

  1. Avatar for 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 y raster::distanceFromPoints puede depender del caso de uso específico y los requisitos.

Comments are closed.