执行 st_union() 操作后如何将多多边形几何体分成多个多边形对象?

2024-06-24

我有一组多边形,其中一些多边形相交和/或接触(公共边界)。我正在使用Rsf包对多边形执行操作。到目前为止我的方法是使用sf::st_union()它按照我想要的方式连接相邻和相交的多边形,但它也将所有多边形组合成一个MULTIPOLYGON几何学。我希望将每个多边形分隔为 sf(data.frame) 类,其中每个多边形对象显示为中的一行data.frame

我在下面展示了一个例子。我首先创建一个示例数据集:

    # Creating four example polygons, of which two (two squares) are neighbors:

    p1 <- rbind(c(0,0), c(1,0), c(3,2), c(2,4), c(1,4), c(0,0))
    pol1 <-st_polygon(list(p1))
    p2 <- rbind(c(3,0), c(4,0), c(4,1), c(3,1), c(3,0))
    pol2 <-st_polygon(list(p2))
    p3 <- rbind(c(4,0), c(4,1), c(5,1), c(5,0),c(4,0))
    pol3 <-st_polygon(list(p3))
    p4 <- rbind(c(3,3), c(4,2), c(4,3), c(3,3))
    pol4 <-st_polygon(list(p4))

    d = data.frame(some_attribute = 1:4)
    d$geometry = st_sfc(pol1,pol2,pol3,pol4)
    df = st_as_sf(d)

    class(df)
    #[1] "sf"         "data.frame"

    df
    # Simple feature collection with 4 features and 1 field
    # geometry type:  POLYGON
    # dimension:      XY
    # bbox:           xmin: 0 ymin: 0 xmax: 5 ymax: 4
    # epsg (SRID):    NA
    # proj4string:    NA
    # some_attribute                       geometry
    # 1              1 POLYGON((0 0, 1 0, 3 2, 2 4...
    # 2              2 POLYGON((3 0, 4 0, 4 1, 3 1...
    # 3              3 POLYGON((4 0, 4 1, 5 1, 5 0...
    # 4              4 POLYGON((3 3, 4 2, 4 3, 3 3))

plot(df) gives:

然后我执行一个st_union()将所有相交或接触的多边形几何图形(上面的两个正方形)合并为一个的操作:

    df_union <- df %>% st_union() 
    df_union
    # Geometry set for 1 feature 
    # geometry type:  MULTIPOLYGON
    # dimension:      XY
    # bbox:           xmin: 0 ymin: 0 xmax: 5 ymax: 4
    # epsg (SRID):    NA
    # proj4string:    NA
    # MULTIPOLYGON(((3 3, 4 3, 4 2, 3 3)), ((4 0, 3 0...

plot(df_union)结果是:

如上图所示的结果df_union is a MULTIPOLYGON仅一行的几何图形。我想执行一个操作,将每个多边形分成一个几何体,如上图所示,但会产生多个多边形对象,相当于:

    # Simple feature collection with 4 features and 1 field
    # geometry type:  MULTIPOLYGON
    # dimension:      XY
    # bbox:           xmin: 0 ymin: 0 xmax: 5 ymax: 4
    # epsg (SRID):    NA
    # proj4string:    NA
    # some_attribute                       geometry
    # 1              1 POLYGON((0 0, 1 0, 3 2, 2 4...
    # 2              2 POLYGON((3 0, 4 0, 5 1, 5 0...
    # 3              3  POLYGON((3 3, 4 2, 4 3, 3 3))

我怎样才能使用sf包裹?


感谢 Edzer 提供了答案并为我们提供了精彩的内容sf包裹!

