Javascript 从数据集中删除相似的数据点

Javascript 从数据集中删除相似的数据点,javascript,linear-regression,Javascript,Linear Regression,我正在谷歌地图上绘制一段旅程。数据量降低了地图的性能,因此我正在寻找减少数据量的方法。具体地说,我希望删除彼此非常相似的绘图点 我有一组描述一个人旅行的位置数据。这些数据点本质上是一个大的lat/long列表,其中包含一些相关的元数据,例如速度 我记得线性回归模型可以用来删除仅基于位置数据的直线上出现的“相似”点,但它可以扩展到包括另一个字段,如速度 i、 e.如果我有以下几点(为了简洁起见,我将使用X,Y而不是latlng)。我将用一个圆画出这些点 {纬度:0,液化天然气:0,速度:0} {

我正在谷歌地图上绘制一段旅程。数据量降低了地图的性能,因此我正在寻找减少数据量的方法。具体地说,我希望删除彼此非常相似的绘图点

我有一组描述一个人旅行的位置数据。这些数据点本质上是一个大的lat/long列表,其中包含一些相关的元数据,例如速度

我记得线性回归模型可以用来删除仅基于位置数据的直线上出现的“相似”点,但它可以扩展到包括另一个字段,如速度

i、 e.如果我有以下几点(为了简洁起见,我将使用X,Y而不是latlng)。我将用一个圆画出这些点

  • {纬度:0,液化天然气:0,速度:0}
  • {Lat:1,Lng:1,Speed:0}//无法删除
  • {Lat:2,Lng:2,Speed:1}//可以删除
  • {Lat:3,Lng:3,速度:30}//大变化,保持
  • {Lat:4,Lng:4,Speed:30}//可以移除
  • {Lat:5,Lng:5,Speed:30}//可以移除
  • {Lat:1,Lng:5,速度:30}//大变化,保持
谁能给我一些真正的代码怎么做?我正在使用javascript,但可以从任何语言或伪代码转换。如果速度不能包括在内,请有人帮我用线性回归算法,只是为类似的绘图点


抱歉,如果我的数学术语不好,我有点不懂数学

这里是一个使用reduce循环所有条目创建新数组的示例,如果条目与前面的条目太相似(
distance*speed>5
),则忽略它们

var数据=[
{Lat:0,Lng:0,Speed:0},
{Lat:1,Lng:1,Speed:0},//无法删除
{Lat:2,Lng:2,Speed:1},//可以删除
{Lat:3,Lng:3,Speed:30},//大变化,保持
{Lat:4,Lng:4,Speed:30},//可以删除
{Lat:5,Lng:5,Speed:30},//可以删除
{纬度:1,液化天然气:5,速度:30}
]
功能距离(a,b){
返回Math.sqrt(Math.pow(a.Lat-b.Lat,2)+Math.sqrt(Math.pow(a.Lng-b.Lng,2)))
}
函数speedDif(a,b){
返回Math.abs(a.Speed-b.Speed)
}
var res=数据减少((ac,x)=>{
如果(!ac.length)
交流推力(x);
否则{
const last=ac[ac.length-1];
如果(距离(最后一个,x)*速度dif(最后一个,x)>5)//对于ex.5
交流推力(x)
}
返回ac;
},[])

console.log(res)
下面是一个使用reduce循环所有条目创建新数组的示例,如果条目与前面的条目太相似(
distance*speed>5
),则忽略它们

var数据=[
{Lat:0,Lng:0,Speed:0},
{Lat:1,Lng:1,Speed:0},//无法删除
{Lat:2,Lng:2,Speed:1},//可以删除
{Lat:3,Lng:3,Speed:30},//大变化,保持
{Lat:4,Lng:4,Speed:30},//可以删除
{Lat:5,Lng:5,Speed:30},//可以删除
{纬度:1,液化天然气:5,速度:30}
]
功能距离(a,b){
返回Math.sqrt(Math.pow(a.Lat-b.Lat,2)+Math.sqrt(Math.pow(a.Lng-b.Lng,2)))
}
函数speedDif(a,b){
返回Math.abs(a.Speed-b.Speed)
}
var res=数据减少((ac,x)=>{
如果(!ac.length)
交流推力(x);
否则{
const last=ac[ac.length-1];
如果(距离(最后一个,x)*速度dif(最后一个,x)>5)//对于ex.5
交流推力(x)
}
返回ac;
},[])

console.log(res)
您要查找的似乎是点之间的简单距离计算器。所以,对于每个点,计算到下一个点的距离,如果它大于某个预定的距离,则保留它,否则,删除它。唯一的问题是,假设你从(1,1)到(2,2)到(3,3)到(4,4)到。。。(10001000)然后你继续移除所有东西!我的建议是将每个节点与前一个节点进行比较,计算距离,然后如果要删除它,首先将其与未删除的最后一个节点进行比较。这样,即使您不断删除彼此靠近的多个节点,您仍然可以知道何时距离包含的最后一个节点足够远。这只是一种不用所有讨厌的线性回归的方法…

你要找的似乎是一个简单的点间距离计算器。所以,对于每个点,计算到下一个点的距离,如果它大于某个预定的距离,则保留它,否则,删除它。唯一的问题是,假设你从(1,1)到(2,2)到(3,3)到(4,4)到。。。(10001000)然后你继续移除所有东西!我的建议是将每个节点与前一个节点进行比较,计算距离,然后如果要删除它,首先将其与未删除的最后一个节点进行比较。这样,即使您不断删除彼此靠近的多个节点,您仍然可以知道何时距离包含的最后一个节点足够远。这只是一种不用所有令人讨厌的线性回归的方法…

你能不能在数组中迭代并将每个点与上一个点进行比较,扔掉那些差异不够大的点?你如何定义足够大的差异?如果两个点之间有一个点是不同的,因为它完全位于两个点之间,但当在它们之间画一条线时,它完全相交,因此是多余的,那该怎么办?你能不能不只是遍历数组,并将每个点与前一个点进行比较,扔掉那些不够不同的?你如何定义足够不同?如果两点之间有一个点是不同的,因为它完全位于两者之间,但当在它们之间画一条线时,它完全相交,因此是多余的,那该怎么办?