【问题标题】:r - match spatial projections of spatial objects and overlay plotsr - 匹配空间对象的空间投影和叠加图
【发布时间】:2018-01-22 13:13:48
【问题描述】:

我正在尝试使用 plot() 函数覆盖 2 个空间对象。我知道 2 个对象(SpatialLinesDataFrame 和 SpatialPolygonsDataFrame 类)的投影需要相同,以便在同一个图中将它们可视化。我发现了类似的问题herehere,但这些都不能帮助我实现我想要实现的目标。

这是 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 "map": "+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")" 似乎不起作用,因为那时多边形不再被绘制(可见)。

对此的任何想法将不胜感激!

【问题讨论】:

  • 地图和等高线是否都可以独立绘制?
  • 是的,没错。

标签: r map-projections


【解决方案1】:

这是一个不太好的比喻:坐标就像方向,crs告诉我们方向是什么语言。所以,如果你改变crs,但保持坐标不变,那么它会像试图用西班牙语词典阅读德语方向。

我们可以使用sp::spTransform() 将方向从一个crs 转换到另一个crs。 该函数有两个参数:一个空间对象和一个 crs。

我们可以使用raster::crs() 从另一个空间对象中获取 crs。因此,要将地图的坐标(和 crs)转换为轮廓的 crs:

map <- spTransform(map, crs(contours))

【讨论】:

  • 好的,所以当我首先绘制轮廓对象时它确实有效,但反之则不行。有什么办法可以缩小吗?这两个对象在不同的​​空间尺度上,这导致多边形对象的部分拟合。
  • 嗯..也许地图填充覆盖了轮廓
  • 好的,所以我注意到缩放取决于轮廓空间比例。它会自动调整,非常棒。感谢您的帮助!
猜你喜欢
  • 2021-01-15
  • 1970-01-01
  • 2018-09-26
  • 2018-11-03
  • 2011-03-31
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多