Я пытаюсь реализовать некоторые базовые концепции с отображением пространственных данных в R. Я начал с землетрясений, чтобы получить некоторые простые данные для тестирования. Я сначала загрузил базу данных о землетрясениях по этой ссылке:
https://www.ngdc.noaa.gov/nndc/struts/results?type_0=Exact&query_0= $ ID & t = 101650 & s = 13 & d = 189 & dfn = signif.txt
Затем запустил следующий код, чтобы очистить / организовать этот набор данных:
library(dplyr)
library(tmap)
library(sf)
earthquake<-read.table("signif.txt",sep="\t",header=TRUE,fill=TRUE) %>% filter(!is.na(LATITUDE) & !is.na(LONGITUDE)) %>% st_as_sf(coords=c("LONGITUDE","LATITUDE"))
Затем выполнил следующий код, чтобы отобразить карту всех землетрясений магнитудой 9 и более сильных:
tmap_mode("view")
tm_shape(earthquake %>% filter(EQ_PRIMARY > 9))+tm_bubbles(size = "EQ_PRIMARY",col="red",popup.vars=c("EQ_PRIMARY"))
Я получаю это сообщение об ошибке, так как я никогда не назначал проекцию данным: Currect projection of shape earthquake %>% filter(EQ_PRIMARY > 9) unknown. Long-lat (WGS84) is assumed.
Это нормально, и я получаю прикрепленное изображение:
Проблема в том, что сила землетрясения на Аляске на самом деле составляет 9,2 балла, тогда как сила южного землетрясения в Чили - 9,5, но круг Аляски заметно больше! Иконки пузырей дальше от экватора проецируются и искажаются под проекцией Меркатора.
Поэтому я пытаюсь изменить проекцию моих данных на LAEA:
st_crs(earthquake)<-"+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs "
Но теперь, когда я запускаю ту же карту, что и выше, круги отображаются с правильным размером, но базовая карта не отображается, поскольку я предполагаю, что tmap не имеет базовой карты LAEA? Здесь я заблудился.
Кстати, это не проблема для режима рисования, так как я, очевидно, могу разместить под ним свой собственный слой, который имеет ту же проекцию, и все будет отлично. Мое замешательство возникает при взаимодействии с листовкой.
Какое здесь решение? Я хотел бы использовать красивую карту Меркатора, потому что она выглядит красиво, но я не хочу, чтобы она искажала такие вещи, как символы. Нужно ли мне определять новый столбец размера, чтобы противодействовать искажению Меркатора, например earthquake %>% mutate(EQ_PRIMARY1 = EQ_PRIMARY / (abs(LATITUDE)+1))
, но заменять его реальной исследуемой функцией, которая будет противодействовать эффекту размера? Это обычная проблема в этой области или этот пакет просто не работает правильно?