/ / Намиране на граничните точки във файл с растерни данни - r, растер, google-static-maps, ggmap

Намиране на граничните точки в файл с растерни данни - r, растер, google-static-maps, ggmap

Така че, имам със себе си централната точка и нивото на увеличение.
Трябва да начертая някои точки на картата.

Картата се съхранява във файл с растерни данни и се показва в джаджата R.

Проблемът е, че когато се получи точка, трябва да проверя дали попада в данните на този растерен файл или не.
Ако точката е в растерния файл, тогава мога спокойно да го начертая.
Ако не, тогава трябва да заредя друг растер файл, който съдържа тази точка, и след това да начертая точката.

Най- raster пакет от R има функция с име as.data.frame който зарежда растерните данни в рамката с данни.

Възможно ли е тогава да разбера кои точки (лат и лон) са в четирите ъгъла? На прав път ли съм?

Отговори:

3 за отговор № 1

Ако вашите данни са от клас 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

Ако вашите данни са a 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

EDIT за 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

Помощна функция, която ще създаде RasterStack от ggmap обект

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)