Skip to content

Commit 3660edf

Browse files
committed
address #2541
1 parent 3111149 commit 3660edf

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

R/geom-measures.R

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ message_longlat = function(caller) {
115115
#' st_perimeter(mpoly)
116116
st_perimeter = function(x, ...) {
117117
x = st_geometry(x)
118-
if (isTRUE(st_is_longlat(x))) { # for spherical geometries we use s2
118+
if (sf_use_s2() && isTRUE(st_is_longlat(x))) { # for spherical geometries we use s2
119119
if (!requireNamespace("s2", quietly = TRUE))
120120
stop("package s2 required to calculate the perimeter of spherical geometries")
121121
# ensure units are set to meters
@@ -125,10 +125,14 @@ st_perimeter = function(x, ...) {
125125
mode = "standard"
126126
)
127127
} else { # non-spherical geometries use lwgeom:
128-
if (!requireNamespace("lwgeom", quietly = TRUE))
129-
stop("package lwgeom required, please install it first")
130-
# note that units are handled appropriately by lwgeom
131-
lwgeom::st_perimeter_lwgeom(x)
128+
if (isTRUE(st_is_longlat(x)))
129+
units::set_units(st_length(st_boundary(x)), "m", mode = "standard")
130+
else {
131+
if (!requireNamespace("lwgeom", quietly = TRUE))
132+
stop("package lwgeom required, please install it first")
133+
# note that units are handled appropriately by lwgeom
134+
lwgeom::st_perimeter_lwgeom(x)
135+
}
132136
}
133137
}
134138

0 commit comments

Comments
 (0)