gpt4 book ai didi

r - 使用 R 溶解的多边形无法正确绘制

转载 作者:行者123 更新时间:2023-12-01 23:14:58 25 4
gpt4 key购买 nike

我正在尝试在 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 上四处查看,看看是否可以解决我的问题,并找到了几篇文章,但没有成功。

有人知道我做错了什么以及为什么绘图无法正常工作吗?

非常感谢。

最佳答案

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

其次,除非 lookup 与您的 shapefile 具有相同的代码以相同的顺序,否则使用 gUnaryUnion(...) 这种方式将产生垃圾。您需要先将 soa@data 与相应字段上的 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)

关于r - 使用 R 溶解的多边形无法正确绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27082981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com