diff --git a/dev/package.development.R b/dev/package.development.R index 3043176bab4d6c449e4ce6f99ba78cd28c822626..76538e630489e2f54441d0ff5f529b242487e1e5 100644 --- a/dev/package.development.R +++ b/dev/package.development.R @@ -10,11 +10,11 @@ devtools::build_vignettes(package) ### Checks if (FALSE) { { - system("rm so.ii/data-raw/data-common") - system("mv ~/.Rprofile ~/.Rprofile-temp") + # system("rm so.ii/data-raw/data-common") + # system("mv ~/.Rprofile ~/.Rprofile-temp") devtools::check(package) - system("mv ~/.Rprofile-temp ~/.Rprofile") - system("cp -r data-common so.ii/data-raw") + # system("mv ~/.Rprofile-temp ~/.Rprofile") + # system("cp -r data-common so.ii/data-raw") } } diff --git a/dev/tag-message b/dev/tag-message index da25973d44ef238d8cb97f5c6f276532d4dea28d..2e0bd93d6bcd609f19d21a4546fbf2f61a2689bc 100644 --- a/dev/tag-message +++ b/dev/tag-message @@ -1,16 +1,18 @@ -so.ii Version: 1.0.24.0 +so.ii Version: 1.0.25.0 0 errors ✔ | 0 warnings ✔ | 0 notes ✔ **Note de version** * modification de map_so_ii + * nouvelle fonction interne adjust_terra_scale **Détails** - * map_so_ii charge dorénavant sf si besoin, modifie le parmètre sf_use_s2 à - FALSE (de façon momentanée). Il gère aussi le format de dataset. Il cherche - à le transformer en objet de classe sfc, s'il n'y arrive pas il renvoie un - warning et n'affiche pas dataset. + * La librairie terra a changé sa façon de faire la barre d'échelle avec + sbar à partir de la version 1.7, de façon incompatible avec l'usage interne. + Une nouvelle fonction non exportée adjust_terra_scale est créé pour ne plus + dépendre des fonctionnalités de terra::sbar qui posent problème, lorsque + les cartes sont en "lonlat". -# git tag -a v1.0.24.0 -F dev/tag-message +# git tag -a v1.0.25.0 -F dev/tag-message # git push --tags diff --git a/so.ii/DESCRIPTION b/so.ii/DESCRIPTION index aee78c71fea435e827a7eb0647ac9de37b9a896f..cf26285db960a9ae1eab01d165b12ed3b93b7af6 100644 --- a/so.ii/DESCRIPTION +++ b/so.ii/DESCRIPTION @@ -1,6 +1,6 @@ Package: so.ii Title: Utilities very useful to share within so_ii team -Version: 1.0.24.0 +Version: 1.0.25.0 Authors@R: c( person(given = "Frédéric", @@ -28,8 +28,7 @@ Imports: rio, scales, sf, - terra, - units + terra Suggests: rmarkdown, testthat diff --git a/so.ii/R/adjust_terra_scale.R b/so.ii/R/adjust_terra_scale.R new file mode 100644 index 0000000000000000000000000000000000000000..a749b0eb9933fcc2cc38c0337a10ed18e86f4263 --- /dev/null +++ b/so.ii/R/adjust_terra_scale.R @@ -0,0 +1,36 @@ +adjust_terra_scale = function(d = NULL, lonlat = TRUE) { + destpoint = function (p, d, b = 90, r = 6378137) { + toRad = pi/180 + lon1 = p[, 1] * toRad + lat1 = p[, 2] * toRad + b = b * toRad + lat2 = asin(sin(lat1) * cos(d/r) + cos(lat1) * sin(d/r) * + cos(b)) + lon2 = lon1 + atan2(sin(b) * sin(d/r) * cos(lat1), cos(d/r) - + sin(lat1) * sin(lat2)) + lon2 = (lon2 + pi)%%(2 * pi) - pi + cbind(lon2, lat2)/toRad + } + + graph_box = graphics::par()$usr + if (lonlat) { + lat = mean(graph_box[3:4]) + if (is.null(d)) { + dx = (graph_box[2] - graph_box[1])/6 + d = as.vector(terra::distance(cbind(0, lat), cbind(dx, + lat), TRUE)) + d = max(1, 5 * round(d/5000)) + } + p = cbind(0, lat) + dd = destpoint(p, d * 1000)[1, 1] + } + else { + if (is.null(d)) { + d = (graph_box[2] - graph_box[1])/6 + digits = floor(log10(d)) + 1 + d = round(d, -(digits - 1)) + } + dd = d + } + return(c(dd, d)) +} diff --git a/so.ii/R/map_so_ii.r b/so.ii/R/map_so_ii.r index 656fc2fbea90b00f1422a390dda132650c9fe54d..f0d1c11d772cf5fb9d4634f2f3d0db4fb939888a 100644 --- a/so.ii/R/map_so_ii.r +++ b/so.ii/R/map_so_ii.r @@ -289,23 +289,31 @@ map_so_ii = function( ## Plot bar if (bar == TRUE) { if (identical(scope, so.ii::so_ii_limit)) { - d = 10 + # d = 10 + d = adjust_terra_scale(10) xy = c(3.55, 43.47) - below = "km" - label = c(0, 5, 10) + adj = c(0.5, -1) } else { - area = sf::st_area(sf::st_as_sfc(sf::st_bbox(scope))) - d = max(pretty(units::set_units(sqrt(area) / 5, "km"))) + # area = sf::st_area(sf::st_as_sfc(sf::st_bbox(scope))) + # d = max(pretty(units::set_units(sqrt(area) / 5, "km"))) + d = adjust_terra_scale() xy = "bottomleft" - below = "km" - label = c(0, d/2, d) + # Magical adjustment when scope vary to have text readable + # 0.4788987 should correspond to longitude range for so.ii scope + adj = diff(graphics::par()$usr[3:4]) + adj = c( + 0.5, + -1 * exp(0.4788987 / adj - 1)^.024 + ) } terra::sbar( - d = d, + d = d[1], xy = xy, type = "bar", - below = below, - label = label, + below = "km", + label = c(0, d[2]/2, d[2]), + lonlat = FALSE, + adj = adj, cex = .8 ) }