如何将以网格间隔收集的点数据转换为r?

时间:2015-05-26 23:50:22

标签: r ggplot2 gdal

我有这个数据集:https://www.dropbox.com/s/k06n9l05t25r6x2/newdata.csv?dl=0

(样品)

"","row","col","flagrv"
"1",2361,530,2
"2",2378,531,2
"3",2360,531,2
"4",2355,531,2
"5",2363,532,2
"6",2359,532,2
"7",2368,533,2
"8",2367,533,2
"10",2359,533,2

如果我使用此代码进行绘图:

gs.pal <- colorRampPalette(c("blue", "green","yellow","orange","red"),bias=1,space="rgb")
ggplot(data=ndata,aes(x=col,y=row,color=flagrv)) + 
  geom_point(size = 0.01)+
  scale_colour_gradientn(name = "Scale",colours = gs.pal(5))+
  xlab('Longitude')+
  ylab('Latitude')+
  theme_bw()+
  theme(line = element_blank())+
  theme(legend.position = c(.93,.20),panel.grid.major = element_line(colour = "#854440"))+
  ggsave("test.png",width=10, height=8,dpi=300)

我们得到这个数字: enter image description here

现在,问题是我没有Lat-Long值。我想覆盖州边界但不能使用地图包。有人建议我用gdal,但我不知道怎么做。您能否告诉我如何将其映射到Lat-Long域,以便我可以轻松操作它。

编辑:

我从别人那里学到了我可以用它:

gdal_translate -a_srs EPSG:4269 FILE.asc FILE.tif

答案错误1

Error: unexpected ']' in "spdf = SpatialPointsDataFrame(coords, all_data[, c("flagrv"]"

然后我将代码更改为:

spdf = SpatialPointsDataFrame(coords, all_data[, c("flagrv")]) 

但现在我有这个错误:

Error in validObject(.Object) : invalid class “SpatialPointsDataFrame” object: invalid object for slot "data" in class "SpatialPointsDataFrame": got class "integer", should be or extend class "data.frame"

1 个答案:

答案 0 :(得分:1)

至少不知道数据集的投影和数据(但希望更多的信息,如分辨率和范围),没有简单的方法来做到这一点。如果这是派生地图,请尝试查找用于生成它的内容。 使用此信息,您可以使用栅格包中的投影功能来定义数据集的投影。

编辑(基于提供的其他信息,有一个可行的解决方案): 这是一个有效的解决方案,因为数据集的左下角有一个24.55,-130坐标,行/ col之间的间距是0.01度,投影是nad83。请注意,提供的元数据信息是错误的,因为最小拉特值不是20度,但可以从最南端(基线西)估计为24.55。

#load dataset 
all_data=(read.csv('new_data.csv',header=T, stringsAsFactors=F))
res=0.01 #spacing of row and col coords pre-specified
#origin_col_row=c(0, 0) 
origin_lat_lon=c(24.55, -130) 
all_data$row=(all_data$row)*res+origin_lat_lon[1] 
all_data$col=(all_data$col)*res+origin_lat_lon[2]

#now that we have real lat/lon, we can just create a spatial dataframe
library(rgdal)
library(sp)
coords = cbind(all_data$col, all_data$row)
spdf = SpatialPointsDataFrame(coords, data=all_data) #sp = SpatialPoints(coords)
proj4string(spdf) <- CRS("+init=epsg:4269") 

r似乎想要绘制那么多点,所以要检查答案是否有意义,我将数据集保存为shapefile并将其绘制在arcgis上:

writeOGR(spdf,"D:/tmp_shapefile4.shp", "flagrv", driver="ESRI Shapefile")

enter image description here

我设法使用ggplot2使用下面的代码绘制它,只需要耐心,因为它需要一段时间来绘制它:

df=as.data.frame(spdf)
library(ggplot2)
ggplot(data=df,aes(x=col,y=row,color=flagrv))+ 
   geom_point(size = 0.01)+
  xlab('Longitude')+
  ylab('Latitude')

enter image description here