如何修复从 GEOS 转换为 s2 引起的球面几何误差

2023-11-30

我有同样的问题连接空间数据时如何解决球面几何故障

我以前可以使用的代码现在不能用于从 GEOS 到 s2 的转换。

我不确定如何创建此错误的可重现示例。 sf 包附带的示例数据集可以很好地使用此代码,因为我确信它们也已更新为可以与 s2 包一起使用。最好的

ranges <- st_read("Data/Range maps/PRISM_shorebird_ranges_breeding/PRISM_shorebird_ranges_breeding.shp")

ranges2 <- ranges %>%
  group_by(binomial) %>%
  select(-seasonal, -Shape_Area) %>%
  summarize()

Error in s2_geography_from_wkb(x, oriented = oriented, check = check) : 
  Evaluation error: Found 2 features with invalid spherical geometry.
[1] Loop 0 is not valid: Edge 319 has duplicate vertex with edge 322
[2] Loop 0 is not valid: Edge 53052 has duplicate vertex with edge 53055.

我尝试了以下解决方案连接空间数据时如何解决球面几何故障

您有两个选择:

1. 通过脚本中的 sf::sf_use_s2(FALSE) 关闭 s2 处理;理论上,行为应该恢复到 1.0 版本之前的行为

这确实有效,但似乎不是一个好的长期解决方案。我的其他代码会继续遇到这个问题吗?如何防止这种情况发生并使用更新的 sf 包的完整功能?

2. 修复多边形对象的球面几何形状;这将取决于你错误的实际性质。”

ranges$geometry <- ranges$geometry %>%
  s2::s2_rebuild() %>%
  sf::st_as_sfc()

Error in s2_geography_from_wkb(x, oriented = oriented, check = check) : 
  Evaluation error: Found 22 features with invalid spherical geometry.
[1] Loop 2 is not valid: Edge 846 has duplicate vertex with edge 853
[2] Loop 10 is not valid: Edge 0 has duplicate vertex with edge 4
... and 20 more.

如您所见,该解决方案对我不起作用。如何解决这个球面几何错误?


这不是代码的问题,而是数据的问题。 S2 只是对多边形一致性更加严格,当遇到无效多边形时会抛出此错误。

这里的多边形似乎有自相交,就像

A--B
|  |
D--C--E
   |  |
   G--F

该形状应描述为两个多边形:ABCDA 和CEFGC。但通常它被描述为单个多边形 ABCEFGCDA (注意 C 重复两次) - 这也可能发生在这里。一些库很乐意接受这一点,但 S2 抱怨重复的顶点C在非连续边 BC 和 GC 中。

