Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Минимальная высота в пределах км

Автор вопроса: user6754289Ответов: 1

Попытка найти минимальную высоту в пределах 10 км от определенной широты и долготы с помощью R.

Пока у меня есть

dem <- getData("SRTM", lat=42.90, lon=-78.85, path = datadir)
plot(dem)

Я знаю, что мне нужно создавать пространственные точки и в конечном итоге буферизовать / извлекать информацию.

Когда я пытаюсь:

buffdem <- buffer(dem, width=10000)

Это не работает, потому что у меня нет очков.

Я пытался

dem <- getData("SRTM", lat=42.90, lon=-78.85, path = datadir)
coords <- data.frame(
  x = rnorm(100),
  y = rnorm(100)
)
coordinates(dem)

spdf = SpatialPointsDataFrame(coords, dem)

Я получаю следующую ошибку:

Ошибка в validObject (.Object): недопустимый объект класса "SpatialPointsDataFrame": недопустимый объект для слота "data" в классе "SpatialPointsDataFrame": получен класс "RasterLayer", должен быть или расширять класс "data.frame"

  • Воспроизводимый пример, пожалуйста. harre 26.10.2015
  • Необязательно буферизовать точки. Сделайте фокусировку min растра, а затем используйте extract - см. ?focal jbaums 26.10.2015
  • воспроизводимость означает, что вы предоставляете нам образец набора данных, который мы можем использовать для демонстрации / тестирования решений: tinyurl.com/reproducible-000 Ben Bolker 26.10.2015
  • Понятно, попробую фокусную мин. Спасибо! user6754289 26.10.2015
  • Я бы опубликовал пример, но этот ftp для меня очень медленный. Я посмотрю, найду ли плитку поменьше. jbaums 26.10.2015
  • Оглядываясь назад, я думаю, что точки буферизации, вероятно, разумны. Поскольку вы работаете с данными размером ~ 90 м, я предполагаю, что расчет фокального минимума в 10000 м (примерно 111 x 111) займет некоторое время. В этом случае вы сможете просто сделать buffer(dem, coords, width=10000, fun=min). jbaums 27.10.2015

rrasterspatial

Ответы

Ответ 1 · рейтинг 2 · Robert Hijmans

Я думаю, что это делает то, что вам нужно:

library(raster)
#elevation <- getData("SRTM", lat=42.90, lon=-78.85)
#poi <- cbind(lon=-78.85, lat=42.90)

используя меньший примерный набор данных для более быстрой загрузки:

elevation <- getData('alt', country='CHE')
poi <- cbind(8.13, 46.47)

e <- extract(elevation, poi, buffer=10000)

sapply(e, min, na.rm=TRUE)

Кстати, это дубликат this и этот вопрос.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы