2015-09-23 1 views
0

Я планировавших карту Европы с использованиемСоставление карты в R без границ

library(rworldmap) 
    newmap <- getMap(resolution = "high") 
    plot(newmap, xlim = c(-10, 30), ylim = c(25, 65), asp = 1) 

Возможно ли, чтобы не построить границы между странами, но только границы между морем и землей?

я могу добиться этого с

map('world', xlim = c(-10, 30), ylim = c(25, 65), asp = 1, interior=FALSE) 

Но мне не нравится разрешение много.

+1

Что относительно 'library (mapdata); данные (worldHiresMapEnv); map ('worldHires', xlim = c (-10, 30), ylim = c (25, 65), asp = 1, internal = FALSE) '? – hrbrmstr

+0

Это работает, но разрешение не так хорошо, как 'rworldmap'. – g256

ответ

1

Вы можете получить действительно прекрасное разрешение и только земля граничит с Природной Землей (вы также можете получить более низкие разрешения). Цена, которую вы платите, - это время для обработки/построения графика (R не является быстрым со сложными/многоугольниками).

Следующие:

  • грейферы & импортируют лучший Рез сухопутных границ Природной Земли
  • клипов его к ограничивающему параллелепипеду вы указали
  • упрощают границы (это, где вы получите настройки для разрешения/время компромисс)
  • клипов упрощенных границ
  • участков сравнение 2x2 сетка

 

library(sp) 
library(rgdal) 
library(rgeos) 
library(raster) 

URL <- "http://naciscdn.org/naturalearth/10m/physical/ne_10m_land.zip" 
fil <- basename(URL) 
if (!file.exists(fil)) download.file(URL, fil) 

shp <- grep("shp$", unzip(fil), value=TRUE) 

world <- readOGR(shp, ogrListLayers(shp)[1], stringsAsFactors=FALSE) 
world_clip <- gIntersection(as(extent(-10, 30, 25, 65), "SpatialPolygons"), 
          world, byid=TRUE) 

# tweak 0.05 up/down as needed 
world_simpl <- gSimplify(world, 0.05) 
world_simpl_clip <- gIntersection(as(extent(-10, 30, 25, 65), "SpatialPolygons"), 
          world_simpl, byid=TRUE) 

par(mfrow=c(2,2), mar=c(0,0,0,0)) 
plot(world, xlim = c(-10, 30), ylim = c(25, 65), asp = 1) 
plot(world_clip, asp = 1) 
plot(world_simpl, xlim = c(-10, 30), ylim = c(25, 65), asp = 1) 
plot(world_simpl_clip, asp = 1) 
par(mfrow=c(1,1)) 

enter image description here

Даже тонкие линии не собираются, чтобы удалить (IMO) уродливые береговые линии при небольших размерах дисплея/печати, но вы можете настроить компонент упрощения для достижения Вашего собственного личная эстетика & баланс времени.

Смежные вопросы