R函数用于获取以兴趣点为中心的投影地图

时间:2017-06-01 14:49:15

标签: r gis sp

是否有一种简单的方法可以在spet的位置周围投影sp对象。

示例:我在俄罗斯工作,我如何投射合理的平面投影,类似于我在GoogleEarth中居中时所获得的内容?

library("rworldmap")
russia <- countriesCoarse[which(countriesCoarse$ADMIN=="Russia"),]
plot(russia)

给我:

enter image description here

远离那个几何:

enter image description here

注意:我不仅对地图感兴趣,而且还对投影坐标本身(作为sp对象)感兴趣,以便能够在计算中使用它们,特别是对于rgeos。

2 个答案:

答案 0 :(得分:1)

这是ggplot2的一种方式,其扩展名ggalt(不是真的需要,但geom_map有点破解)和maps包:

library(maps)
library(ggplot2)
library(ggalt)
mapa <- map_data('world', 'Ru')
ggplot() +
    geom_cartogram(map = mapa, 
             data = mapa, 
             aes(long, lat, map_id = region),
             color = 'black',
             fill = 'grey') +
    coord_map('polyconic') +
    theme_minimal()

请注意'polyconic'投影,我认为很好,可随意调整

答案 1 :(得分:0)

Extended Transverse Mercator是个不错的选择。要保留不依赖于ggplot表示的R包,可以使用sp / rgdal包中的spTransform。以下函数是从spatDataManagement package中提取的。

Project<-function(obj,objRef=obj){
    xlim <- range(coordinates(obj)[,1]) # bbox(objRef)[1,]
    ylim <- range(coordinates(obj)[,2]) # bbox(objRef)[2,]
    cp <- c(mean(xlim),mean(ylim)) # ~baricenter of the map
    stringProj <- paste0("+proj=etmerc +lat_0=",cp[2]," +lon_0=",cp[1],
                         " +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +units=m +no_defs")
    polysProj <- spTransform(x=obj,CRSobj=CRS(stringProj))
    return(polysProj)
}

 library("rworldmap")
 russia <- countriesCoarse[which(countriesCoarse$ADMIN=="Russia"),]
 projRussia <- Project(russia)
 par(mfrow=c(1,2))
 plot(russia,main="Lat/Long projection")
 plot(projRussia,main="Projected nicely")

enter image description here