一、工具
1.经纬度坐标拾取:百度坐标拾取系统。
2.常用坐标系投影系统
墨卡托:百度墨卡托投影坐标java
3.CAD
1)选中一条线,输入ls,可以列出坐标,一般不会全部显示,需要enter继续。
2 ) 图层的灵活使用
二、确定绘图比例尺
1.将地区实际区域在CAD上画出矩形边界后,计算出1m的实际距离在屏幕上是多少个像素。
2.比例尺决定统一大小的屏幕能显示多大实际区域。
三、设备上绘图
1.自定义View技术,建立车道图层和车辆图层自定义View。
2.坐标转换
经纬度->墨卡托平面坐标->Android绘图坐标
3.绘制车道、车辆图
纠偏:由于实际的数据有小数点,但是android绘图的API的参数是int类型,会用精度损失。如果车道图层移动的次数越多,误差积累就会越来越大。
纠偏的理论:将精度损失的位移积累起来,如果绝对值超过1,就做+-1的处理。
PairandroidCenterCarPoint = 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.