1. 程式人生 > >百度定位繪製軌跡

百度定位繪製軌跡

1

百度定位回撥監聽
此處注意;上次遇到個問題,在室內wifi能夠進入if語句,但室外不能夠定位,後來移動4g網路下除錯,
發現是getlocationtype沒有對應的,也就是沒有對行動網路對locationType進行處理,
當時直接在百度給對demo那直接複製對也沒想那麼多,浪費了點時間。
BDLocationListener listener = new BDLocationListener() {
        @Override
public void onReceiveLocation(BDLocation location) {//locationType “wf”代表wifi,“cl”代表基站,“ll”代表GPS,cl定位發起
if (location != null && (location.getLocType() == 161 || location.getLocType() == 66 || location.getLocType() == 61)) {
                if (location.getRadius() > 50) {//此處能過濾部分定位模式切換導致的定位偏差return;
}
                if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_BAD) {
                    gpsStatus 
= "弱"; } else if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_MID) { gpsStatus = "中"; } else if (location.getGpsAccuracyStatus() == BDLocation.GPS_ACCURACY_GOOD) { gpsStatus = "強"; }
//此處為自己業務去儲存軌跡點位到本地資料庫
                saveTrack(algorithm(location));
} } };
//百度提供定位處理方法
 private BDLocation algorithm(BDLocation location) {
        double curSpeed;
        if (locationList.isEmpty() || locationList.size() < 2) {
            TrackPointDto temp = new TrackPointDto();
temp.setLatitude(location.getLatitude());
temp.setLongitude(location.getLongitude());
temp.setCreateTime(TimeTool.getDateString(System.currentTimeMillis()));
locationList.add(temp);
} else {//與前5次軌跡點進行比較
if (locationList.size() > 5)
                locationList.removeFirst();
            double score = 0;
            for (int i = 0; i < locationList.size(); ++i) {
                LatLng lastPoint = new LatLng(locationList.get(i).getLatitude(), locationList.get(i).getLongitude());
LatLng curPoint = new LatLng(location.getLatitude(), location.getLongitude());
                double distance = DistanceUtil.getDistance(lastPoint, curPoint);
curSpeed = distance / (System.currentTimeMillis() - TimeTool.getLongTime(locationList.get(i).getCreateTime())) / 1000;
score += curSpeed * Utils.EARTH_WEIGHT[i];
}
//            if (score > 0.00000999 && score < 0.00005) { // 經驗值,開發者可根據業務自行調整,也可以不使用這種演算法
if (score > 0.00000999 && score < 0.00005) { // 經驗值,開發者可根據業務自行調整,也可以不使用這種演算法
location.setLongitude((locationList.get(locationList.size() - 1).getLongitude() + location.getLongitude()) / 2);
location.setLatitude((locationList.get(locationList.size() - 1).getLatitude() + location.getLatitude()) / 2);
}
            TrackPointDto newLocation = new TrackPointDto();
newLocation.setLatitude(location.getLatitude());
newLocation.setLongitude(location.getLongitude());
newLocation.setCreateTime(TimeTool.getDateString(System.currentTimeMillis()));
locationList.add(newLocation);
}
        return location;
}
由於我的檢視軌跡是在一個新開的activity上進行,所以要根據軌跡id查詢資料庫獲取點位進行繪製
軌跡的id生成是  開始/暫停  一個時間段內進行重新生成,以達到繪製軌跡時能夠分段;
下面是繪製軌跡的方法:
    /**
     * 畫軌跡
     */
