Шейп-файл неправильно заполняется geom_polygon, несовместим с QGIS / ArcMap - PullRequest
0 голосов
/ 05 августа 2020

Я импортировал шейп-файл мирового океана из Natural Earth в R через readOGR. Когда я пытаюсь отобразить его в ggplot, он заполняет землю над Северной и Южной Америкой. Такое поведение несовместимо с QGIS и ArcMap, которые отлично визуализируют и заполняют шейп-файл. Есть идеи?

download.file("https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/physical/ne_50m_ocean.zip" , destfile="./ne_50m_ocean.zip")
system("unzip ./ne_50m_ocean.zip")
wrld <- readOGR(dsn=getwd(),layer="ne_50m_ocean")
wrld <- tidy(wrld)
ggplot() + geom_polygon(data = wrld, aes(x = long, y = lat, group = group), colour = "black", fill = "blue")

снимок экрана рендеринга RStudio

снимок экрана рендеринга QGIS

1 Ответ

0 голосов
/ 05 августа 2020

Мне удалось решить эту проблему, используя read_sf () вместо readOGR (), а затем настроив код ggplot для соответствия. Также работал над следующим этапом моего рабочего процесса, который включал растеризацию объекта sf с использованием Fastize () для маскирующего слоя океана (упрощенный демонстрационный код включен в случае, если он полезен другим):

#get data
download.file("https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/physical/ne_50m_ocean.zip" , destfile="./ne_50m_ocean.zip")
system("unzip ./ne_50m_ocean.zip")
wrld <- read_sf(dsn=getwd(),layer="ne_50m_ocean")

#plot sf object
ggplot() + geom_sf(data=wrld, colour = "black", fill = "blue")

#rasterize sf object
r <- raster(ncol=720, nrow=360) 
extent(r) <- extent(wrld) 
rp <- fasterize(wrld, r)
ocean <- as.data.frame(rasterToPoints(rp))

#plot raster object
ggplot() + geom_tile(data=ocean,aes(x=x,y=y),fill="white")

...