很抱歉打扰你,但是这可能是5个小时我在这个问题上生气了,我无法解决这个问题。
我有一个大约37,000个条目的数据集。它们中的每一个都有自己的Lon和Lat坐标值。 检查总体值,它们的范围分别如下:纬度(-54.4871,70.66344)和经度(-177.375,178.4419)。这绝对合理。
我使用ArcGIS创建了一个包含这37,000个点的shapefile:一切正常。
然后我需要使用R处理这些数据,我用于代码的命令是(maptools包):
cells <- readShapeSpatial('RES',IDvar="id_obj",
proj4string=CRS("+proj=longlat +datum=WGS84"))
但是R给出错误:
validityMethod中的错误(as(object,superClass)):地理CRS 鉴于不符合要求的数据:2.76663393422e + 145
(我不知道这个号码来自何处,它不属于我的数据集......)
阅读此博客上的其他帖子似乎原因应该是lon或lat的无效数据,但正如我上面提到的,我的数据集不是这种情况。
我尝试创建不同的shapefile,第一个没有投影,使用了几个投影(WGS84 Mercator,web mercator ......),但错误始终是相同的......
感谢您的帮助。
答案 0 :(得分:5)
底线是你的shapefile似乎已损坏。
points shapefile有两个主要部分,一个是coords
部分,它有点的坐标,一个数据部分有“属性”数据(关于这些点的信息,比如你的情况下的地区和国家) 。你的shapefile在数据部分也有Lon和Lat,但它们不匹配:
library(rgdal)
setwd("<directory with shapefile...>")
map <- readOGR(dsn=".", layer="test")
range(map@data$Lat)
# [1] -54.48708 70.66344
range(map@coords[,2])
# [1] -5.448708e+01 2.766634e+145
重新投影涉及转换coords
部分中的信息,这就是失败的原因。
这是一种解决方法,但是破解SpatialPointsDataFrame并不是一个好主意:
map@coords <- as.matrix(map@data[c("Lon","Lat")])
map@bbox <- rbind(range(map@coords[,1]),range(map@coords[,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(map@coords)
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 +nadgrids=@null +no_defs"
map.mercator <- spTransform(map,CRS=CRS(mercator))
gg <- data.frame(map.mercator@coords)
ggplot(gg) +
geom_point(aes(x=Lon,y=Lat), size=1, alpha=0.5, colour="green") +
coord_fixed()
我建议您重新创建shapefile,然后重试。