List<LatLng> latLngList = new ArrayList<>();
MyLocationData locData;
    protected void drawMyRoute(List<LatLng> latLngList) {
        if (latLngList.size() > 1) {
            draw(latLngList);
} else if (latLngList.size() > 0) {//如果只有一個點的話進行定位
if (locData == null) {
                locData = new MyLocationData.Builder()
                        .accuracy(40.0f)
                        .direction(100).latitude(latLngList.get(0).latitude)
                        .longitude(latLngList.get(0).longitude).build();
                if (mBaiduMap != null) {
                    mBaiduMap.setMyLocationData(locData);
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(latLngList.get(0)).zoom(zoom);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
            }
        }

    }

    private MapStatusUpdate msUpdate = null;
    private OverlayOptions overlay;  //覆蓋物
private PolylineOptions polyline = null;  //路線覆蓋物
private BitmapDescriptor realtimeBitmap;
    private Overlay overlay1;
    public void draw(List<LatLng> latLngList) {
        Log.i("drawTrack___", "draw");
LatLng latLng = latLngList.get(latLngList.size() - 1);
MapStatus mapStatus = new MapStatus.Builder().target(latLng).zoom(zoom).build();
msUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);
//        LatLngBounds bounds = new LatLngBounds.Builder().include(latLng).include(latLng).build();
//        msUpdate = MapStatusUpdateFactory.newLatLngBounds(bounds);
//        if (overlay != null) {
//            mBaiduMap.clear();
//        }
if (overlay1 != null) {
            overlay1.remove();
}
        realtimeBitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);
overlay = new MarkerOptions().position(latLng).icon(realtimeBitmap).zIndex(9).draggable(true);
        if (latLngList.size() >= 2) {// && pointList.size() <= 10000
polyline = new PolylineOptions().width(15).color(Color.GREEN).points(latLngList);
}
        //新增
if (polyline != null && mBaiduMap != null) {
            overlay1 = mBaiduMap.addOverlay(polyline);
}
        //新增圖層
if (msUpdate != null && mBaiduMap != null) {
            mBaiduMap.setMapStatus(msUpdate);
}
        //新增紅色小圖片
if (overlay != null && mBaiduMap != null) {
            overlay1 = mBaiduMap.addOverlay(overlay);
}

    }



相關推薦

定位繪製軌跡

1 百度定位回撥監聽 此處注意;上次遇到個問題,在室內wifi能夠進入if語句,但室外不能夠定位,後來移動4g網路下除錯,發現是getlocationtype沒有對應的,也就是沒有對行動網路對locationType進行處理,當時直接在百度給對demo那直接複製對也

定位apI的使用步驟

步驟 list 百度 api android 5% com ongl music %E5%85%B3%E4%BA%8EaNDROID%E5%BA%94%E7%94%A8%E5%8F%AF%E7%94%A8%E5%86%85%E5%AD%98 http://music.ha

Android 鷹眼軌跡SDK(v2.1.6)

ron 監聽器 dnn info 及其 通知 鷹眼 連續 _id 閑聊 看過《鷹眼追擊》這部電影的讀者一定對“鷹眼”這臺巨無霸計算機印象深刻,如今我們能夠實現自己的鷹眼。 效果圖 本篇為百度地圖SDK第三篇博文 第一篇實現:A

為啥我定位wifi可以定位準確,但用數據流量就給我定位到非洲西海岸

gps ati 流量 cat ces idm 結果 class 數據 查了半天,說需要動態獲取權限的也有,不過我wifi時定位是正常的 結果。。。emm漏了權限啦 <!-- 這個權限用於進行網絡定位--> <uses-permission android

定位的簡單應用

百度定位的jar自己去下,地址自行解決 1 定義一個回撥介面 public interface ILocationCallback { public void callback(BDLocation locationMap); } 2定義一個工具類 p

ionic 之cordova 極光推送jpush和定位外掛結合使用之定位失效問題解決辦法

之前專案已經裝了cordova的百度定位外掛,曾經出現過定位失敗問題,那是由於專案上傳svn再checkout下來的話會丟失.so檔案。只需把.so檔案補齊就OK了。但是最近由於專案需要推送訊息功能,查了下,使用了cordova集合的極光推送jpush外掛,add了以後,就出現了我百思不得其解的bu

Android整合定位SDK實現獲取定位地址

