2014-11-22 35 views
2

我试图在R中执行溶解。我之前在QGIS中完成了这项工作,但是我希望在R中实现这一点,以尽可能与我的工作流程的其余部分进行集成。使用R没有正确绘制的溶解多边形

我有一个小地理多边形的ESRI shapefile(输出区域,如果您熟悉英国人口普查地理)。我还提供了一个查询表,列出了所有OA代码及其相关的汇总地理代码。

我不能提供我工作的实际文件,但类似的文件和低于最低可再现的例子:

和代码:

require("rgdal") # for readOGR 
require("rgeos") # for gUnion 
require("maptools") 

unzip("soa.zip") 
soa <- readOGR(dsn = "soa", "england_oac_2011") 
proj4string(soa) <- CRS("+init=epsg:27700") # British National Grid 

lookup <- read.csv("oa-soa.csv") 

slsoa <- gUnaryUnion(soa, id = lookup$LSOA11CD) 

我已经阿尔斯Ø尝试:

slsoa <- unionSpatialPolygons(soa, lookup$$LSOA11CD) 

,但我的理解是,因为我有(R)GEOS安装此使用来自rgeos包gUnion方法反正。

所以,我的问题是溶解似乎工作;我没有得到一个错误信息,()函数表明我现在有更少的多边形长度:

length([email protected]) # 1,817 
length([email protected]) # should be 338 

但情节似乎是相同的(即内部溶解都没有奏效),具体表现为以下两个图:

plot(soa) 
plot(slsoa) 

我已经在互联网上左顾右盼和计算器,看看我能解决我的问题,并发现了几篇文章,但没有成功。

有没有人有任何想法,我做错了,为什么该地块无法正常工作?

非常感谢。

回答

5

首先,您的soa shape文件有1817个元素,每个元素具有唯一的code(对应于lookup$OA11CD)。但是您的lookup文件只有1667行。显然,lookup不是有“所有OA代码的列表”。

其次,除非lookup具有相同的符号,你shape文件以相同的顺序,使用gUnaryUnion(...)这样会产生垃圾。您需要先在相应的字段上合并[email protected]lookup

第三,gUnaryUnion(...)如果多边形不是连续的(显然)不能移除内部边界。

这似乎是工作

soa <- merge(soa,lookup,by.x="code",by.y="OA11CD",all.x=TRUE) 
slsoa <- gUnaryUnion(soa,id=soa$LSOA11CD) 
length(slsoa) 
# [1] 338 
par(mfrow=c(1,2),mar=c(0,0,0,0)) 
plot(soa);plot(slsoa) 

+0

谢谢您的回答,我知道我失去了一些东西相当明显。这既适用于可复制的示例,也适用于我正在处理的数据。 soa/lookup的长度很有趣。我没有注意到,他们直接从国家统计局下载,所以他们应该匹配!谢谢。 – Phil 2014-11-23 10:02:11