2017-08-14 58 views
0

我试图使用plot()函数覆盖2个空间对象。据我所知,2个对象(类SpatialLinesDataFrame和SpatialPolygonsDataFrame)的投影必须是相同的,才能让它们在同一个图中可视化。我发现类似的问题herehere,但这些都不能帮助我实现我想要的。r - 匹配空间对象和覆盖图的空间投影

这是SpatialPolygonsDataFrame的编码。 (v.map是.KML文件和loccoor的列表被存储的位置和相应的x和y坐标的对象):

map.l<-list() 

for (i in 1:length(v.map)){ 
    ll<-ogrListLayers(paste(loccoor,"/",v.map[i],".kml",sep="")) 
    shp<-readOGR(paste(loccoor,"/",v.map[i],".kml",sep=""),layer=ll) 
    map<-spTransform(shp, CRS("+proj=longlat +datum=WGS84")) 
    map.l[[i]]<-map 
} 
plot(map.l[[1]],xlim=c(min(coor[,3]),max(coor[,3])), 
    ylim=c(min(coor[,2]),max(coor[,2]))) 
for (i in 2:length(v.map)){ 
plot(map.l[[i]],xlim=c(min(coor[,3]),max(coor[,3])), 
    ylim=c(min(coor[,2]),max(coor[,2])),add=T) 
} 

投影SpatialPolygonsDataFrame “地图”:"+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"

投影SpatialLinesDataFrame “轮廓” :"+proj=aeqd +ellps=WGS84 +lon_0=-XX.XXXXX +lat_0=XX.XXXXX"

我想转换“地图”对象的投影以匹配“轮廓”的投影。简单地将“地图”对象的"CRS("+proj=longlat +datum=WGS84")"替换为“轮廓”对象的投影似乎不起作用,因为然后多边形不再被绘制(可见)。

任何想到这一点将不胜感激!

+0

地图和轮廓是否独立地绘制得很好? –

+0

是的,这是正确的。 – FlyingDutch

回答

1

下面是一个不是很好的比喻:坐标就像方向,crs告诉我们方向是在哪种语言。所以,如果你改变了crs,但你保留原来的坐标,那么它会是就像试图用西班牙语词典阅读德语方向一样。

我们可以使用sp::spTransform()来翻译从一个crs到另一个的方向。 该函数有两个参数:一个空间对象和一个crs。

我们可以使用raster::crs()从另一个空间对象中获取crs。因此,要将地图的坐标(和crs)转换为等高线的crs:

map <- spTransform(map, crs(contours)) 
+0

好的,当我首先绘制轮廓对象时,它确实可以工作,但不是相反。有什么方法可以缩小?这两个对象在不同的​​空间尺度上,这导致多边形对象的部分拟合。 – FlyingDutch

+0

嗯..也许地图填充覆盖了轮廓 –

+1

好的,所以我注意到缩放取决于轮廓的空间尺度。它会自动调整,这很棒。谢谢您的帮助! – FlyingDutch