如何在R中叠加地图图层(shp和csv)?


9

这是stackoverflow的一个交叉点。我对GIS软件了解甚少,如果这是一个太基本的问题,我会预先在R. Apologies中进行所有映射。假设我有两个来自不同来源但具有不同属性的shapefile。可以说,一个是德克萨斯州的行政边界(boundaries.shp),另一个是德克萨斯州河流的(rivers.shp)。我还有第三个文件towns.csv显示州内城镇的位置。读完文件后,我可以在maptools包装的相似边界上绘制城镇位置图:

plot(boundaries); points(towns$lon, towns$lat)

但是,如何重叠所有三个呢?当然有一个简单的方法可以做到吗?

Answers:


8

PBSMapping应该适合您的需求。NCEAS上有一个教程。下面的代码改编自该教程。我正在假设您的数据顺便说一句。请根据您的情况进行适当的编辑。

library(PBSmapping)

#prepare towns
pts <- read.csv("towns.csv")
towns <- points(towns$lon, towns$lat)
# read in shapefiles 
rivers <- importShapefile("rivers.shp")
boundaries <- importShapefile("boundaries.shp")


# note that importShapefile reads the .prj file if it exists, but it
# does not adopt the proj4 format used by the above approaches
proj.abbr <- attr(boundaries, "projection") # abbreviated projection info
proj.full <- attr(boundaries, "prj") # full projection info
print(proj.abbr)
# [1] "LL"

# generate map using PBSmapping plotting functions
plotPolys(boundaries, projection=proj.abbr, border="gray",
    xlab="Longitude", ylab="Latitude")
addPoints(towns, pch=20, cex=0.8)
addLines(rivers, col="blue", lwd=2.0)

谢谢,RK我仍在设法解决问题,但这是一个很好的指针。
user3671 2012年

别客气。祝您映射愉快:)
RK

11

覆盖两个图的最简单方法是使用中的add = TRUE选项plot。这是人工数据的例子

# Load sp package for creating artificial data
library(sp)

# Create sample town points
towns <- data.frame(lon = sample(100), lat = sample(100))
towns <- SpatialPoints(towns)

# Create sample polygon grid
grd <- GridTopology(c(1,1), c(10,10), c(10,10))
polys <- as.SpatialPolygons.GridTopology(grd)

# Plot polygons
plot(polys)

# Add towns (in red colour)
plot(towns, add = TRUE, col = 'red')

感谢您加入,yellowcap。但是它说“添加不是图形参数”。
user3671 2012年

当我在计算机上运行该示例时,该示例运行良好,但似乎“ add”并不总是有效,并且取决于输入数据的类,请参见本文。所以我的建议可能不是最好的方法……
yellowcap '02
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.