R GPS点在由其他GPS点组成的多段线上的投影

R GPS点在由其他GPS点组成的多段线上的投影,r,sf,R,Sf,我想问一下,是否有一种相当体面的方式将GPS点“投影”到由其他GPS点组成的多段线。此“投影”的结果应为多段线上投影点的坐标 我正在寻找类似的东西(我需要红点“X”的GPS坐标): 提前感谢您的帮助我建议您在函数sf::st_nearest_points()上构建解决方案-它将两个几何体对象之间的最短路径作为线字符串返回 它将接受点和线作为参数。该函数需要投影其参数(因此没有lat/lon-但很容易将结果重新投影回WGS84) 当函数返回linestring时,需要sf::st_cast()

我想问一下,是否有一种相当体面的方式将GPS点“投影”到由其他GPS点组成的多段线。此“投影”的结果应为多段线上投影点的坐标

我正在寻找类似的东西(我需要红点“X”的GPS坐标):


提前感谢您的帮助

我建议您在函数sf::st_nearest_points()上构建解决方案-它将两个几何体对象之间的最短路径作为线字符串返回

它将接受点和线作为参数。该函数需要投影其参数(因此没有lat/lon-但很容易将结果重新投影回WGS84)

当函数返回linestring时,需要
sf::st_cast()

由于你的例子不容易复制,我在布拉格的地理编码地址和伏尔塔瓦河最近点的一个有点复杂的例子上演示这种方法。河流作为一条线和地理编码功能来自RCzechia包,与您的问题完全无关

您需要的是投影坐标参照系中的直线和点

library(sf)
library(dplyr)
library(RCzechia) # Czech spatial objects to have some data to work with...

# an address in Prague
free_point <- RCzechia::geocode("pplk. Sochora 4, Praha 7") %>% 
  filter(typ == "AdresniMisto") %>% 
  st_transform(5514) #↨a local projected CRS


# a piece of river (to have a linestring)
vltava <- RCzechia::reky() %>% 
  filter(NAZEV == "Vltava") %>% 
  st_transform(5514) %>%  #↨a local projected CRS
  st_intersection(sf::st_buffer(free_point, 2500)) %>% # a buffer of 2500 meters around point
  st_geometry() %>% 
  st_union() %>% 
  st_line_merge()

# the interesting part starts here!!!

# a line from address to the closest point on the river
closest_line <- st_nearest_points(st_geometry(vltava),
                                  st_geometry(free_point)) 

# start of the line - this is what I seek :)
closest_point <- st_cast(closest_line, to = "POINT")[1]

# report results
plot(st_geometry(vltava))
plot(free_point, pch = 4, col = "red", add = T)
plot(closest_point, pch = 4, col = "blue", add = T)
库(sf)
图书馆(dplyr)
图书馆(RCzechia)#捷克空间对象需要处理一些数据。。。
#布拉格的地址
自由点%
过滤器(典型==“AdresniMisto”)%>%
st_变换(5514)#↨局部投影CRS
#一条河(有一根绳子)
vltava%
过滤器(NAZEV==“Vltava”)%>%
st_变换(5514)%>%#↨局部投影CRS
st_交叉口(sf::st_缓冲区(自由点,2500))%>%#点周围2500米的缓冲区
st_几何体()%>%
st_union()%>%
st_line_merge()
#有趣的部分从这里开始!!!
#从地址到河上最近点的线

最近的_线谢谢你的反应,我有一个数据框,上面有多段线的GPS点,还有一个GPS点,我想投影到这条线上-想从这一点找到多段线上最近的点。但我想我找到了使用dist2Line函数的解决方案。