gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:32:34 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

如果您的数据属于 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,如果它在extext之外,它会返回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 获取的 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)

关于r - 在栅格数据文件中查找边界点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com