如果可以的话,请在加载数据之前修复数据。我知道 PostgreSQL/PostGIS 通常可以修复这些问题 - 它会接受输入 WKB,并且具有ST_MakeValid这会将其分割成多个多边形。 R 好像有st_make_valid https://rdrr.io/cran/sf/man/valid.html也是(我没有个人经验)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修复从 GEOS 转换为 s2 引起的球面几何误差 的相关文章

  • 带有用户输入的knitr

    我正在使用 R markdown 并使用 Rstudio 来 Knit 我有以下 R markdown 文件 title Untitled author date output html document r setup include F
  • 简单的数据框重塑

    我刚刚从长时间的写作中断中回到 R 并且在记住如何重塑数据方面遇到了一些实际问题 我知道我想做的事情很容易 但出于某种原因 我今晚很愚蠢 并且将自己与融化和重塑混淆了 如果有人能快速指出我正确的方向 我将不胜感激 我有一个这样的数据框 pe
  • R - 正则表达式错误(PCRE 版本)

    我正在尝试使用koRpus在 R 中在运行 RHEL6 的 Linux 服务器上进行词形还原 上周 当我安装了 MRO Microsoft R Open 3 2 3 时 下面的代码效果很好 library koRpus lw c danci
  • 可以明确声明包依赖项的版本吗?

    我倾向于对我编写的代码进行明确而不是隐含的描述 因此 在成功创建自己的包之后 我立即想到的下一件事是如何最好地确保代码的健壮性和可靠性 其中一部分与我的包所依赖的包有关 实际问题 在这方面 是否可以明确声明需要 期望哪个版本的包依赖项 我正
  • 如果“testthat”测试在“R”中失败,则打印自定义诊断信息

    I use a testthat单元测试来检查是否data frame函数返回的结果与我期望它返回的结果相同 如果测试失败 testthat打印一些诊断信息 例如 MyFunction df orig is not identical to
  • dplyr 中的 Summarize 是否可以不删除数据框中的其他列?

    我有一个包含三列的数据框 我正在尝试进行简单的总结以查找数据框中每个城市的最高温度 但同时保留每个最高温度列出的日期 这是数据框 我们称之为 maxT new ID Date Max TemperatureF 1 TUS 1960 04 0
  • 如何使用 R 中带引号的字符值内的序列读取 CSV?

    这是一个包含两个字符列的 CSV 文件 key value a 所有字符值都用双引号引起来 并且有一个顺序 在值之一内 转义引号加分隔符 我无法通过 read csv readr 中的 read csv 或 data table 中的 fr
  • R:将 readRDS 应用于 .Rds 文件名的列表对象

    我有几个包含数据帧对象的 Rds 文件 我想对每个文件应用一个函数并将数据帧绑定到单个数据帧中 但是 当我尝试从文件名列表中读取多个 Rds 文件时 我收到错误 FUN X i 中的错误 从连接读取时出错 readRDS 不适用于列表吗 R
  • 当每个记录都是一个段落并且某些记录有 4 个字段而其他记录有 6 个字段时,如何将文本文件读入 R

    如何读取文本文件 其中每条记录都是一个段落 每个换行符表示单独的字段 复杂的是 有些记录有 4 行 有些记录有 6 行 当字段数量的差异为 1 时 DWin 解决了我的问题 但当字段数量差异为 2 时 一切都崩溃了 你可以有一个在这里看看他
  • 如何更改 Shiny 中 navbarPage 折叠的断点

    我想用shiny navbarPage collapsible TRUE 当在小屏幕上查看我的 Shiny 应用程序时 将导航元素折叠到菜单中 默认情况下 当浏览器宽度小于 940 像素时会触发折叠 有什么方法可以改变这一点 以便在稍大的浏
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 比较 R 中的两个字符向量

    我有两个 ID 字符向量 我想比较这两个字符向量 特别是我对以下数字感兴趣 A和B各有多少个ID 有多少个ID在A中但不在B中 有多少个ID在B但不在A 我还想画维恩图 以下是一些可以尝试的基础知识 gt A c Dog Cat Mouse
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • 使用outer代替expand.grid

    我正在寻找尽可能快的速度并留在基地做该做的事expand grid做 我用过outer为过去类似的目的创建一个向量 像这样的东西 v lt outer letters LETTERS paste0 unlist v lower tri v
  • 查找最接近点的多边形顶点的索引

    Heading 我需要找到最接近点的多边形的索引 所以在这种情况下 输出将是 4 和 0 这样 如果添加了红点 我就知 道将顶点放置在数组中的位置 有谁知道从哪里开始 抱歉 如果标题有误导性 我不知道如何正确表达它 In this case
  • ggplot2、R 中的单条形条形图

    我有以下数据和代码 gt ddf var1 var2 1 aa 73 2 bb 18 3 cc 9 gt gt dput ddf structure list var1 c aa bb cc var2 c 73L 18L 9L Names
  • 具有 dplyr、tidyverse 和 broom 的相关矩阵 - P 值矩阵

    全部 我想使用以下方法从相关矩阵中获取 p 值dplyr 和 或扫帚包 并同时测试多个变量 我知道其他方法 但 dplyr 对我来说似乎更简单 更直观 此外 dplyr 需要关联每个变量以获得特定的 p 值 这使得该过程更容易 更快 我检查
  • 替换字符串/文本中“从第 n 次到最后一次”出现的单词

    这个问题以前曾被问过 但尚未得到令提问者满意的答案 https stackoverflow com questions 36368712 how to use stringrs replace all function to replace
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以

