我正在尝试使用开放数据(避免像 Google 那样的许可限制)来计算远足路线的海拔数据。
我能够读取我国的公共(public) DEM(分辨率为 10 米) 使用 readGDAL (来自 RGDAL 包)和 proj4string(mygrid) 给我:
"+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
.asc 文件的开头是:
ncols 9000
nrows 8884
xllcorner 323256,181155
yllcorner 4879269,74709
cellsize 10
NODATA_value -9999
978 998 1005 1008 1012 1016 1020 1025 .....
.....
..... 400 Megabytes of elevation values ....
.....
我所需要的只是从该网格中获取路线特定节点的海拔数据,以便能够 计算海拔增益、负坡度、最小/最大海拔...
我从OpenStreetMap获取路线数据,使用nice包OSMAR,所以我的路线数据表是这样的:
RouteId NodeId lat lon
1 -13828 -8754 45.36743 7.753664
2 -13828 -8756 45.36762 7.753878
3 -13828 -8758 45.36782 7.754344
4 -13828 -8760 45.36794 7.754541
....
但是我不知道如何转换DEM坐标引用系中的纬度/经度坐标,然后如何带来相应的网格值(对最近的点进行某种平均?)
我在谷歌上找到的所有文档都是为了渲染网格 map ,而不是从中提取值。
任何帮助将不胜感激!
干杯,MB
附注第二个问题应该是: “有多个网格图 block ,如果一条路线跨越两个或多个图 block ,我该怎么办?合并它们,引用两者......”
最佳答案
不要转换 DEM。改变你的观点。您的 DEM 投影在规则网格上。如果您将其重新投影到另一个中,则可能不是。相反,从 OSM 数据创建空间点:
require(sp); coordinates(my.OSM.points) <- long + lat
然后将它们转换到DEM的坐标引用系(注意你可能需要先设置点的CRS。所以你可以这样做:
# Set pojection information for points
proj4string(my.OSM.points) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84")
# Transform them
new.points <- spTransform( my.OSM.points , proj4string( mygrid ) )
然后查看使用 sp::over
或 raster::extract
获取点位置处的 DEM 值。
关于r - 如何从 DEM(数字高程模型)中提取特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014134/