我正在尝试使用开放数据(避免使用Google之类的许可限制)来计算远足路线的海拔数据。

我能够读取我所在国家/地区的公开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 ....
.....


我需要做的就是从此网格中获取路线特定节点的高程数据,以便能够
计算高程增益,负斜率,最小/最大高度...

我使用不错的OSMAR包从OpenStreetMap带来了路线数据,所以我路线的数据表如下所示:

    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坐标参考系统中变换纬度/经度坐标,然后如何带来相应的网格值(对最近点进行平均)?

我发现所有使用谷歌搜索的文档都将渲染网格图,而不是从中提取值。

任何帮助将不胜感激!

干杯,MB

附言第二个问题应该是:
“有多个网格拼贴,如果一条路线跨越两个或多个拼贴,该怎么办?将它们合并,同时引用两个……”

最佳答案

不要转换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::overraster::extract获取点位置的DEM值。

10-08 02:03