`s2_union_agg()` is slow
Open
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 81
- Forks
- 19
- Avg merge
- 20h 25m
- Merged PRs (30d)
- 3
Description
The strategy of accumulating a union is correct but slow! I assume there is a faster way to go about this that I haven't found in the documentation yet.
library(s2)
library(sf)
#> Warning: package 'sf' was built under R version 4.0.5
#> Linking to GEOS 3.8.1, GDAL 3.2.0, PROJ 7.2.0
countries <- s2_data_countries()
countries_sf <- st_as_sf(countries)
bench::mark(
s2_coverage_union_agg(countries),
s2_union_agg(countries),
st_union(countries_sf),
check = F
)
#> # A tibble: 3 x 6
#> expression min median `itr/sec` mem_alloc
#> <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt>
#> 1 s2_coverage_union_agg(countries) 100.89ms 101.7ms 9.59 61.7KB
#> 2 s2_union_agg(countries) 2.82s 2.82s 0.355 43.7KB
#> 3 st_union(countries_sf) 141.69ms 144.13ms 6.90 666.1KB
#> # … with 1 more variable: gc/sec <dbl>
Created on 2021-04-28 by the reprex package (v0.3.0)
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the benchmark for s2_union_agg(countries) and compare it with s2_coverage_union_agg() and st_union(). Trace the s2_union_agg entry point and its underlying implementation; done means the union remains correct and the reported performance gap is substantially reduced, with benchmark coverage added or updated.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, r
- Domain
- performance
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100