## an exploration of https://github.com/r-spatial/sf/issues/603
library(sf)
## Linking to GEOS 3.5.1, GDAL 2.2.2, proj.4 4.9.2
suppressPackageStartupMessages(library(dplyr))
p1 <- readRDS("p1.rds")
p2 <- readRDS("p2.rds")
try(p3 <- sf::st_difference(p1, p2))
## obtained from the GEOS message
pt <- c(1588363.7352041774, 4278353.7855906803)
## indicates the index at various levels
## this is
## L3 1st multipolygon (there is only one)
## L2 27th island
## L1 14 hole in L2
## (note, first one might not be ring causing the problem exactly but arrange gives candidates)
st_coordinates(p2) %>% as_tibble() %>%
mutate(idx = abs(X - pt[1]) + abs(Y - pt[2])) %>% arrange(idx)
## # A tibble: 33,399 x 6
## X Y L1 L2 L3 idx
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1588364 4278354 14 27 1 3.248444e-04
## 2 1588365 4278354 14 27 1 1.952405e+00
## 3 1588362 4278353 14 27 1 2.492340e+00
## 4 1588355 4278356 15 27 1 1.100216e+01
## 5 1588355 4278356 15 27 1 1.100216e+01
## 6 1588371 4278350 14 27 1 1.119485e+01
## 7 1588355 4278357 15 27 1 1.147376e+01
## 8 1588372 4278349 14 27 1 1.289806e+01
## 9 1588372 4278349 14 27 1 1.289806e+01
## 10 1588350 4278359 15 27 1 1.877189e+01
## # ... with 33,389 more rows
plot(p2[[27]][[14]])
plot(p2, add = T, col = "grey")
points(p2[[27]][[14]])
plot(p1, add = TRUE, lty = 2)
abline(v = pt[1], h = pt[2])

devtools::session_info()
## ─ Session info ──────────────────────────────────────────────────────────
## setting value
## version R version 3.4.3 (2017-11-30)
## os Debian GNU/Linux 9 (stretch)
## system x86_64, linux-gnu
## ui X11
## language (EN)
## collate en_US.UTF-8
## tz Australia/Tasmania
## date 2017-12-24
##
## ─ Packages ──────────────────────────────────────────────────────────────
## package * version date source
## assertthat 0.2.0 2017-04-11 CRAN (R 3.4.0)
## backports 1.1.2 2017-12-13 CRAN (R 3.4.3)
## bindr 0.1 2016-11-13 CRAN (R 3.4.0)
## bindrcpp * 0.2 2017-06-17 CRAN (R 3.4.0)
## class 7.3-14 2015-08-30 CRAN (R 3.4.0)
## classInt 0.1-24 2017-04-16 CRAN (R 3.4.3)
## cli 1.0.0 2017-12-13 Github (r-lib/cli@ab1c3aa)
## clisymbols 1.2.0 2017-05-21 CRAN (R 3.4.1)
## crayon 1.3.4 2017-09-16 CRAN (R 3.4.1)
## DBI 0.7 2017-06-18 CRAN (R 3.4.3)
## desc 1.1.1 2017-08-03 CRAN (R 3.4.1)
## devtools 1.13.3.9000 2017-12-22 Github (hadley/devtools@0bcfd6e)
## digest 0.6.13 2017-12-14 CRAN (R 3.4.3)
## dplyr * 0.7.4.9000 2017-12-21 Github (tidyverse/dplyr@c04deb3)
## e1071 1.6-8 2017-02-02 CRAN (R 3.4.3)
## evaluate 0.10.1 2017-06-24 CRAN (R 3.4.0)
## glue 1.2.0 2017-10-29 CRAN (R 3.4.2)
## htmltools 0.3.6 2017-04-28 CRAN (R 3.4.0)
## knitr 1.17 2017-08-10 CRAN (R 3.4.1)
## magrittr 1.5 2014-11-22 CRAN (R 3.4.3)
## memoise 1.1.0 2017-04-21 CRAN (R 3.4.0)
## pkgbuild 0.0.0.9000 2017-12-04 Github (r-pkgs/pkgbuild@ce7f6d1)
## pkgconfig 2.0.1 2017-03-21 CRAN (R 3.4.0)
## pkgload 0.0.0.9000 2017-11-02 Github (r-lib/pkgload@70eaef8)
## purrr 0.2.4 2017-10-18 CRAN (R 3.4.2)
## R6 2.2.2 2017-06-17 CRAN (R 3.4.0)
## Rcpp 0.12.14 2017-11-23 CRAN (R 3.4.3)
## rlang 0.1.4.9000 2017-12-15 Github (tidyverse/rlang@cc7587c)
## rmarkdown 1.8 2017-11-17 CRAN (R 3.4.2)
## rprojroot 1.3-1 2017-12-18 CRAN (R 3.4.3)
## sessioninfo 1.0.1.9000 2017-12-13 Github (r-lib/sessioninfo@c871d01)
## sf * 0.5-6 2017-12-23 Github (r-spatial/sf@8575ca4)
## stringi 1.1.6 2017-11-17 CRAN (R 3.4.3)
## stringr 1.2.0 2017-02-18 CRAN (R 3.4.0)
## testthat 2.0.0.9000 2017-12-22 Github (hadley/testthat@eda2d54)
## tibble 1.3.4 2017-08-22 CRAN (R 3.4.1)
## tidyselect 0.2.3 2017-11-06 CRAN (R 3.4.2)
## udunits2 0.13 2016-11-17 CRAN (R 3.4.3)
## units 0.4-6 2017-08-27 CRAN (R 3.4.3)
## usethis 1.1.0.9000 2017-12-23 Github (r-lib/usethis@973bcab)
## withr 2.1.1 2017-12-19 CRAN (R 3.4.3)