r - 如何从 DEM(数字高程模型)中提取特定值?

标签 r openstreetmap rgdal osmar

我正在尝试使用开放数据(避免像 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::overraster::extract 获取点位置处的 DEM 值。

关于r - 如何从 DEM(数字高程模型)中提取特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014134/

相关文章:

r - 更改 rmarkdown "table of contents"默认标题

r - 如何在 R 中绘制哈密顿图?

postgresql - 从 postgresql osm db 中的 planet_osm_polygon.way 获取经纬度

OpenStreetMap API - 查找和可视化碎石路

readOGR (rgdal) 无法从 XML 获取多边形名称

r - 如何导出没有图表边框的tm对象

r - 在 SpatialPixelsDataFrame 上叠加 shapefile 时生成的 NA

R - 根据重复项和另一列中的值删除行

r - 从R中的多列中获取给定id的唯一元素

javascript - 如何使用 html5/js 渲染带有兴趣点的 3D map