正如 Edzer 所提到的,执行st_cast转换为MULTIPOLYGON对象分成几个POLYGON对象:

    df_union_cast <- st_cast(df_union, "POLYGON")
    df_union_cast
    # Geometry set for 3 features 
    # geometry type:  POLYGON
    # dimension:      XY
    # bbox:           xmin: 0 ymin: 0 xmax: 5 ymax: 4
    # epsg (SRID):    NA
    # proj4string:    NA
    # POLYGON((3 3, 4 3, 4 2, 3 3))
    # POLYGON((4 0, 3 0, 3 1, 4 1, 5 1, 5 0, 4 0))
    # POLYGON((0 0, 1 4, 2 4, 3 2, 1 0, 0 0))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行 st_union() 操作后如何将多多边形几何体分成多个多边形对象? 的相关文章

  • 生成与现有变量具有预定义相关性的二进制变量

    对于模拟研究 我想生成一组随机变量 连续变量和二元变量 这些变量与已经存在的变量具有预定义的关联binary变量 此处表示为x 对于这篇文章 假设x是按照下面的代码生成的 但请记住 在现实生活中 x是一个已经存在的变量 set seed 1
  • 如何将带有几行代码的字符数组转换为 data.frame?

    我有以下数组 my list lt c Jan 01 Dec 31 00 00 24 00 Jan 01 Jun 30 12 00 18 00 Jul 06 Dec 31 09 00 19 00 导致以下结果的最短代码是什么 x1 x2 x
  • 如何按组计算日期之间的时间差

    我有一个包含日期 时间和位置的数据框 我想计算组内记录与上一条记录 根据日期排列 之间的分钟差异 并变异为新列 我已经弄清楚如何使用循环来完成此操作 但这仅适用于所有组 位置 而且我不确定如何按组执行此操作 fake data set fo
  • 从 R 中的 glm 中提取系数

    我进行了逻辑回归 结果如下 ssi logit single age coefficients coefficients Intercept age 3 425062382 0 009916508 我需要选取系数age 目前我使用以下代码
  • `filter()` 输入 `..1` 出现问题。与闪亮的R

    我正在尝试构建一个闪亮的应用程序 根据用户条目过滤数据帧 但是 我正在努力使用我创建的函数来执行此任务 错误Problem with filter input 1 x Input 1 must be of size 9 or 1 not s
  • 按组划分的模态值(最常见)的简明 R data.table 语法

    用于查找每个 id 最常见类别的高效且优雅的 data table 语法是什么 我保留一个指示 NA 位置的布尔向量 用于其他目的 dt data table id rep 1 2 7 category c x y NA print dt
  • R 中二维核密度估计的混乱

    核密度估计器用于估计特定的概率密度函数 参见mvstat net http www mvstat net tduong research seminars seminar 2001 05 and scikit learn 文档 http s
  • 将最新的 R 安装路径从注册表添加到 PATH windows 7/8/10

    嗨 我是 Windows 批处理新手 我想向打电话的同事分发一个 runMe bat 文件Rscript myRfile R处理一些数据文件 但众所周知 我的同事在不同地方安装了 R 我不能指望他们知道如何将 Rscript 添加到 PAT
  • 在 R 中组合/合并列

    我可能在这个问题上遗漏了一些很容易的东西 我在任何地方都找不到正确的答案 我真的需要继续前进 所以我过度简化了我的数据 eventID lt c 2 4 Time lt c 09 32 09 43 df1 lt data frame eve
  • 按组连接/粘贴列并添加到原始数据

    我有一个名称数据框 名称 按 部门 分组 Dept Date Name 30 07 DEC 02 Raphaely 30 18 MAY 03 Khoo 40 07 JUN 02 Mavris 50 01 MAY 03 Kaufling 50
  • knitr pandoc:“无法使用 pdf writer 生成 pdf 输出”

    Up front using pandoc 在knitr中 当尝试将 md或 Rmd编译为PDF时 它会抱怨 我正在简化流程可重复的研究 正如许多地方所记录的那样 我在用着pandoc and knitr并制作出色的文档 我还试图为一些不太
  • 求R中3列中每一行的最大值

    我需要计算 3 列中每行的最大值 一个表可以是 x c 1 2 3 4 5 y c 2 3 3 1 1 z c 4 3 2 1 1 df lt data frame x y z 我需要得到 x y z max 1 1 2 4 4 2 2 3
  • 如何计算两个邮政编码之间的距离?

    我有一个美国邮政编码列表 我必须计算所有邮政编码点之间的距离 它是一个 6k 邮政编码长列表 每个实体都有邮政编码 城市 州 纬度 经度 面积和人口 所以 我必须计算所有点之间的距离 即 6000C2 组合 这是我的数据示例 我已经在 SA
  • 从数据/系数创建 lm 对象

    有谁知道可以在给定数据集和系数的情况下创建 lm 对象的函数 我对此很感兴趣 因为我开始使用贝叶斯模型平均 BMA 并且我希望能够根据 bicreg 的结果创建 lm 对象 我想访问所有不错的通用 lm 函数 例如诊断绘图 预测 cv lm
  • 从谷歌街道地址中提取城市和州信息

    我有一个数据集 其中包含不同点位置的纬度 经度信息 我想知道与每个点关联的城市和州 按照此example https stackoverflow com questions 22911642 applying revgeocode to a
  • 我们可以有更多错误(消息)吗?

    在 R 中 如果函数使用变量 有没有办法弹出错误消息 未在函数体内声明 即我希望有人标记这种类型的函数 aha lt function p return p n 看 如果某个地方碰巧有一个 n 变量 aha p 2 会给我一个 答案 因为
  • R 矩阵到犰狳的转换非常慢

    观察 对于中等大小的矩阵 将矩阵从 R 传递到 C 的开销要慢得多arma mat类型比NumericMatrix类型 大约需要 250 倍的时间 这是一个最小的例子 include
  • 合并结果的行数多于一个数据框

    我有两个数据框 第一个包含 9994 行 第二个包含 60431 行 我想合并两个数据框 以便合并后的数据框包含两个数据框的组合列 但只包含 9994 行 但是 合并后我得到了超过 9994 行 我怎样才能确保这种情况不会发生 df1 re
  • 根据值绘制具有条件颜色的折线图

    我想绘制折线图 根据值 它应该改变它的颜色 我发现的是 plot sin seq from 1 to 10 by 0 1 type p col ifelse sin seq from 1 to 10 by 0 1 gt 0 5 red ye
  • 在 R 中提取栅格的最快方法(提高我的可重现代码的时间)

    我想知道我是否已最大化提取栅格中某个点周围缓冲区域平均值的速度 本地的性能可以进一步提高吗 I use parallel mclapply已经 我知道我可以通过在集群上设置和运行它来获得进一步的收益 使用集群或获得更多的CPU不是我正在寻找

