火车地图搞了有半年了,在做火车地图的过程中,遇到了一个问题,就是由于火车站点的地理坐标是直接请求api拿到的,部分api返回的结果可能千差万别。所以我需要一个方法,来在地图显示的过程中,判断出某个站点的坐标有误,并上报到服务器端,从而便于我的修正。一个典型的站点错误如下面这张图片所示:
我最开始的思路是计算站点之间的距离,然后根据两站点之间的到站时间算出速度,如果超出某个值,比如300km/h,就判断该站点中有错误。
但是这种方法适用于坐标差出去比较多的站点,对于坐标差别比较少的站点就无能为力了,所以接下来,我要提到第二种方法,就是计算站点夹角的方法。
从上图可以看出,错误的站点会形成一个很小的锐角,如果我们能计算出这个锐角的大小,问题就解决了。
那么问题可以描述如下:
有3个站点坐标P1,P2,P3,求角⦣P1P2P3的大小。
问题很简单,解出来不容易,因为高中所学的功夫,由于很长时间没有使用,基本已经忘完了。好在有搜索引擎,一番搜索之后,终于找到了一个方案,计算夹角可以分为下面两步:
- 将经纬度转换成笛卡尔坐标系下的值
- 利用向量求夹角
θ=acos(v1⋅v2/||v