2017-05-24 81 views
1

有點類似於描述的問題here我有麻煩對齊shapefile和ggmap對象。將shapefile添加到ggmap

  1. 我shape文件由澳大利亞維多利亞州當地區域邊界的,而且我想它們疊加的狀態(維多利亞)的谷歌地圖的頂部。

    源shape文件具有以下PROJ4串(從PRJ文件中提取)

    [+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs] 
    

    其對應於EPSG:4283

    這裏是我的shape文件對象sp摘要:

    > summary(sp) 
    Object of class SpatialPolygonDataFrame 
    Coordinates: 
         min  max 
    x 96.81677 159.109219 
    y -43.74051 -9.142176 
    Is projected: FALSE 
    proj4string: 
    [+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs] 
    
  2. 我轉換Shape文件以符合谷歌的僞墨卡託投影(至少這是我覺得我做的)

    sp <- spTransform(sp, CRS("+proj=longlat +init=epsg:3857")) 
    

    並將sp轉換爲強化數據幀df.sp

  3. 然後我用

    map <- get_map("Victoria", zoom = 7, maptype = "terrain", source = "google") 
    

    得到維多利亞的谷歌地形圖,以及(GG)繪製出來

    ggmap(map) + geom_polygon(data = df.sp, aes(x = long, y = lat, group = group)) + coord_equal() + theme_map() 
    

Map of Victoria

這是從所得透明繪製shapefile座標和googlemap座標不會重疊。我在座標轉換上做錯了什麼?我如何正確匹配shapefile和googlemap座標?我希望對此事有所幫助/見解。

+0

這不回答你的問題,但我有在[我googleway包的小插曲(HTTPS繪製在谷歌地圖的維多利亞多邊形的例子:// github上的.com/SymbolixAU/googleway /斑點/主/插圖/ googleway-vignette.Rmd#多邊形) – SymbolixAU

回答

0

這是我的第一篇文章,所以請原諒我,如果造型是不是太棒了:)

如果你仍然有問題,也許是什麼,我說下面一些可以幫助你。至少改善了我的結果。

我應該注意到我不是地理空間數據方面的專家,實際上遇到這個帖子我自己也在尋找答案。如果還有其他方法可以改善這一點,那對我來說也會非常令人興奮,因爲結果還不完美!

我發現,無論出於何種原因,rgdal包中的默認ESPG:3857並未在spTransform函數中正確轉換投影。

使用gene's wonderful answer我被引導到Prj2EPSG網站和Spatial Reference網站。我仔細檢查了ABS的proj4字符串(我假設這是來自這些數據的地方),正如你所說(這是EPSG:4283)。

當輸入EPSG:3857到空間參考中時,我得到了這個字符串(使用Proj4鏈接)+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

我將+proj=merc替換爲+proj=longlat以預測經度和緯度座標。

使用該字符串替換merc似乎給我比使用+init=epsg:3857更好的結果,這表明rgdal包處理它的方式有一些差異。

同樣,我很樂意聽到的一種方式,以進一步改善這一點,但我希望這也許可以幫助你在平均時間:)

編輯得到更好的效果:我也發現當使用ggplot2添加coord_map()時,似乎可以修復形狀文件在對齊時的對齊方式,但在進一步縮小時會使它們稍微偏離一點。在7級以上的縮放比例下,我似乎得到了完美的對齊,但是6級和更低,我沒有。看起來不管什麼原因,不同的縮放級別都會略微改變投影。

所以儘量

ggmap(map) + geom_polygon(data = df.sp, aes(x = long, y = lat, group = group)) + coord_equal() + theme_map() + coord_map()