2015-11-09 67 views
2

我正在嘗試使用cshapes包和sp::spTransform數據繪製重新投影的世界地圖,但投影會導致扭曲的情節。 如何正確地重新投影並繪製cshapes地圖?重投影cshapes世界地圖時的扭曲

這裏是顯示在地圖本身繪製精細(改編自this blog post代碼)的例子:

library("cshapes") 
library("ggplot2") 
library("rgdal") 

wmap <- cshp(date=as.Date("2012-06-30")) 
wmap_df <- fortify(wmap) 

ggplot(wmap_df, aes(long,lat, group=group)) + 
    geom_polygon() + 
    labs(title="World map (longlat)") + 
    coord_equal() 

ggsave("~/Desktop/map1.png", height=4, width=7) 

Map without distortion

這裏是扭曲的版本,當我重新投影羅賓遜:

wmap_robin <- spTransform(wmap, CRS("+proj=robin")) 
wmap_df_robin <- fortify(wmap_robin) 
ggplot(wmap_df_robin, aes(long,lat, group=group)) + 
    geom_polygon() + 
    labs(title="World map (robinson)") + 
    coord_equal() 

ggsave("~/Desktop/map2.png", height=4, width=7) 

Distorted map

一些額外的信息:

  1. 我知道有對國家邊界的其他數據源,但我需要的是反映了國家邊界,這cshapes不會改變地圖。
  2. 我的猜測是問題與底層地圖多邊形的問題有關,但我不知道從哪裏開始尋找,最好問問我最終想得到什麼,而不是如何解決預感。
  3. 問題不在於ggplot2,使用基本圖形繪製地圖顯示相同的扭曲(plot(wmap_robin))。

回答

1

您可以使用raster::crop刪除那些只比-180小於或大於180

library(cshapes) 
library(raster) 

wmap <- cshp(date=as.Date("2012-06-30")) 
w <- crop(wmap, extent(-180, 180,-90,90)) 
w_robin <- spTransform(w, CRS("+proj=robin")) 
plot(w_robin) 
+0

由於較大的節點。這對我有用。 – andybega