標籤:android 百度地圖 軌跡 最佳化 平滑
同一資料,最佳化前後效果對比:
最佳化演算法:
public List<RoutePoint> optimizePoints(List<RoutePoint> inPoint) { int size = inPoint.size(); List<RoutePoint> outPoint; int i; if (size < 5) { return inPoint; } else { // Latitude inPoint.get(0) .setLat((3.0 * inPoint.get(0).getLat() + 2.0 * inPoint.get(1).getLat() + inPoint.get(2).getLat() - inPoint .get(4).getLat()) / 5.0); inPoint.get(1) .setLat((4.0 * inPoint.get(0).getLat() + 3.0 * inPoint.get(1).getLat() + 2 * inPoint.get(2).getLat() + inPoint.get(3).getLat()) / 10.0); inPoint.get(size - 2).setLat( (4.0 * inPoint.get(size - 1).getLat() + 3.0 * inPoint.get(size - 2).getLat() + 2 * inPoint.get(size - 3).getLat() + inPoint.get( size - 4).getLat()) / 10.0); inPoint.get(size - 1).setLat( (3.0 * inPoint.get(size - 1).getLat() + 2.0 * inPoint.get(size - 2).getLat() + inPoint.get(size - 3).getLat() - inPoint.get( size - 5).getLat()) / 5.0); // Longitude inPoint.get(0) .setLng((3.0 * inPoint.get(0).getLng() + 2.0 * inPoint.get(1).getLng() + inPoint.get(2).getLng() - inPoint .get(4).getLng()) / 5.0); inPoint.get(1) .setLng((4.0 * inPoint.get(0).getLng() + 3.0 * inPoint.get(1).getLng() + 2 * inPoint.get(2).getLng() + inPoint.get(3).getLng()) / 10.0); inPoint.get(size - 2).setLng( (4.0 * inPoint.get(size - 1).getLng() + 3.0 * inPoint.get(size - 2).getLng() + 2 * inPoint.get(size - 3).getLng() + inPoint.get( size - 4).getLng()) / 10.0); inPoint.get(size - 1).setLng( (3.0 * inPoint.get(size - 1).getLng() + 2.0 * inPoint.get(size - 2).getLng() + inPoint.get(size - 3).getLng() - inPoint.get( size - 5).getLng()) / 5.0); } return inPoint; }
Android使用百度LBS SDK(五)最佳化軌跡平滑度