Я дам вам понимание, возможно, это не полный ответ, который вы могли бы себе представить.
Поскольку линии состоят из точек, если вы просто сделаете два небольших изменения, вы можете иметь не только минимальное расстояние , но также и максимальное расстояние, делая то же самое, что вы сделали с линиями, но с точками, из которых состоят линии.
library(sf)
#> Linking to GEOS 3.8.0, GDAL 2.4.2, PROJ 6.2.1
pts1 <- data.frame(x = c(-103.485342, -103.482808),
y = c(31.348758, 31.376947)) %>%
sf::st_as_sf(coords = c("x","y"))
st_crs(pts1) <- "+init=epsg:2257"
pts2 <- data.frame(x = c(-103.492822, -103.484231),
y = c(31.348181, 31.377191)) %>%
sf::st_as_sf(coords = c("x","y"))
st_crs(pts2)<- "+init=epsg:2257"
a <- pts1 %>% st_coordinates() %>% st_linestring()
b <- pts2 %>% st_coordinates() %>% st_linestring()
st_distance(pts1, pts2, by_element = T)
#> Units: [US_survey_foot]
#> [1] 0.007502222 0.001443768
Для среднего расстояния я не уверен, что это то, что Вы хотите, но я думаю, что вы можете получить центроид обеих линий и затем обработать st_distance
.
ca <- st_centroid(a)
cb <- st_centroid(b)
st_distance(ca, cb, by_element = T)
#> [1] 0.004454613
РЕДАКТИРОВАТЬ: моя последняя попытка на основе комментария
Я думаю, что вы можете получить то, что пытаетесь получить, если найдете самую длинную линию (b в вашем примере), чем обработать и найти самое длинное расстояние между точками более короткой линии и самой длинной линией:
(я также внес некоторые изменения в ваш исходный код, чтобы он работал)
library(sf)
pts1 <- data.frame(x = c(-103.485342, -103.482808),
y = c(31.348758, 31.376947)) %>%
st_as_sf(coords = c("x","y")) %>%
st_set_crs(4326) %>%
st_transform(2257)
pts2 <- data.frame(x = c(-103.492812, -103.484231),
y = c(31.318181, 31.377991)) %>%
st_as_sf(coords = c("x","y")) %>%
st_set_crs(4326) %>%
st_transform(2257)
a <- pts1 %>%
st_union(.) %>%
st_cast(to = "LINESTRING")
b <- pts2 %>%
st_union(.) %>%
st_cast(to = "LINESTRING")
longest <- ifelse(test = st_length(a) > st_length(b),
yes = quote(a),
no = quote(b))
max(st_distance(pts1, eval(longest)))
#> 955.7374 [US_survey_foot]