Android使用百度LBS SDK(五)优化轨迹平滑度

同一数据,优化前后效果对比:
技术分享

优化算法:

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;
    }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。