應用場景:實現APP的網路定位功能 1.整合SDK 去百度建立應用,獲取到AK,下載定位SDK,把裡面的jar包新增到libs下。其他os檔案就放在main下新建的jniLilbs裡,如圖: 2.程式碼貼出 package com.jin.baidudemo;

使用定位SDK獲取當前位置的資訊

                1、AndroidManifext.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"   

4.08關於高德和定位的選擇

問題1描述:繪製軌跡時,雖然有getAlatitude方法,但是獲取到的高程為0,導致進行顯示軌跡要素被覆蓋 解決方案:人為的設定一個高程,比如100,保證能夠正常顯示 for (int j = 0; j < routePoints.length; j++) {

地圖 多軌跡 示例

最近專案需要接百度地圖,就研究了下熱力圖和軌跡圖。 做的過程中發現軌跡圖的資料非常少,特別是多軌跡的。現在我弄出來了就分享下多軌跡的寫法,希望大家少走彎路: <!DOCTYPE html> <html> <head> <meta n

Android定位開發之定位、高德定位、騰訊定位,三足鼎立一起為我所用!

這幾天的專案不是很緊,於是想為未來可能要做的專案做一些技術儲備。 下一個專案很有可能是定位開發,需要用到手機定位功能,於是查了查現在比較流行的第三方定位,最火的基本上就是百度定位>高德定位>騰訊定位了。 想了想不如做一個DEMO把三種定位方式混合一下試試。 Ba

定位sdk的api使用時獲取地址資訊為null的原因

我的情況是這樣的  清單檔案中加了service 加了key的值 在activity的主執行緒中使用了百度定位SDK的api 截圖如下  寫了一個類繼承了BDAbstractLocationListener類 實現了他的方法 設定了SDK的引數 但是我前一天晚上還可以顯示資料 第二天早上起來就顯示為null

定位中出現4.9E-324

在 public class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) { if(locatio

Android 定位及地圖SDK

一 、Android 百度定位SDK 1 、開發文件 1.2:配置環境: 1.2.1 :新增庫檔案 a) 在 相關下載下載最新 庫檔案。 b)使用Eclipse開發的開發者,將SO檔案的壓縮檔案解壓出來,把對應架構下的SO檔案放入開發者自己APP的對應架構下的資料夾中

定位問題

主要的log資訊 09-04 10:40:47.313 1147-1158/? I/BGCONTROL: server pass non-stopped app: Intent { cmp=com.baidu.energy/com.baidu.location.f (has

地圖SDK V3.2 和定位SDK V4.2 完成定位功能

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.example.getsmsinfo"  

android中定位、城市選擇列表,右側字母展示

好久好久沒光顧過自己空空的部落格了,做專案的時候都是逛著別人的部落格急著把功能實現,近來閒下來了總結總結。 這個城市選擇功能也是當時做專案急著實現從哪找來的框架不記得了,然後改改用到專案中來的。 非常感謝提供最初原始碼的博主,主要的區別是添加了搜尋功能、定位功能,把以前的操

地圖繪製地圖區域,並返回座標

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta nam

第二十三篇 Android通過原生Api獲取經緯度以及定位注意點

Android通過原生Api獲取經緯度: 原生定位API只能定位到經緯度,但是如果要定位具體的地址,則需要將經緯度資訊傳送到谷歌伺服器,進行反向地理位置解析,因為目前 國內無法連線谷歌伺服器,所以使用原生定位API就不合適了,而且百度定位的功能多又強,非常適合

Android定位SDK,返回error code:162 latitude:4.9E-32

今天做專案的時候,獲取程式碼後發現登入功能不好用了,原因是登入前APP會獲取經緯度,原因是經緯度返回的值不正確。研究半天發現百度地圖SDK的.so檔案未能成功載入,開啟libs檔案目錄,發現果然“armeabi”和“armeabi-v7a”資料夾下都為空。應該是不知為何,.