包中有“花费时间”功能trip
(我是作者)。您可以根据跟踪数据创建对象,了解随时间推移的基本跟踪过程,并简单地处理假设修复之间的直线段的点。如果“家”是最大值像素所在的位置,即当您根据持续时间分解所有段并将它们汇总为单元格时,则很容易找到它。函数中的“花费时间”网格tripGrid
是SpatialGridDataFrame
具有标准sp
包类的,并且行程对象可以由一个或多个轨道组成。
如果 lon/lat 不适合您的范围,使用rgdal
您可以轻松地将坐标转换为适当的地图投影,但这对线段的网格/时间计算没有影响。
有一个简单speedfilter
的删除修复暗示移动太快,但这非常简单并且可能引入新问题,通常更新或过滤轨道以防止不太可能的移动可能非常复杂。(根据我的经验,网格化所花费的基本时间可以让您获得与许多复杂模型一样好的估计,这些模型只会带来新的复杂性)。该过滤器适用于笛卡尔坐标或长/纬度坐标,使用工具sp
来计算距离(长/纬度是可靠的,而糟糕的地图投影选择可能会引入问题 - 在像陆地上的人类这样的短距离上,这可能没什么大不了的)。
(该函数使用tripGrid
计算直线段的精确分量pixellate.psp
,但该细节隐藏在实现中)。
在数据准备方面,trip
严格遵守合理的时间顺序,如果数据有重复、乱序等,将阻止您创建对象。有一个从文本文件中读取数据的示例?trip
,还有一个带有(真正)虚拟数据的非常简单的示例是:
library(trip)
d <- data.frame(x = 1:10, y = rnorm(10), tms = Sys.time() + 1:10, id = gl(1, 5))
coordinates(d) <- ~x+y
tr <- trip(d, c("tms", "id"))
g <- tripGrid(tr)
pt <- coordinates(g)[which.max(g$z), ]
image(g, col = c("transparent", heat.colors(16)))
lines(tr, col = "black")
points(pt[1], pt[2], pch = "+", cex = 2)
该虚拟轨道没有重叠区域,但它表明找到“花费时间”的最大点很简单。