- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将两个 .shp 文件转换成一个数据库,这样我就可以一起绘制 map 。
此外,有没有办法将 .shp 文件转换为 .csv 文件?我希望能够在 .csv 格式下个性化和添加一些对我来说更容易的数据。如果在 map 上添加叠加产量数据和降水量数据,我的想法是什么。
这是 Morocco 的形状文件, 和 Western Sahara .
绘制两个文件的代码:
# This is code for mapping of CGE_Morocco results
# Loading administrative coordinates for Morocco maps
library(sp)
library(maptools)
library(mapdata)
# Loading shape files
Mor <- readShapeSpatial("F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/Country-CGE/MAR_adm1.shp")
Sah <- readShapeSpatial("F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/Country-CGE/ESH_adm1.shp")
# Ploting the maps (raw)
png("Morocco.png")
Morocco <- readShapePoly("F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/Country-CGE/MAR_adm1.shp")
plot(Morocco)
dev.off()
png("WesternSahara.png")
WesternSahara <- readShapePoly("F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/Country-CGE/ESH_adm1.shp")
plot(WesternSahara)
dev.off()
在研究了@AriBFriedman 和@PaulHiemstra 的建议并随后弄清楚如何合并 .shp 文件后,我设法使用以下代码和数据生成了以下 map (对于 .shp 数据,请参见上面的链接)
代码:
# Merging Mor and Sah .shp files into one .shp file
MoroccoData <- rbind(Mor@data,Sah@data) # First, 'stack' the attribute list rows using rbind()
MoroccoPolys <- c(Mor@polygons,Sah@polygons) # Next, combine the two polygon lists into a single list using c()
summary(MoroccoData)
summary(MoroccoPolys)
offset <- length(MoroccoPolys) # Next, generate a new polygon ID for the new SpatialPolygonDataFrame object
browser()
for (i in 1: offset)
{
sNew = as.character(i)
MoroccoPolys[[i]]@ID = sNew
}
ID <- c(as.character(1:length(MoroccoPolys))) # Create an identical ID field and append it to the merged Data component
MoroccoDataWithID <- cbind(ID,MoroccoData)
MoroccoPolysSP <- SpatialPolygons(MoroccoPolys,proj4string=CRS(proj4string(Sah))) # Promote the merged list to a SpatialPolygons data object
Morocco <- SpatialPolygonsDataFrame(MoroccoPolysSP,data = MoroccoDataWithID,match.ID = FALSE) # Combine the merged Data and Polygon components into a new SpatialPolygonsDataFrame.
Morocco@data$id <- rownames(Morocco@data)
Morocco.fort <- fortify(Morocco, region='id')
Morocco.fort <- Morocco.fort[order(Morocco.fort$order), ]
MoroccoMap <- ggplot(data=Morocco.fort, aes(long, lat, group=group)) +
geom_polygon(colour='black',fill='white') +
theme_bw()
结果:
新问题:
1- 如何消除将 map 切成两半的边界数据?
2- 如何在一个 .shp 文件中合并不同的区域?
谢谢大家
P.S:stackoverflow.com 中的社区很棒而且非常有帮助,尤其是对于像 :) 这样的初学者来说,只是想强调一下。
最佳答案
将 shapefile 加载到 Spatial{Lines/Polygons}DataFrames(来自 sp 包的类)后,您可以使用 fortify
通用函数将它们转换为平面 data.frame 格式。 fortify
泛型的特定函数包含在 ggplot2
包中,因此您需要先加载它。代码示例:
library(ggplot2)
polygon_dataframe = fortify(polygon_spdf)
其中 polygon_spdf
是一个 SpatialPolygonsDataFrame
。类似的方法适用于 SpatialLinesDataFrame
。
我的解决方案与@AriBFriedman 的解决方案之间的区别在于,我的解决方案包括多边形/线的 x
和 y
坐标,以及与这些相关的数据多边形/线。我非常喜欢使用 ggplot2
包可视化我的空间数据。
一旦您将数据保存在普通的 data.frame
中,您就可以简单地使用 write.csv
在磁盘上生成一个 csv 文件。
关于r - 如何在 R 中将 .shp 文件转换为 .csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16265907/
我是一名优秀的程序员,十分优秀!