2

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

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

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

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

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

4

1 回答 1

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 

您可以使用访问各种插槽

xmin(r1)
## [1] 0
xmax(r1)
##[1] 10
ymin(r1)
## [1] -90
ymax(r1)
## [1] 90

如果您的数据是 a SpatialGridDataFramethenbbox将返回边界框

.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)
于 2012-08-30T05:40:14.973 回答