日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

百度地图 sdk 使用小结(行动轨迹)

發布時間:2024/3/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百度地图 sdk 使用小结(行动轨迹) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近把之前的地圖代碼再看了一遍,想借此機會小結一番,下面是效果圖,點沒取好,湊合看吧。

這里做的是一個地圖上的行為軌跡,包含各個點的覆蓋物以及路線繪制,需要用到百度地圖定位 SDK,具體如何引入百度地圖的 SDK 就不過講了,下面給出官網說明文檔:

https://lbsyun.baidu.com/index.php?title=androidsdk

下面詳細講講具體如何使用百度地圖,直至畫出我們要的行為軌跡。

初始化設置

第一步,先在 XML 中放入地圖控件:

<com.baidu.mapapi.map.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"/>

在使用到的地方使用 Application 去初始化 SDK,也可以在 Application 中初始化

static {//需要使用全局context初始化SDKInitializer.initialize(IfireApplication.getGobalApplication());}

下面是定位的一些參數:

// 定位相關MapView mMapView; //地圖 viewBaiduMap mBaiduMap; //地圖Polyline mPolyline; //線LocationClient mLocationClient; //定位List<LatLng> latLngs = new ArrayList<>(); //位置軌跡List<BitmapDescriptor> bitmapDesList = new ArrayList<>(); //位置在地圖的覆蓋物

初始化地圖,并通過定位 SDK 獲取位置信息,這里可以獲得很多參數不多說了。

private void setupMap() {// 地圖初始化mMapView = findViewById(R.id.map);mBaiduMap = mMapView.getMap();// 開啟定位圖層mBaiduMap.setMyLocationEnabled(true);//設置定位相關initLocation();//請求軌跡數據mPresenter.load();}private LatLng nowLocation;private void initLocation() {mLocationClient = new LocationClient(getApplication());LocationClientOption option = new LocationClientOption();//定位方式參數設置option.setOpenGps(true); // 打開gpsoption.setCoorType("bd09ll"); // 設置坐標類型option.setScanSpan(1000);//周期性請求定位,1秒返回一次位置mLocationClient.setLocOption(option);//參數設置mLocationClient.registerLocationListener(new BDAbstractLocationListener() {@Overridepublic void onReceiveLocation(BDLocation location) {MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius()).direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);//給地圖設置定位數據,這樣地圖就顯示位置了nowLocation = new LatLng(location.getLatitude(), location.getLongitude());}});//開始定位mLocationClient.start();}

獲得數據后更新

獲取到數據后,轉換地址數據,繪制地圖軌跡。

private void loadDataEnd() {//轉換地圖坐標convertLatLngPosition();//繪制地圖軌跡drawMapTrajectory();}

網上說這里的地址要通過 converter 轉換,可是我發現轉換后地址不準了,看需要吧!

private void convertLatLngPosition() {//坐標點需要轉換使用 // CoordinateConverter converter = new CoordinateConverter(); // converter.from(CoordinateConverter.CoordType.COMMON);for (Record record : mData) {//緯度在前,經度在后LatLng src = new LatLng(record.getLat(), record.getLng());//converter.coord(src);//LatLng target = converter.convert();latLngs.add(src);}}

下面是繪制標記物和軌跡的代碼,東西較多

private void drawMapTrajectory() {//創建覆蓋物圖形createBitmapDescriptors();//動態更新縮放比例autoZoom();//創建覆蓋物createMarkers();//去掉縮放按鈕mMapView.showZoomControls(false);//標記點點擊mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {public boolean onMarkerClick(final Marker marker) {return true;}});//軌跡點擊mBaiduMap.setOnPolylineClickListener(new BaiduMap.OnPolylineClickListener() {@Overridepublic boolean onPolylineClick(Polyline polyline) {return false;}});//繪制軌跡線條if (latLngs.size() >= 2) {OverlayOptions ooPolyline= new PolylineOptions().width(13).color(0xAA4DDC26).points(latLngs);mPolyline = (Polyline) mBaiduMap.addOverlay(ooPolyline);mPolyline.setZIndex(3);}}

這里通過布局來創建覆蓋物圖形,包含起點、終點以及過程點,這里有一點要注意,不能再根據不設置背景圖片,不然圖片不會隨覆蓋物改變大小,具體布局按需要弄吧,問題不大。

@SuppressLint("SetTextI18n")private void createBitmapDescriptors() {for (int i = 0; i< latLngs.size(); i++) {@SuppressLint("InflateParams")View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_trajectory_marker, null);//加載自定義的布局TextView text = view.findViewById(R.id.text);ImageView icon = view.findViewById(R.id.icon);if (i == 0) {//注意時間為最新的在前面text.setTextColor(Color.parseColor("#FE4C4C"));text.setText("終點");icon.setImageResource(R.drawable.ic_trajectory_end);}else if (i == (latLngs.size() - 1)) {text.setTextColor(Color.parseColor("#62b500"));text.setText("起點");icon.setImageResource(R.drawable.ic_trajectory_start);}else {text.setTextColor(Color.parseColor("#0396E4"));text.setText(mData.get(i).getActualDate().substring(0, 5));//時:分icon.setImageResource(R.drawable.ic_trajectory_via);}//用到了這個實例化方法來把自定義布局實現到marker中。BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromView(view);bitmapDesList.add(bitmapDescriptor);}}

上面只是創建了覆蓋物的圖形,我們還要拿上面數據創建真的覆蓋物,并添加到地圖里面去

private void createMarkers() {for (int i = 0; i < bitmapDesList.size(); i++) {//針對不同位置生成不同markerBitmapDescriptor descriptor = bitmapDesList.get(i);MarkerOptions options = new MarkerOptions().position(latLngs.get(i)).icon(descriptor).zIndex(i);mBaiduMap.addOverlay(options);}}

地圖縮放問題其實百度地圖提供了解決方法,可以根據我們提供的點自動縮放。

private void autoZoom() {LatLngBounds.Builder LatLngBuilder = new LatLngBounds.Builder();for (LatLng latLng : latLngs) {LatLngBuilder.include(latLng);}MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(LatLngBuilder.build());mBaiduMap.setMapStatus(mapStatusUpdate);}

行為軌跡的繪制在上面已經有了,這里再講一下,尤其注意不能少于兩個點,不然會崩潰。

//繪制軌跡線條if (latLngs.size() >= 2) {OverlayOptions ooPolyline= new PolylineOptions().width(13).color(0xAA4DDC26).points(latLngs);mPolyline = (Polyline) mBaiduMap.addOverlay(ooPolyline);mPolyline.setZIndex(3);}

結語

我這里寫的不是很清除,但是整個流程應該是沒問題的,因為這是公司的代碼,也不太好全放出來,讀者有需要的話,按這個流程寫下來應該問題不大,如果想更加深入一點,下面我推薦一篇博客,寫的很詳細,希望有幫助。

Android百度地圖(二):百度地圖sdk顯示位置點、圖層繪制
https://www.jianshu.com/p/fdd1ba783495

end

總結

以上是生活随笔為你收集整理的百度地图 sdk 使用小结(行动轨迹)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。