#r #ggplot2 #maps
Вопрос:
Я пытаюсь создать карту Новой Зеландии и островов Чатем, подобную этой, специально используя пакет ggOceanMaps (до н. э. Мне нужен этот стиль батиметрии) и базовые карты функций().
Однако эта функция не позволяет мне перейти по линии дат. Есть ли что-нибудь вокруг этого?
Это код, который у меня есть:
install.packages(c("ggOceanMapsData", "ggOceanMaps"),
repos = c("https://cloud.r-project.org", "https://mikkovihtakari.github.io/drat")
)
library(ggOceanMaps)
nzmap1<-basemap(limits = c(165, 180, -32, -51), bathymetry = TRUE,resolution = "high",
land.col="darkseagreen4",lon.interval = 5,lat.interval = 5)
xlab("Longitude") ylab("Latitude")
nzmap1
Таким образом, он отлично работает от 165 до 180 градусов долготы, но если я попытаюсь выйти за пределы 180/-180 (в идеале я хотел бы перейти к -170), он выдает код ошибки:
Error in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
polygon edge not found
Спасибо,
Тори
Ответ №1:
Выбранные вами ограничения приводят к десятичной степени CRS. Когда десятичные градусы отображаются в двух декартовых измерениях, карты не могут быть нанесены по антимеридиану без изменения определения CRS (шаг от 180 до -180 не является непрерывным и, следовательно, не может быть нанесен на ось x без изменения масштаба).
Чтобы решить эту проблему, вы можете использовать стереографическую проекцию Антарктики:
library(ggOceanMaps)
packageVersion("ggOceanMaps")
#> [1] ‘1.1.10’
basemap(limits = c(165, -170, -32, -51), shapefiles = "Antarctic",
bathymetry = TRUE, lon.interval = 5, rotate = TRUE)
#> Using lon and lat as longitude and latitude columns, respectively.
#> projection transformed from EPSG:4326 to proj=stere lat_0=-90 lat_ts=-71 lon_0=177.5 x_0=0 y_0=0 datum=WGS84 units=m no_defs
#> Warning message:
#> In sp::proj4string(eval(parse(text = shapefiles$land))) :
#> CRS object has comment, which is lost in output
Подробнее читайте здесь