【问题标题】:Finding the boundary points in a raster data file在栅格数据文件中查找边界点
【发布时间】:2012-08-24 18:55:04
【问题描述】:

所以,我有中心点和缩放级别。
我必须在地图上标出一些点。

地图存储在栅格数据文件中,并显示在 R 的小部件上。

问题是当收到一个点时,我需要检查它是否在这个光栅文件的数据中。
如果该点在光栅文件中,那么我可以安全地绘制它。
如果没有,那么我需要加载另一个包含该点的光栅文件,然后绘制该点。

R 的raster 包有一个名为as.data.frame 的函数,它将栅格数据加载到数据框中。

那么,是否有可能找出四个角上的点(纬度和经度)? 我在正确的轨道上吗?

【问题讨论】:

  • 你能不能只将你的绘图的 x 和 y 轴限制在 ggnap 的范围内?
  • @mnel 抱歉,不熟悉 R,所以不知道该怎么做。
  • 这将取决于您使用什么来创建情节。我假设您正在使用ggmap() 创建绘图,在这种情况下,范围会自动设置为此。例如hdf <- get_map(); .points <- data.frame(lon = 0, lat = 0); ggmap(hdf, extent = 'device') + geom_point(data = .points,aes(x=lon,y=lat)) -- 点0,0 不在栅格范围内,也未绘制(如警告所示)。

标签: r raster google-static-maps ggmap


【解决方案1】:

如果您的数据属于 RasterLayer 类,则 extent 将为您提供栅格的范围 和 xmin、'minymaxxmax 访问各种插槽。

例如

# create a dummy raster
r1 <- raster(nrows=108, ncols=21, xmn=0, xmx=10)
r1[] <-1

extent(r1)
## class       : Extent 
## xmin        : 0 
## xmax        : 10 
## ymin        : -90 
## ymax        : 90 

您可以使用

访问各种插槽
xmin(r1)
## [1] 0
xmax(r1)
##[1] 10
ymin(r1)
## [1] -90
ymax(r1)
## [1] 90

如果您的数据是SpatialGridDataFrame,那么bbox 将返回边界框

.grid <- as(r1,'SpatialGridDataFrame')

bbox(.grid)
##    min max
## s1   0  10
##  2 -90  90

我的 xy 坐标是否位于光栅边界内

您可以使用cellFromXY 找到单元格id,如果它在文本之外,它将返回NA

例如

 # some data
 .points <- rbind(c(1,1),c(-4,1))
 # the first point lies within the raster, the second not

 # cell from XY will tell you this.
 cellFromXY(r1,.points)
 ## [1] 1116   NA

编辑 ggmap

如果你有一个由get_map 获取的地图,它是一个ggmap 对象,并且不能与raster 包一起使用没有你的帮助

您可以通过bb 属性获取边界框。

  hdf <- get_map()
  attr(hdf,'bb')
##    ll.lat    ll.lon   ur.lat    ur.lon
## 1 29.38048 -95.80204 30.14344 -94.92313

从 ggmap 对象创建 RasterStack 的辅助函数

ggmap_rasterlayer <- function(map){
  map_bbox <- attr(map, 'bb') 
  .extent <- extent(as.numeric(map_bbox[c(2,4,1,3)]))
  my_map <- raster(.extent, nrow= nrow(map), ncol = ncol(map))
  rgb_cols <- setNames(as.data.frame(t(col2rgb(map))), c('red','green','blue'))
  red <- my_map
  values(red) <- rgb_cols[['red']]
  green <- my_map
  values(green) <- rgb_cols[['green']]
  blue <- my_map
  values(blue) <- rgb_cols[['blue']]
  stack(red,green,blue)

}

my_map <- ggmap_rasterlayer(hdf)

【讨论】:

  • 感谢您的回答。我正在使用ggmap 下载google 的静态地图,然后将结果保存在扩展名为.rda 的文件中。我需要gdal 包来完成这项工作。
  • 如果你使用ggmap,你应该这么说!包 raster 创建 RasterLayers 并且不会在本机工作。我正在编辑回复
  • 对不起,我确实应该提到。
  • 我已经展示了如何将ggmap 对象转换为RasterStack,这样您就可以使用cellFromXY
  • 感谢您的帮助。如果我遇到任何进一步的问题,我会回来的。
猜你喜欢
  • 2022-11-20
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
相关资源
最近更新 更多