相信只要是使用百度地图做实时定位服务的朋友都会遇到这个问题,在对坐标位置进行覆盖物展示的时候,会出现由于获取坐标数据时间或者两个坐标点相距过远,导致在视觉上看Marker移动就像“僵尸跳”一样,一蹦一蹦的给客户看分分钟鄙视你到不能自已。另外如果用的是有指向性图标ICON的时候,更会引来吐槽~诶诶诶,你这小车车怎么在这个立交桥转弯的时候车头向着后面呢?怎么搞得嘛你!会不会弄啊你!

  所以今天参照百度大大提供的路书开源文件实现下自己的需求,记录一下以便提供参考。

  一、覆盖物在获取坐标数据的同时,在坐标点之间平滑的移动

  首先,之所以会出现僵尸跳的效果,是因为项目是根据实时坐标数据进行定位,所以存在一个等待新数据的过程,而对于覆盖物的坐标改变就是一个setPosition(BMap.Point)方法而已也就造成了停顿。所以目前暂且解决方案就是:让他这个覆盖物在这个等待的期间找点事情做,不要一下就直接从起点蹦到终点了,慢慢的移动过去。小碎步,平滑的的移动过去~~

  怎么移动呢?此时这个事情就可以转化为已知起始点坐标,进行移动覆盖物的这么过程了,说白了就是让他覆盖物在两个点连成的这条线上多执行几次setPosition(BMap.Point),一次步子别迈那么大,只要保证在下次新坐标来之前到达就行了。
   那么问题又来了,这两条线上的点我怎么知道呢? 因为获取到的经纬度坐标是球面坐标,所以要先转换为平面坐标 {BMap.Pixel}= map.getMapType().getProjection().lngLatToPoint(BMap.Point);

   然后小运算下(参照路书开源文件)

  

平面设计培训,网页设计培训,美工培训,游戏开发,动画培训

 1 /* 2     *缓动效果 3     *初始坐标,目标坐标,当前的步长,总的步长 4     *@param{BMap.Pixel} initPos 初始平面坐标 5     *@p
        
		

网友评论