在栅格数据文件中查找边界点

时间:2012-08-30 05:05:25

标签: r raster google-static-maps ggmap

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

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

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

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

那么,有可能找出四个角落(拉特和隆起)的位置吗? 我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:3)

如果您的数据属于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)