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;
    }
时间: 2024-10-22 21:47:39

Android使用百度LBS SDK(五)优化轨迹平滑度的相关文章

Android使用百度LBS SDK(二)

上篇:Android使用百度LBS SDK(实现了百度地图的基本使用,记录轨迹,优化轨迹平滑度,轨迹查看与截图分享.) 今天再总结下测距和测速的使用: 计算轨迹起始点直线距离和路线距离 代码: // 直线距离 double linearDistance = DistanceUtil.getDistance(llStart, llEnd); // 轨迹距离 double routeDistance = 0.0; for (int i = 0; i < points.size() - 1; i++)

Android使用百度LBS SDK(一)显示地图MapView

类似百度应用引擎,使用百度的LBS服务,首先我们在百度开放服务平台创建一个应用,如下图: 进入应用详情,然后点击"LBS服务",设置应用: 数字签名的获取方式,可以在Eclipse(ADT 22)中查看,Window->Preferences->Android->Build,SHA1 fingerprint就是我们需要的: Android SDK安全码组成:数字签名+;+包名. 接着下载LBS Android SDK,然后按照百度官方文档的方法进行操作: 第一步:在工

Android使用百度LBS SDK(二)实现定位

昨天初步接触了百度的LBS SDK,让应用可以通过MapView显示地图,今天在昨天的代码基础上,实现一下定位功能: 首先看一下效果图吧: 左下角的按钮可以切换模式,分为三种: 普通(LocationMode.NORMAL). 跟随(LocationMode.FOLLOWING). 罗盘(LocationMode.COMPASS),相信用过百度地图的同学对这几个模式不陌生吧. 下面是代码: 分别声明一个MapView和BaiduMap: private MapView mMapView; pri

Android使用百度LBS SDK(四)记录和显示行走轨迹

记录轨迹思路 用Service获取经纬度,onCreate中开始采集经纬度点,保存到ArrayList 每隔5秒取样一次,若经纬度未发生变化,丢弃该次取样 在onDestroy中,将ArrayList转成JSON格式,然后存储到SDCard中 显示轨迹思路 读取目录下所有轨迹文件,并生成ListView 在OnItemClick中将文件名称通过intent.putExtra传递给显示轨迹的Activity 根据文件名将对应的JSON内容转成ArrayList 然后将以上ArrayList的点集依

Android使用百度LBS SDK(六)截取轨迹地图并分享

@@ -1,14 +1,24 @@ package com.zms.baidulbs; +import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.List;

Android使用百度定位SDK 方法及错误处理

之前我的项目中的位置定位使用的是基站方法,使用的Google提供的API,但是前天中午突然就不返回数据了,到网上搜了一下才知道,Google的接 口不提供服务了,基于时间紧迫用了百度现有的SDK,但是在使用过程中第一次获取位置总是空值,经过多次实验终于成功.当然,如果需要精确的位置,你可以 再加上位置偏移算法.我的应用对这个要求不高,就没做,一搜一大把,就不多说了. 下面这段话来自 百度地图API>定位SDK 百度地图定位SDK免费对外开放,无需申请key.在使用百度定位SDK前,希望先阅读百度

xamarin.android 绑定百度地图SDK遇到的问题

在 xamarin.android 绑定项目中,绑定 百度地图的LBS地图SDK,参考 https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-a-jar/ 设置好后,编译,  然后提示错误,其中一个错误 是 意思就是说转换 出来的CS 代码中,有重复的 类型. 理论上来说,转换的 CS 代码 是不应该出现重复代码的,有重复,意味这 jar有重复代码. 然后查看 百度地

Android 导入百度地图SDK 详细步骤

今天交大家咋么来接入百度地图的SDK,步骤其实和百度官网上的开发指南一样,写下来做做总结. 1. 注册百度开发者账号,直接到官网注册就行,如果没有注册,你在获取秘钥的时候系统会提醒你注册.百度的LBS的首页网址是: http://developer.baidu.com/map/index.php?title=%E9%A6%96%E9%A1%B5 2. 有了百度开发者账户后就可以去申请要开发的APP,由于百度SDK需要和App绑定,在创建APP的时候需要提供android秘钥和package包名,

Android 使用百度导航SDK 2.0小结

效果: 使用百度导航SDK,首先需要获取的信息有: 1.起始位置的经纬度,地名 2.终点的经纬度,地名 3.起始点经纬度所使用的坐标系类型(CoordinateType ) 参数如下: private void routeplanToNavi(CoordinateType coType, double startLatitude, double startLongitude, String startName, double endLatitude, double endLongitude, S