寻找一座山的顶峰 [英] Finding the peak of a mountain
本文介绍了寻找一座山的顶峰的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所以我将这两个栅格合并为一个包含高程值的DEM栅格:
dem1 = read_stars("srtm_43_06.tif")
dem2 = read_stars("srtm_44_06.tif")
pol = st_read("israel_borders.shp")
dem = st_mosaic(dem1, dem2)
dem = dem[, 5687:6287, 2348:2948]
names(dem) = "elevation"
dem = st_warp(src = dem, crs = 32636, method = "near", cellsize = 90)
现在我需要通过找到图像中海拔最高的像素的质心来计算山峰的点几何,有人知道我可以使用什么函数吗?
推荐答案
在Grzegorz Sapijaszko的示例基础上,这里有一条通往山顶的替代路径。
library(terra)
f <- system.file("ex/elev.tif", package="terra")
x <- rast(f)
如果有一个最大值,您可以
g <- global(x, which.max)
xyFromCell(x, g[,1])
# x y
#[1,] 6.020833 50.17917
现在,考虑一个有多个极大值的情况。我又添加了三个具有最大值的单元格。
x[c(1000, 2500, 5000)] <- 547
我们可以通过以下命令找到四个最高峰:
g <- global(x, which.max)[[1]]
v <- x[g] |> unlist()
y <- ifel(x == v, v, NA)
p <- as.points(y)
crds(p)
#[1,] 6.020833 50.17917
#[2,] 6.154167 50.10417
#[3,] 5.987500 49.97083
#[4,] 6.237500 49.75417
您应该而不是首先对栅格数据进行扭曲(project
),因为这会更改单元格值并可能更改最高峰的位置。您应该使用原始数据找到峰值,但然后可以像这样转换结果。
pp <- project(p, "EPSG:32636")
crds(pp)
# x y
#[1,] -1411008 5916157
#[2,] -1404896 5904422
#[3,] -1422145 5894509
#[4,] -1413735 5864236
对于您的文件,您可以从以下内容开始
ff <- c("srtm_43_06.tif", "srtm_44_06.tif")
v <- vrt(ff)
g <- global(x, which.max)
,然后按照上面的示例继续。
这篇关于寻找一座山的顶峰的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文