library(sf)
#> Linking to GEOS 3.7.2, GDAL 2.4.2, PROJ 5.2.0
test_line <- st_linestring(
matrix(
c(-124.1637, 40.80207, -122.4199, 37.77903),
nrow = 2, byrow = T
)
) %>%
st_sfc() %>%
st_set_crs(4326)
test_pt <- st_point(c(-123.4167, 39.50740)) %>%
st_sfc() %>%
st_set_crs(4326)
st_intersects(test_pt, test_line)
#> although coordinates are longitude/latitude, st_intersects assumes that they are planar
#> Sparse geometry binary predicate list of length 1, where the predicate was `intersects'
#> 1: (empty)
st_distance(test_pt, test_line)
#> Units: [m]
#> [,1]
#> [1,] 1583.654
Создано в 2020-04-13 пакетом представ (v0.3.0)
Распределение точек и линий в {sf}
- Геометрические кадры данных являются обязательным условием для использования функций st_relate
, но как только они у вас есть, просто проверить, точно ли они пересекаются, а они - нет (пустой набор). Кроме того, они, вероятно, никогда не будут с точкой на линии, если это не одна из точных конечных точек.
Более разумный способ - проверить, как далеко точка находится от линии, здесь 1584 метра, и отфильтровать те, которые находятся выше некоторого порога (100 м × 10 м? 1 м? 0,1 м? Зависит от вашего приложение).
Чтобы проиллюстрировать эту точку, вот карта вашей контрольной точки и линии с окружающими их округами. Визуально точка определенно находится на прямой, но математически это не так.
![enter image description here](https://i.stack.imgur.com/PuMVx.png)