Time GPS数据时距转换
我正在开发一个应用程序,可以记录一段时间内的GPS跟踪 跟踪完成后,我需要将基于时间的数据转换为基于距离的数据,也就是说,如果原始跟踪每秒有一个lon/lat记录,我需要将其转换为每隔20米有一个lon/lat记录Time GPS数据时距转换,time,gps,distance,Time,Gps,Distance,我正在开发一个应用程序,可以记录一段时间内的GPS跟踪 跟踪完成后,我需要将基于时间的数据转换为基于距离的数据,也就是说,如果原始跟踪每秒有一个lon/lat记录,我需要将其转换为每隔20米有一个lon/lat记录 平滑原始数据似乎是一个很好理解的问题,我想我需要平滑算法之类的东西,但我正在努力思考如何从基于时间的数据集转换为基于距离的数据集。这是一个很好的问题,有趣的是数据点应该是随机的。这意味着您不能期望一个从开始到结束的数据图来表示一个性能良好的多项式(如正弦波或余弦波)。因此,您必须以较
平滑原始数据似乎是一个很好理解的问题,我想我需要平滑算法之类的东西,但我正在努力思考如何从基于时间的数据集转换为基于距离的数据集。这是一个很好的问题,有趣的是数据点应该是随机的。这意味着您不能期望一个从开始到结束的数据图来表示一个性能良好的多项式(如正弦波或余弦波)。因此,您必须以较小的增量工作,这样x轴上的值(可以说)就不会振荡,这意味着Xn不能小于Xn-1。下一个考虑事项是数据点重叠或接近重叠的情况。想象一下,我正在记录我的GPS坐标,我们停下来聊天或休息,在接下来的五分钟里,我在一个25英尺的圆圈内随机行走。所以问题是如何忽略这种“数据噪音” 为简单起见,我们考虑两个点之间没有近似的线性计算;这是一条直线。这对于您的计算可能已经足够了。现在给出上面关于随机数据点的注释,您将希望按顺序从起点到终点遍历数据。当超过最后一个数据点或超过生成坐标(如子集)的总距离时,会发生顺序终止。假设你的绘图精度是X,这是你的20米。当您遍历时,将出现三个条件:
recordedPoints = received from trace;
newPlotPoints = emplty list of coordinates;
plotPrecision = 20
immedPrecision = plotPrecision;
startPoint = recordedPoints[0];
for(int i = 1; i < recordedPoints.Length – 1; i++)
{
Delta = recordedPoints[i] – startPoint;
if (immedPrecision < Delta)
{
newPlotPoints.Add(startPoint + immedPrecision);
startPoint = startPoint + immedPrecision;
immedPrecsion = plotPrecsion;
i--;
}
else if (immedPrecision = Delta)
{
newPlotPoints.Add(startPoint + immedPrecision);
startPoint = startPoint + immediatePrecision;
immedPrecision = plotPrecision;
}
else if (immedPrecision > Delta)
{
// Store last data point regardless
if (i == recordedPoints.Length - 1)
{
newPlotPoints.Add(startPoint + Delta)
}
startPoint = recordedPoints[i];
immedPrecision = Delta - immedPrecision;
}
}
recordedPoints=从跟踪接收;
newPlotPoints=坐标的位置列表;
绘图精度=20
直接精度=绘图精度;
起始点=记录点[0];
对于(int i=1;i增量)
{
//不考虑存储最后一个数据点
if(i==recordedPoints.Length-1)
{
newPlotPoints.Add(起点+增量)
}
起始点=记录点[i];
imendprecision=增量-imendprecision;
}
}
前面我提到了“数据噪音”。您可以将“if”和“else if”封装在另一个“if”中,该“if”决定了这个因素。最简单的方法是忽略未移动给定距离的数据点。请记住,这个神奇的数字必须足够小,这样被忽略的顺序记录的数据点就不会成为大而有价值的东西。因此,限制被忽略的数据点可能是一个好处
综上所述,有许多方法可以准确地执行此操作。将这一主题提升到下一个层次的一个建议是插值。对于.NET,在上有一个开源库。您可以使用他们的Numberics库,该库至少包含插值。如果你选择这样一条路线,你的下一个主要障碍将是决定合适的插值技术。如果你不是数学大师,这里有一些信息可以让你开始学习。坦率地说,如果你认为Xn的概念不是Jeff这是一个很好的问题,有趣的是数据点应该是随机的。这意味着您不能期望一个从开始到结束的数据图来表示一个性能良好的多项式(如正弦波或余弦波)。因此,您必须以较小的增量工作,这样x轴上的值(可以说)就不会振荡,这意味着Xn不能小于Xn-1。下一个考虑事项是数据点重叠或接近重叠的情况。想象一下,我正在记录我的GPS坐标,我们停下来聊天或休息,我在20英里内随机行走