所以,我和我一起有中心点和缩放级别 我必须在地图上绘制一些点。
地图存储在栅格数据文件中,并显示在R的小部件上。
问题在于,当收到一个点时,我需要检查它是否属于该光栅文件的数据内。
如果该点位于光栅文件中,那么我可以安全地绘制它
如果没有,那么我需要加载另一个包含该点的光栅文件,然后绘制该点。
R的raster
包有一个名为as.data.frame
的函数,它将栅格数据加载到数据框中。
那么,有可能找出四个角落(拉特和隆起)的位置吗? 我是在正确的轨道上吗?
答案 0 :(得分:3)
如果您的数据属于RasterLayer类,那么extent
将为您提供栅格的范围
和xmin
,“min
,ymax
和xmax
访问各个广告位。
例如
# 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
您可以使用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
如果您有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对象
创建一个RasterStackggmap_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)