Nano Hash - криптовалюты, майнинг, программирование

projectRaster дает разные результаты при проектировании с собственным crs

Для функции я хочу перепроецировать растровый ввод - сам вывод после использования кадрирования и маски - с использованием пользовательской CRS. Я думал, что проектирование с существующим crs ничего не даст и просто вернет входной растр. К моему удивлению, этого не произошло. Ниже воспроизводимый пример

Создайте фиктивный растр:

library(raster)

# Download country polygin, in this case Malawi
mwi <- raster::getData("GADM", country = "MWI", level = 0)

# Create dummy raster
grid <- raster::raster() # 1 degree raster
grid <- raster::disaggregate(grid, fact = 12) # 5 arcmin
grid <- raster::crop(grid, mwi)
values(grid) <- rep(1, ncell(grid)) # Set a value

# The input raster with dimensions 94,39,3666
grid <- raster::mask(grid, mwi)
plot(grid)
grid

# Reproject the raster using its own crs. I use ngb as it is a categorical variable.
# This raster has dimensions 102, 47, 4794 so it seems a lot of white space (NA) is added.
own_crs <- crs(grid)
grid_reproj <- raster::projectRaster(grid, crs = own_crs, method = "ngb")
plot(grid_reproj)
grid_reproj

# To remove the white space I use trim
# This results in a waster with dimensions 93, 39, 3627
grid_trim <- raster::trim(grid_reproj)
plot(grid_trim)
grid_trim

# I also decided to compare the maps visually with mapview
library(mapview)

# There seems to be a trim function in mapview which I set to FALSE
# Also use the browser for easy viewing
options(viewer = NULL)
mapviewOptions(trim = FALSE)
mapviewGetOption("trim")
mapview(grid, col.regions = "green", legend = F) +
  mapview(grid_reproj, col.regions = "red", legend = F) +
  mapview(grid_trim, col.regions = "blue", legend = F) 

Сравнивая карты, я наблюдаю две вещи:

(1) grid и grid_trim почти идентичны, за исключением одной ячейки сетки наверху. Возможно это из-за округления,

(2) grid_reproj имеет гораздо большие размеры и разную степень. Также кажется, что карта немного сдвинута по сравнению с другими картами. Это исправляется обрезкой, поэтому я предполагаю, что на самом деле это ячейки NA, и разница может быть связана с тем, как mapview отображает карты.

Следовательно, мой главный вопрос: что происходит, когда rasterProject проектирует одинаковую степень? И почему результат отличается даже после обрезки?


Ответы:


1

Чтобы проецировать растровые данные правильным способом, вы должны предоставить другой объект Raster *, а не только crs.

Если вы указываете crs, вычисляется новый экстент, немного больший, чем ожидается, чтобы избежать потери данных. Конечно, в этом странном случае, когда crs фактически одинаковы, имеет смысл вернуть ввод без изменений.

21.04.2020
  • Спасибо, Роберт, за объяснение. Это, безусловно, проясняет. Возможно, вы можете обновить документацию projectRaster, чтобы отразить это в том виде, в котором он сейчас читается: вы можете сделать это, указав новую проекцию в качестве единственного аргумента, и в этом случае функция устанавливает размер и разрешение нового объекта. Следовательно, это предполагает, что можно использовать только аргумент CRS, и на самом деле я читал в учебных пособиях, что рекомендации использовать его таким образом, чтобы просто перепроецировать растр. 22.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..