2014-01-29 24 views
2

對此感到很抱歉,但可能5小時我在這個問題上生氣了,我無法將其整理出來。對R中的不符合數據給出的地理CRS

我有一個約37,000條目的數據集。它們每個都有自己的Lon和Lat座標值。 檢查整體值,它們的範圍分別如下:緯度(-54.4871,70.66344)和經度(-177.375,178.4419)。這是絕對合理的。

我使用ArcGIS創建了具有這37000個點的shapefile:一切正常。

我需要然後處理,使用R這些數據,我用於我的代碼的命令是(maptools封裝):

cells <- readShapeSpatial('RES',IDvar="id_obj", 
          proj4string=CRS("+proj=longlat +datum=WGS84")) 

但R已適時提供一個錯誤:

Error in validityMethod(as(object, superClass)) : Geographical CRS given to non-conformant data: 2.76663393422e+145

(I有不知道這個數字來自哪裏,它不是我的數據集的一部分...)

閱讀此博客上的其他帖子似乎應該是lon或lat的無效數據,但正如我上面提到的, THI對於我的數據集,情況並非如此。

我試圖創建不同的形狀文件,第一個是沒有投影,使用幾個投影(墨卡託WGS84,網絡麥卡托...),但錯誤總是一樣的...

感謝您的幫助。

+0

你可以上傳你的shapefile的地方(Dropbox ??)併發布鏈接?否則,這只是猜測。當經緯度相反時,我已經看到了這個問題。 – jlhoward

+0

非常感謝這個:這裏是鏈接https://www.dropbox.com/sh/zco8y93ttnnt5dz/BmRTimCPjV?n=212111396 – Nemesi

回答

4

底線是你的shapefile好像壞了。

點形狀文件有兩個主要部分,一個coords部分有點的座標和一個數據部分有「屬性」數據(有關點的信息,如區域和國家在你的情況)。您shape文件具有經度和緯度的數據段,以及,但它們不匹配

library(rgdal) 
setwd("<directory with shapefile...>") 
map <- readOGR(dsn=".", layer="test") 

range([email protected]$Lat) 
# [1] -54.48708 70.66344 

range([email protected][,2]) 
# [1] -5.448708e+01 2.766634e+145 

重投影涉及將在coords節中的信息,這是失敗的原因。

這裏是一個解決辦法,但黑客SpatialPointsDataFrame是不是一個好主意:

[email protected] <- as.matrix([email protected][c("Lon","Lat")]) 
[email protected] <- rbind(range([email protected][,1]),range([email protected][,2])) 
wgs.84 <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" 
proj4string(map) <- CRS(wgs.84) 

library(ggplot2) 
gg <- data.frame([email protected]) 
ggplot(gg) + 
    geom_point(aes(x=Lon,y=Lat), size=1, alpha=0.5, colour="blue") + 
    coord_fixed() 

mercator <- "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m [email protected] +no_defs" 
map.mercator <- spTransform(map,CRS=CRS(mercator)) 
gg <- data.frame([email protected]) 
ggplot(gg) + 
    geom_point(aes(x=Lon,y=Lat), size=1, alpha=0.5, colour="green") + 
    coord_fixed() 

我建議你重新創建shape文件和再試一次。

+0

非常感謝。我真的很感激。 – Nemesi