随机推荐

  • Project Tango:坐标系之间的转换和合并点云

    我正在尝试转换采样并存储在 XYZij 数据中的点云 根据document 将相机空间中的数据存储到世界坐标系中 以便可以合并它们 我用于 Tango 监听器的帧对有COORDINATE FRAME START OF SERVICE作为基础
  • 循环中 Plotly 中的 add_trace [重复]

    这个问题在这里已经有答案了 我想在循环中绘制多个轨迹 而不覆盖所有以前的轨迹 In 这个帖子从 2015 年开始 提出了在循环中添加跟踪的解决方案 通过设置evaluate TRUE在plot ly或add trace函数中 然而 从 20
  • 如何使用 forge 加密和解密 pdf blob 并将其存储在 localStorage 中?

    我试图加密一个 pdf 文件 Blob 并将其存储在 localStorage 中 并在离线时读取和解密它 我的应用程序是用 AngularJS 编写的 加密是用forge 这是我下载pdf文件的代码 http get url header
  • 无法过滤使用 Angular 2 中的 Http get 访问的 (MatSelect) 中的数据

    我使用带有输入字段和选择的 Angular Material 创建了一个简单的 Angular 应用程序 在我的选择中 我使用 HTTP get 请求访问数据accountdetails json它位于我的资产文件夹中 我已对选择应用了搜索
  • 为什么我无法在手机浏览器中输入网址来查看我的实时网站?

    我使用一个名为实时服务器在 Visual Studio 代码中 当我实时运行时 浏览器会打开 网址为http 127 0 0 1 5500 index html 为什么我无法在手机浏览器上打开此网址来查看手机上的实时站点 有没有办法做到这一
  • Android 中如何检测平板设备?

    我正在尝试将我为智能手机开发的应用程序移植到平板电脑上 并进行少量修改 Android中有API可以检测设备是否是平板电脑吗 我可以通过比较屏幕尺寸来做到这一点 但是检测平板电脑的正确方法是什么 我认为 API 中没有任何特定标志 基于 G
  • 如何在ECS任务定义命令中转义逗号

    我有 docker 镜像和命令 celery A bits payment tracking app app worker l debug Q celery reports concurrency 3 它在 docker 和 docker
  • 在电子中打开pdf文件

    我需要构建一个应用程序 用户可以在应用程序中打开 PDF 文件 即不通过打开新的浏览器窗口 我需要实现一个后退按钮 可能还需要在 PDF 上实现一些覆盖 有谁知道在 Electron 中是否有一个好的方法来做到这一点 如果您对 Chrome
  • Future.wait() 用于多个 future

    当我的设备没有互联网连接时 我试图捕获错误 我构建了 2 个未来方法 1 个用于导入 json 1 个用于查看数据库 我有一个未来的构建器 它应该在构建网格视图之前等待两个未来完成 但似乎由于连接错误而过早地调用了offlineFlashC
  • 通过 OBEX Object PushProfile 通过蓝牙接收文件

    我的设备使用 OBEX 对象推送配置文件 OPP 通过蓝牙发送数据 使用 adb logcat 我看到我的 Android 设备收到一个连接 但中止此连接 08 22 11 14 37 939 I BtOppRfcommListener 2
  • xslt1.0 替换不起作用

    我的 URL 带有一些特殊字符 我想替换它们 并且我正在使用 xslt 1 0 所以我编写如下代码
  • 限制 Docker 仅公开来自特定 IP 地址的端口

    如何限制 Docker 暴露的容器端口仅来自 IP 列表 只有此 IP 列表才能访问此端口 我尝试过 iptables I DOCKER p tcp dport PORT X j REJECT reject with icmp port u
  • GDB远程调试:无法停止线程

    我有一个数据库服务器在一个目标上 我像这样发射gdbserver 2345 bin ls 接下来 我从主机连接 gdb 并尝试发出下一个命令 gdb target remote 192 168 1 2 2345 Remote debuggi
  • 在 Access SQL 中查询“工作周”

    我有一个来自 MS Excel 2007 的公式 它返回特定月份内特定日期的工作周 B1 IF AND WEEKDAY A2 1 lt gt 1 A2 DATE YEAR A2 MONTH A2 1 A2 WEEKDAY A2 1 7 IF
  • 用于向量和矩阵计算的高性能数学库

    在哪里可以找到矢量和矩阵计算的快速库 我需要高性能 Update I need it for games calculations Go for Blaze Also check out the bench marking in paral
  • 即使显式调用析构函数后也会自动销毁对象

    以下程序 include
  • 应用程序在 iOS 9 上卡在启动屏幕中且没有错误

    我的应用程序在 iPhone 和模拟器上的 iOS 9 中都卡在启动屏幕上 我可以在 iOS 8 或更低版本的设备和模拟器上运行它 没有任何问题 我的同事在开发同一个应用程序时也遇到了完全相同的问题 没有错误或任何东西 只是挂在启动屏幕上
  • 在 Android 中的 FirestoreRecyclerAdapter 中显示 ServerValue.TIMESTAMP

    我想在列表中显示服务器时间戳 实际上是日期 这FirestoreRecyclerAdapter由此类提供 仅保留时间戳相关方法 public class Lista private Long timestamp private Map
  • 基于日期比较R的子集数据集

    我有一个数据集 如下所示 Col1 Col2 Col3 CutoffDate 12001 Yes 2008 08 15 2008 08 10 12001 Yes 2008 08 22 2008 08 10 12001 Yes 2008 08
  • 如何修复从 GEOS 转换为 s2 引起的球面几何误差

    我有同样的问题连接空间数据时如何解决球面几何故障 我以前可以使用的代码现在不能用于从 GEOS 到 s2 的转换 我不确定如何创建此错误的可重现示例 sf 包附带的示例数据集可以很好地使用此代码 因为我确信它们也已更新为可以与 s2 包一起