公司的gps点位特别多,导致数据存储以及查询都会造成一定的压力.
所以我们需要使用gps路径压缩算法
我调研了两种: k-means 和 Douglas-Peucker
k-means 压缩的底层原理是:
自定义簇的数量,假设是100个,那么就会计算所有gps点,把最相近的点,放在一个簇里,以此类推,计算出100个簇,然后每个簇计算出一个中心点,100簇的中心点也就是我们这段gps的压缩路径.
Douglas-Peucker 压缩的底层原理是:
我们首先 来看下这张图 *为折现点 直线为gps普通路径点
好 我们先假设全部的点都为普通点
第一步 我们会把整段路径的开始点和结束点设置为折线点
第二步 我们会找出这段路径当中离开始点和结束点距离最远的点.
第三步 拿这个最远的点和我们设置的距离阀值判断,如果超过了,则把这个点设置为折线点,没有超过,这段轨迹的计算停止.
第四步 会通过上一步计算好的折现点,划分为两个路径,然后这两个路径也是像上面的步骤一样,去计算最远的点,以此类推,直到没有点超过距离阀值即可
第五步 把所有的折现点结合起来,就是压缩后的路径
k-means 和 Douglas-Peucker 对比
k-means 只注重于gps大概在什么位置,但是具体的形状是不注重的,
性能较慢.但是因为簇是自定义的所以想节约多少点,都是可控的.
Douglas-Peucker 因为都是通过最远的点来计算,所以整体路径的形状一般会保持的很好,整体的计算性能较好,但由于距离阀值是固定的,而上传gps的点位是不固定的,所以压缩力度不可控
我们比较在意计算性能,Douglas-Peucker相比k-means也比较成熟点,所以选择了Douglas-Peucker