百度地图显示轨迹

来源:互联网 发布:僵尸新娘 配乐 知乎 编辑:程序博客网 时间:2024/04/27 18:05

一、实现方式
使用的是3.0+最新版的百度地图。实现的步骤首先是实现定位功能,之后使用百度的图层将这些点画到地图上,最后将这些点连成线。
其它各种功能官方Demo里都有!

二、实现过程
1.下载开发包
使用百度地图首先需要根据功能下载开发包。可以在这里下载:http://lbsyun.baidu.com/sdk/download,我选择的是基础地图和定位功能。
2.申请密钥
下载完成后需要申请密钥,这里要注意,当在其它电脑上编译同个程序时,这个密钥就没用了,需要重新申请密钥,因为密钥需要SHA1值,不同电脑这个值不一样!
这是我下载的项目:
这里写图片描述
3.编写代码
1)先要将密钥填到AndroidManifest.xml文件里。
2)在LocationDemo.java文件上写代码。
LocationDemo这个文件实现了定位功能,我们只需要将标记图层加上去就行了。

    /**     * 定位SDK监听函数     */    public class MyLocationListenner implements BDLocationListener {        public void onReceiveLocation(BDLocation location) {            // map view 销毁后不在处理新接收的位置            if (location == null || mMapView == null) {                return;            }            MyLocationData locData = new MyLocationData.Builder()                    .accuracy(location.getRadius())                            // 此处设置开发者获取到的方向信息,顺时针0-360                    .direction(100).latitude(location.getLatitude())                    .longitude(location.getLongitude()).build();            mBaiduMap.setMyLocationData(locData);            if (isFirstLoc) {//第一次位置                isFirstLoc = false;                LatLng ll = new LatLng(location.getLatitude(),                        location.getLongitude());                MapStatus.Builder builder = new MapStatus.Builder();                builder.target(ll).zoom(14.0f);                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));                mBaiduMap.addOverlay(getStartMarkerOptions(ll.latitude, ll.longitude));                locationFirstLat = ll.latitude;                locationFirstLng = ll.longitude;            }else{                double lat = location.getLatitude();                double lng = location.getLongitude();                Toast.makeText(LocationDemo.this, lat+";"+lng, Toast.LENGTH_SHORT).show();                if(lat != locationFirstLat && lng != locationFirstLng){//不是开始位置                    if(lat != locationLatBefore && lng != locationLngBefore){//是新位置,加到地图上                        //加点                        mBaiduMap.addOverlay(getDefaultMarkerOptions(location.getLatitude(), location.getLongitude()));                        //连线                        LatLng p1 = new LatLng(locationLatBefore, locationLngBefore);                        LatLng p2 = new LatLng(lat, lng);                        List<LatLng> points = new ArrayList<LatLng>();                        points.add(p1);                        points.add(p2);                        OverlayOptions ooPolyline1 = new PolylineOptions().width(10)                                .color(0xAAFF0000).points(points);                       mBaiduMap.addOverlay(ooPolyline1);                    }                }            }           locationLatBefore = location.getLatitude();           locationLngBefore = location.getLongitude();        }        public void onReceivePoi(BDLocation poiLocation) {        }    }

这里我们在位置回调函数里实现画点线。为了实现点的不重复绘制,做了控制,如果是新点就加入图层,并和之前点连成线。

在初始化地图的时候可以做些设置,让他每一分钟获取下地址


// 地图初始化
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
int span = 1*60*1000;//一分钟发一次定位
option.setScanSpan(span);//可选,默认0
mLocClient.setLocOption(option);
mLocClient.start();

如果需要添加其它功能,只要将其它文件的功能整合下就行了。
最后附张效果图
这里写图片描述

0 0
原创粉丝点击