从R绘图中导出多边形为shapefile文件。

9

我一直在尝试将绘图内容(线条/多边形)导出为可以在ArcMap中打开的图层/shapefile文件。这些是我一直在使用的一些库:

library(shapefiles)
library(PBSmapping)
library(adehabitatHR)
library(maptools)
library(maps)
library(rgdal)
library(igraph)

我的纬度/经度数据长这样:

tagdata<-read.table(text="meanlat  meanlong
-18.63327 147.0248
-18.6368  147.0238
-18.62068 147.294
-18.62953 147.2942
-18.62953 147.2942
-18.62091 147.2938
-18.62953 147.2942
-18.62466 147.2926
-18.73393 147.2816
-18.73393 147.2816
-18.75383 147.2541
-18.75383 147.2541
-18.75383 147.2541
-18.75383 147.2541
-18.6368  147.0238
-18.63063 147.0256
-18.63063 147.0256
-18.68133 147.1164
-18.6368  147.0238
-18.63063 147.0256
-18.63063 147.0256
-18.75383 147.2541
-18.61273 147.0682
-18.69655 147.09
-18.6368  147.0238
-18.63063 147.0256
-18.63063 147.0256
-18.63217 147.0251
-18.75383 147.2541
-18.75383 147.2541
-18.75383 147.2541
-18.63063 147.0256
-18.68133 147.1164
-18.68133 147.1164
-18.63217 147.0251
-18.69922 147.0909
-18.73393 147.2816
-18.63632 147.0792
-18.69522 147.0896
-18.6368  147.0238
-18.75383 147.2541
-18.75383 147.2541
-18.75383 147.2541",header=TRUE)
我使用AdehabitatHR包绘制了位置,并计算出最小凸多边形(MCP)。
plot(tagdata$meanlong,tagdata$meanlat, col="red",pch=1)                  

loc<-tagdata[ ,c("meanlong","meanlat")]
coord<-SpatialPoints(loc)
poly<-mcp(coord,percent=100)
plot(poly,add=TRUE)

我知道如何将点导出/写入为Shapefile格式,可以在ArcMap或类似的软件中打开。

例如:

loc<-SpatialPoints(loc) # #convert loc to spatial points
rem<-tagdata[c(-1:-2)] 
SpatialPointsDataFrame(coords=loc,data=rem) 
obj<-SpatialPointsDataFrame(coords=loc,data=rem)
writePointsShape(obj,"myshape.shp")

然而,我并没有找到一种好的方法来处理多边形或折线对象。我希望能够将MCP中的poly对象导出/写入为shapefile格式。有什么建议吗?


2
义务开源宣传:为什么要使用ArcMap?不如试试Quantum GIS?或者如果您需要进一步分析,可以全部使用R! - Spacedman
1个回答

17

rgdal非常适合这种事情。http://www.gdal.org/上有关于支持哪些格式的大部分信息。

在这种情况下,您需要使用writeOGR函数。

# this will create a shapefile called poly within the working directory
library(rgdal)
writeOGR(poly, dsn = '.', layer = 'poly', driver = "ESRI Shapefile")

您同样可以使用它来编写任何形状文件(点、多边形等),但必须是 SpatialxxxDataFrame 对象

coorddf <-  SpatialPointsDataFrame(coord, data = data.frame(dummy = rep(1,nrow(coord@coords))))
writeOGR(coorddf, dsn = '.', layer = 'mypoints', driver = "ESRI Shapefile")

那么我该如何将我绘制的Ploy<-MCP“对象”转换为SpatialxxxDataFrame呢?我知道如何处理点,但是对于没有明确空间参考的对象,我该如何处理呢? - user1626688
在你的问题中添加一个例子,以说明你的意思。 - mnel
1
你的对象 poly 是一个 SpatialPolygonsDataFrame - mnel
我所说的SpatialxxxDataFrame指的是SpatialPointsDataFrame、SpatialPolygonsDataFrame或类似的数据框。 - mnel
明白了!非常感谢!我不确定是否需要将X/Y属性表链接到我的多边形才能将其导出为shapefile。 - user1626688

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接