3 votos

Barrera del camino de menor coste (R) (gdistancia)

Intento crear una barrera (ríos) que no se pueda cruzar por el camino de menor coste.

He creado una capa de transición utilizando "áreas" que contiene los valores de transición en tierra, y en los ríos. Sin embargo, la barrera tiene un "amortiguador" a su alrededor, con valores crecientes, en lugar de ser una barrera discreta.

Raster de costes y capa de transición cost raster Transition layer Como puede verse, hay un "amortiguador" alrededor de la barrera en la capa de transición.

¿Alguna idea sobre cómo crear un límite discreto? preferiblemente con la barrera como un valor de 1000, con todas las demás partes un valor de 1.

código: library(gdistance) ## Create cost surface where "land" exists in the middle cost <- raster(nrow=100, ncol=100, xmn=0, xmx=100, ymn=0, ymx=100, crs="+proj=utm") cost[] <- 10 cost[cellFromRowColCombine(cost, 50:55,20:80)] <- 1000 costf <- asFactor(cost < 100) ## Produce transition matrices, and correct because 8 directions trCost <- transition(costf, "areas", directions=16) trCost1 <- geoCorrection(trCost[[2]], type="c") plot(cost) plot(raster(trCost[[1]]))

4voto

pw. Puntos 615

Existen varias opciones para crear este tipo de barrera utilizando estratégicamente el argumento transitionFuntion en la función de transición. Esto debería cubrir el 99% de los casos. Establezca el valor de conductancia en 0 para asegurarse de que el camino no cruza el río en absoluto. (Para que el río sea 100 veces más costoso que la tierra, utilice en su lugar un valor de conductancia pequeño: 0.01.)

Allá vamos.

library(gdistance)

Crear superficie de coste fijando la tierra a una conductancia de 10.

cost <- raster(nrow=100, ncol=100, 
           xmn=0, xmx=100, ymn=0, ymx=100, crs="+proj=utm")
cost[] <- 10

Establecer las celdas de origen y destino de las pruebas

origin <- c(50, 1)
goal <- c(50, 100)

Opción 1 - transitionFunction = media

cc1 <- cellFromRowColCombine(cost, 50:55,20:80)
cost1 <- cost
cost1[cc1] <- 0 
trCost1 <- transition(cost1, transitionFunction = mean, 16)
trCost1 <- geoCorrection(trCost1, type="c")

Compruebe si la opción 1 ha funcionado

plot(raster(trCost1))
sPath1 <- shortestPath(trCost1, origin, goal, output="SpatialLines")
lines(sPath1)

Opción 2 - transitionFunction = min

La opción 1 no funcionará con ríos que sólo tengan una celda de ancho. Si esto supone un problema, la Opción 2 es una alternativa.

cc2 <- cellFromRowColCombine(cost, 50,20:80)
cost2 <- cost
cost2[cc2] <- 0 
trCost2 <- transition(cost2, transitionFunction = min, 8)
trCost2 <- geoCorrection(trCost2, type="c")

No utilices 16 direcciones para la opción 2, ¡ya que así podrás saltar la barrera (movimiento del caballo de ajedrez)!

Compruebe si la opción 2 ha funcionado.

plot(raster(trCost2))
sPath2 <- shortestPath(trCost2, origin, goal, output="SpatialLines")
lines(sPath2)

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