随机推荐

  • 3D游戏编程

    他们使用什么编程语言来制作 Bioware 龙腾世纪 起源 等游戏以及 使命召唤 等其他一些 3D 游戏 如果我想做 3D 游戏编程 我该从哪里开始 有没有简单的教程 我想为电脑游戏进行 3D 游戏编程 我不想令人沮丧 但我也不想撒谎 即使
  • 如何在每种情况下仅使用 CSS 将首字母大写

    我只想将第一个字母大写并且其他应该小使用CSS 字符串是 SOMETHING BETTER sOMETHING bETTER Something better 但结果应该是 Something Better 使用 CSS 可以实现这一点吗
  • 在 Docker 容器中运行 MySQL

    所以我的最终目标是运行一个 MySQL Docker 容器 比如来自公共注册表的 tutum mysql 然后将一个 Gitlab Docker 容器 比如 Sameersbn gitlab 链接到它 其中两个容器都使用持久存储 然而 我被
  • 在 facebook 的 share.php 上传递标题、url 和图像

    我想在 facebook 上分享标题 图像和描述 无需 javascript 只需将这些传递到 facebook 的 share php 即可 我在这个网站上得到了一些有问题的代码用于社交书签的 AddThis AddToAny Share
  • Python 列表理解和“不在”

    我正在开始使用 Python 目前正在学习列表理解 所以这听起来可能很奇怪 问题 是否可以使用列表理解来创建元素列表t中没有找到s 我尝试了以下操作 但它给了我一个错误 gt gt gt t 1 2 3 4 5 gt gt gt s 1 3
  • Intellij IDEA 与 ideavim。无法从其他来源复制文本

    我尝试使用默认的 vim 键绑定 使用 ideavim 插件从 IDEA 复制文本 y 但这段文本没有复制到全局缓冲区中 我只能将其粘贴到 IDEA 中 例如 如何在浏览器中使用复制的文本 Vim s yank http vimdoc so
  • 使用 mvc3 将图像保存到文件系统

    我有一些简单的实体 现在需要有一个个人资料图像 执行此操作的正确方法是什么 因此 这是一对一的关系 一张图像仅与一个实体相关 反之亦然 该图像应通过网络表单上传并插入相关实体 因此 当我指出使用文件系统来存储图像并仅将路径图像持久保存到数据
  • Javascript:类型错误:值未实现 FormData 接口

    我正在尝试使用 FormData 通过 AJAX 将数据发送到 PHP 脚本 输入类型文本值似乎没有任何问题 但当我尝试附加文件时 出现错误 TypeError Value does not Implement Interface Form
  • Flask 没有获取复选框值

    当我点击提交按钮时 我试图打印 Flask 中的复选框值 app py 片段 app route test2 methods GET POST def test2 if request method POST if request form
  • 单击选定的 UIButton 时不显示 UIButton 突出显示状态

    我希望当我单击已选择的按钮时 我的 UIButton 显示突出显示状态 基本上在突出显示的状态下 我应用 png 图像作为 UIButton 背景图像以提供按下效果 但是 如果按钮已经处于选定状态 当我再次单击它时 我只是看不到突出显示的状
  • 使用带反射的 XPath 样式查询

    我有一个类树 其中包含层次结构中的多个对象 因此 我可能有一个 Container 对象 它托管 3 个 SubContainer 对象 而这些对象又托管任意数量的 Item 对象 有什么方法可以在此对象树上使用 XPath 样式表达式 这
  • 通过股票报价识别 pandas 数据框中的价格波动/趋势

    我有一个带有 DatetimeIndex 和 ohlcv 股票报价列的 pandas Dataframe 我想提取满足特定阈值的价格波动 趋势 大于 0 3 美元的上涨波动 趋势 变动以及超过 0 3 美元的下跌波动 趋势 变动 df 10
  • 用于 Jenkins/本地构建的 PyPI 本地缓存

    我有一个 Jenkins 实例 它与其伴随者一起构建我的项目PyPI http pypi python org pypi包裹来自要求 txt http www pip installer org en latest requirements
  • 如何使用 Google Fit API 获取各种健身活动的读数?

    Google Fit API 中有各种健身活动 例如有氧运动 羽毛球 拳击 举重等 如何使用 Google Fit API 获取每项活动的步数读数和消耗的卡路里 任何形式的建议都是非常受欢迎的 提前致谢 我不确定这个结果是否是您需要的 您可
  • 如何部署连接Django RESTful API的静态网站?

    首先 谷歌或SO搜索对我没有帮助 很多关于django静态文件的提示 我认为这些提示与这里无关 我继承了一个项目 其中包括 Django 后端以 API 形式仅返回 JSON 响应 标准 Swampdragon 部署将实时更新推送到前端 这
  • 为使用 Carrierwave 上传图像文件的用户提供适当的 s3 权限

    在 Michael Hartl 撰写的 Rails 教程 第 11 章末尾 我通过创建存储桶 使用 IAM 设置用户并授予用户 AmazonS3FullAccess 策略 成功地实现了用户上传到 Amazon S3 服务的功能 允许我网站上
  • 如何使用openpyxl获取位置(行,列)单元格的值?

    我正在使用 openpyxl 获取由行号和列号定义的特定位置处的单元格的值 文档中的代码不起作用 文档链接 http openpyxl readthedocs io en default tutorial html accessing on
  • Laravel Blade 检查用户角色

    在 laravel Blade 模板中 我们可以使用以下代码排除 HTML 的某些部分 if Auth user li a href Mein Profil a li li a href Admin a li else li a href
  • Haskell 中是否可以部分应用第 n 个参数?

    我很好奇是否可以写一个函数apply nth它接受一个函数 参数的数量以及该参数的值 然后返回一个新的 部分应用的函数 我的感觉是 由于类型系统的原因 这是不可能的 但我无法给出令人满意的答案 我也无法提出工作类型签名 如果语言的类型更加松
  • 执行 st_union() 操作后如何将多多边形几何体分成多个多边形对象?

    我有一组多边形 其中一些多边形相交和 或接触 公共边界 我正在使用Rsf包对多边形执行操作 到目前为止我的方法是使用sf st union 它按照我想要的方式连接相邻和相交的多边形 但它也将所有多边形组合成一个MULTIPOLYGON几何学