Android studio 百度地图SDK之地图定位与运动轨迹绘制

您所在的位置:网站首页 安卓手机怎么查询自己的轨迹 Android studio 百度地图SDK之地图定位与运动轨迹绘制

Android studio 百度地图SDK之地图定位与运动轨迹绘制

2024-06-01 08:25| 来源: 网络整理| 查看: 265

百度地图定位与运动轨迹 Android开发的前期准备地图图层显示与定位运动轨迹的简单绘制

Android开发的前期准备

Android配置在百度地图SDK官网上有详细的说明。具体可以参考官网的教程,笔者觉得官网的总结的很细,笔者初学,就不耍大刀了。 以下就是官网地址: https://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/ak

当然,按照官网上的步骤,初学会有一些小问题,稍后会在另一篇文章中展现笔者在初学遇见的问题与解决方法。

在最起初,遇见的问题,让笔者摸不着头脑,找不到错误的原因,也搜索了很多文章,都快放弃了,还好,到后面解决了。

言归正传。

地图图层显示与定位

地图SDK提供了3种预置的地图类型,包括普通地图,卫星图,空白地图。另外提供了2种常用图层实时路况图以及百度城市热力图。

可以根据自己的需求选择。笔者用的是普通地图。 上代码:

// An highlighted block public class MyMap extends AppCompatActivity { private MapView mMapView=null; LocationClient mLocationClient; BaiduMap mbaiduMap; MyLocationListener myLocationListener; LocationClientOption option; LatLng latLng; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_my_map); tv_1=findViewById(R.id.tv_mapmun); //这里是询问用户是否开启定位等权限 List permissionList = new ArrayList(); if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.READ_PHONE_STATE); } if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if(!permissionList.isEmpty()){ String[] permissions =permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(this, permissions, 1); } initLocation(); } private void initLocation(){ mMapView=findViewById(R.id.bmapView); mbaiduMap=mMapView.getMap(); ppp=new ArrayList(); mLocationClient=new LocationClient(this); if(mLocationClient != null&& !mLocationClient.isStarted()){ mLocationClient.requestLocation(); mLocationClient.start(); } option=new LocationClientOption(); myLocationListener=new MyLocationListener(); mLocationClient.registerLocationListener(myLocationListener); option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving); option.setOpenGps(true); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); option.setCoorType("bd09ll"); option.setIsNeedAddress(true); option.setNeedDeviceDirect(true); option.setScanSpan(1001); mLocationClient.setLocOption(option); mLocationClient.start(); } public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { //mapView 销毁后不在处理新接收的位置 if (location == null || mMapView == null){ return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(location.getDirection()).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); } } @Override protected void onStart() { super.onStart(); mbaiduMap.setMyLocationEnabled(true); if (mLocationClient.isStarted()) mLocationClient.start(); } @Override public void onResume() { super.onResume(); mMapView.onResume(); } @Override public void onPause() { super.onPause(); mMapView.onPause(); } @Override public void onDestroy() { mLocationClient.stop(); mbaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView=null; super.onDestroy(); mMapView.onDestroy(); } } //地图初始化 public class DemoApplication extends Application { @Override public void onCreate() { super.onCreate(); SDKInitializer.initialize(this); SDKInitializer.setCoordType(CoordType.BD09LL); } }

以上就是实现地图的全部代码,记得打开存储权限,不然不会显示图层只有空白。完成以上步骤就可以在应用上显示自己的定位。

这是实现后的图片 在这里插入图片描述

运动轨迹的简单绘制

运动轨迹实现方法用的是: 每隔一定的时间收集当前位置的信息,把多个点连起来,绘制成轨迹展现。

public void onReceiveLocation(BDLocation bdLocation) { if(bdLocation ==null||mMapView ==null){ return; } MyLocationData locData=new MyLocationData.Builder() .accuracy(bdLocation.getRadius()) .direction(bdLocation.getDirection()).latitude(bdLocation.getLatitude()) .longitude(bdLocation.getLongitude()) .build(); mbaiduMap.setMyLocationData(locData); if(frist){ frist=false; latLng = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()); MapStatus.Builder builder=new MapStatus.Builder(); builder.target(latLng).zoom(18.0f); mbaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mbaiduMap.animateMapStatus(msu); } LatLng pointsss=new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude()); if(pointsss.longitude>0&&pointsss.latitude>0) ppp.add(pointsss); if(ppp.size()>=2){ OverlayOptions mOverlay=new PolylineOptions() .width(10) .color(0xAAFF0000) .points(ppp); Overlay mPolyline=(Polyline)mbaiduMap.addOverlay(mOverlay); mPolyline.setZIndex(3); } //在日志中打印出点的位置信息,方便观察 Log.i("MyMap", " latitude:" + bdLocation.getLatitude() + " longitude:" + bdLocation.getLongitude() + ppp.size()); } }

以上就是全部的代码。

在绘制轨迹时,需要把第一个点(也就是在几内亚湾)去掉,因为系统最开始会定位到那个点,具体的原因笔者也不清楚。

希望给大家一点帮助和参考。

1

笔者初学,有很多错误,望大家指正。 ↩︎



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3