一、工具

     1.经纬度坐标拾取:百度坐标拾取系统。

     2.常用坐标系投影系统

        墨卡托:百度墨卡托投影坐标java

     3.CAD

         1)选中一条线,输入ls,可以列出坐标,一般不会全部显示,需要enter继续。

         2 ) 图层的灵活使用

二、确定绘图比例尺

      1.将地区实际区域在CAD上画出矩形边界后,计算出1m的实际距离在屏幕上是多少个像素。

      2.比例尺决定统一大小的屏幕能显示多大实际区域。

三、设备上绘图

      1.自定义View技术,建立车道图层和车辆图层自定义View。

      2.坐标转换

         经纬度->墨卡托平面坐标->Android绘图坐标

      3.绘制车道、车辆图

         纠偏:由于实际的数据有小数点,但是android绘图的API的参数是int类型,会用精度损失。如果车道图层移动的次数越多,误差积累就会越来越大。

         纠偏的理论:将精度损失的位移积累起来,如果绝对值超过1,就做+-1的处理。

    Pair
 androidCenterCarPoint = LaneLayerDataHolder.getInstance().getAndroidPoint(getMeasuredHeight(), centerCarPoint);    Pair
 androidLastWindowCenterPoint = LaneLayerDataHolder.getInstance().getAndroidPoint(getMeasuredHeight(), LaneLayerDataHolder.getInstance().getLastWindowCenterPoint());        //!!!!!!!!!!!!!!!!注意下面计算增量,会有精度损失。需要处理,否则地图偏移不对。!!!!!!!!!!!!!!!!!!!!!    int detX = (int) Math.round(androidCenterCarPoint.first - androidLastWindowCenterPoint.first);    int detY = (int) Math.round(androidCenterCarPoint.second - androidLastWindowCenterPoint.second);    Log.d(TAG, "updateMapPositionByCenterCar: detX = " + detX + ",detY = " + detY);    offsetLeftAndRight(-detX);    offsetTopAndBottom(-detY);        //纠偏    addUpDetX+=(androidCenterCarPoint.first - androidLastWindowCenterPoint.first-detX);    addUpDetY+=(androidCenterCarPoint.second - androidLastWindowCenterPoint.second-detY);    //Android-X方向    if(Math.abs(addUpDetX) >=1){        offsetLeftAndRight(addUpDetX > 0 ? -1 : 1);        if(addUpDetX > 0){            addUpDetX = addUpDetX -1;        }else{            addUpDetX = addUpDetX+1;        }    }    //Android-Y方向    if(Math.abs(addUpDetY) >=1){        offsetLeftAndRight(addUpDetY > 0 ? -1 : 1);        if(addUpDetY > 0){            addUpDetY = addUpDetY -1;        }else{            addUpDetY = addUpDetY + 1;        }    }

      4.车道以车辆为中心联动

         通过计算偏移量,将车道图层layout或者offsetLeftAndRight

      5.