【问题标题】:Dissolved polygons using R not plotting correctly使用 R 溶解的多边形未正确绘制
【发布时间】:2015-01-20 21:00:11
【问题描述】:

我正在尝试在 R 中执行溶解。我以前在 QGIS 中完成过此操作,但我想在 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() 函数表明我现在有更少的多边形:

length(soa@polygons)    # 1,817
length(slsoa@polygons)  # should be 338

但图看起来是相同的(即内部溶解没有起作用),如下两个图所示:

plot(soa)
plot(slsoa)

我在互联网和 stackoverflow 上四处寻找,看看我是否可以解决我的问题并找到了几篇文章但没有成功。

有谁知道我做错了什么以及为什么情节不能正常工作?

非常感谢。

【问题讨论】:

    标签: r gis polygon


    【解决方案1】:

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

    其次,除非lookup 与您的shapefile 具有相同的代码以相同的顺序,否则以这种方式使用gUnaryUnion(...) 会产生垃圾。您需要先在相应字段上将soa@datalookup 合并。

    第三,如果多边形不连续(显然),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)
    

    【讨论】:

    • 感谢您的回答,我知道我遗漏了一些相当明显的东西。这对可重现的示例和我正在处理的数据都有效。 soa/lookup 的长度很有趣。我没有注意到,它们是直接从国家统计局下载的,所以它们应该匹配!谢谢。
    猜你喜欢
    • 2020-02-09
    • 2021-12-28
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    相关资源
    最近更新 更多