R 从OSM沿直线计算两个连续点之间的距离

R 从OSM沿直线计算两个连续点之间的距离,r,gis,distance,shapefile,rgdal,R,Gis,Distance,Shapefile,Rgdal,我有来自OSM的道路交通的shapefile和带有GPS坐标的数据帧。我想从数据帧沿一条线计算两个连续GPS点之间的道路网距离 我找到了这个解决方案: OSM中的Shapefile位于以下位置: 我的代码: library("rgdal") library("rgeos") #lines from osm lines <- readOGR(dsn="slovakia-latest-free.shp",layer="gi

我有来自OSM的道路交通的shapefile和带有GPS坐标的数据帧。我想从数据帧沿一条线计算两个连续GPS点之间的道路网距离

我找到了这个解决方案:

OSM中的Shapefile位于以下位置:

我的代码:

library("rgdal")
library("rgeos")

#lines from osm
lines <- readOGR(dsn="slovakia-latest-free.shp",layer="gis_osm_roads_free_1")
route <- spTransform(lines, CRS("+init=epsg:32634"))

#my gps points
m <- data.frame(LON=c(18.86365, 18.86357, 18.86355, 18.86301, 18.86286),
              LAT=c(49.18286,49.18095,49.17907,49.17754,49.17715),
              OSM_ID=c("33544857","33544857","33544851","843079370","33544922"))

wgs84 <- CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
p = SpatialPointsDataFrame(coords=m[,1:2], proj4string = wgs84, data=m)
p = spTransform(p,CRS("+init=epsg:32634"))

#count dist along a line
diff(gProject(route, p))

l <- subset(route, osm_id %in% c(33544857,33544851,843079370,33544922))
plot(l, axes=TRUE,col="orange")  
plot(p, add=TRUE)
问题

问题在于,只有当两个GPS点位于同一条线上(在本例中位于同一OSM边上)时,gProject函数才会返回正确的结果。在我的数据中,只有前两个点位于同一条线上,所以只有第一个结果是正确的,其他的是错误的和奇怪的。所以我想问一下是否有正确的方法,也许连接线路会有帮助


提前感谢您的帮助。

我无法使用
readOGR()
,因此很难找出代码的错误。你能用这样的方法来计算两条横向/纵向线对之间的距离吗?您好,感谢您的回复,您需要首先从下载数据::我需要计算沿线的距离。gProject函数可以做到这一点,我认为我的解决方案是好的,但我的问题是,并不是所有连续的GPS点都在同一条线上。因此,我正在寻找解决这个问题的方法,例如,是否有可能将所有线路合并为一条线路。感谢
readOGR()
对我不起作用,因此很难找出代码的错误。你能用这样的方法来计算两条横向/纵向线对之间的距离吗?您好,感谢您的回复,您需要首先从下载数据::我需要计算沿线的距离。gProject函数可以做到这一点,我认为我的解决方案是好的,但我的问题是,并不是所有连续的GPS点都在同一条线上。因此,我正在寻找解决这个问题的方法,例如,是否有可能将所有线路合并为一条线路。谢谢
[1]  2.130847e+02 -1.258070e+03  1.449036e+08 -1.449011e+08