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

Aqu*_*irl 2 r raster google-maps-static-api ggmap

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

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

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

所述raster的R封装具有命名的函数as.data.frame,其中的光栅数据加载到数据帧。

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

mne*_*nel 5

如果您的数据属于 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 
Run Code Online (Sandbox Code Playgroud)

您可以使用访问各种插槽

xmin(r1)
## [1] 0
xmax(r1)
##[1] 10
ymin(r1)
## [1] -90
ymax(r1)
## [1] 90
Run Code Online (Sandbox Code Playgroud)

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

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

bbox(.grid)
##    min max
## s1   0  10
##  2 -90  90
Run Code Online (Sandbox Code Playgroud)

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

您可以使用cellFromXY来查找单元格idNA如果它在文本之外,它将返回

例如

 # 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
Run Code Online (Sandbox Code Playgroud)

编辑 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
Run Code Online (Sandbox Code Playgroud)

一个从 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)
Run Code Online (Sandbox Code Playgroud)