2017-08-14 85 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