美文网首页优秀案例第三方功能的实现暂时收藏学习
Android百度地图(三):百度地图画运动轨迹及图层点击事件处

Android百度地图(三):百度地图画运动轨迹及图层点击事件处

作者: zhh_happig | 来源:发表于2017-06-28 17:21 被阅读6475次

    转载、引用请标明出处
    http://www.jianshu.com/p/2ad4c2077dfd
    本文出自zhh_happig的简书博客,谢谢

    Android百度地图(一):百度地图定位sdk 类方法参数、定位原理详细介绍
    Android百度地图(二):百度地图sdk显示位置点、图层绘制
    Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼sdk服务
    Android百度地图(五):百度地图鹰眼sdk监控进出地理围栏(区域)
    Android百度地图(六):百度地图POI检索,行政区边界、公交、线路规划查询,地理编码介绍

    上篇文章讲述了如何在地图显示位置点,这篇文章主要讲述如何在地图上画运动轨迹,以及地图图层点击事件的处理。

    很多运动类的app都有画出跑步者运动轨迹的需求,拿咕咚来说,我们看一下它的效果图:

    咕咚运动轨迹图

    本篇将要实现的效果
    1.跑步结束后,静态的画出整个运动轨迹
    2.跑步过程中,时时动态的画运动轨迹


    效果图

    如何实现:
    1.将点与点连成线,在百度地图MapView上画出线条图层;
    2.获取定位点List<LatLng>:通过百度定位sdk:LocationClient类获取,户外运动画运动轨迹,要求位置点的精度高,所以我们必须使用gps定位类型的位置结果。

    //允许使用gps定位
    mOption.setOpenGps(true);
    

    更多百度定位sdk参数详解请阅读篇头百度地图(一)文章

    一 静态画整个运动轨迹

    1.画轨迹

    //伪代码
    public void onCreate(){
      // 地图初始化
      MapView mMapView = (MapView) findViewById(R.id.bmapView);
      BaiduMap mBaiduMap = mMapView.getMap();
      // 开启定位图层
      mBaiduMap.setMyLocationEnabled(true);
      
      //获取运动后的定位点
      coordinateConvert();
    
      //设置缩放中点LatLng target,和缩放比例       
      MapStatus.Builder builder = new MapStatus.Builder();
      builder.target(target).zoom(18f);
    
      //地图设置缩放状态
      mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
      
      /**
      * 配置线段图层参数类: PolylineOptions
      * ooPolyline.width(13):线宽
      * ooPolyline.color(0xAAFF0000):线条颜色红色
      * ooPolyline.points(latLngs):List<LatLng> latLngs位置点,将相邻点与点连成线就成了轨迹了
      */
      OverlayOptions ooPolyline = new PolylineOptions().width(13).color(0xAAFF0000).points(latLngs);
    
      //在地图上画出线条图层,mPolyline:线条图层
      mPolyline = (Polyline) mBaiduMap.addOverlay(ooPolyline);
      mPolyline.setZIndex(3);
    }
    
    /**
     * 我这里是在google地图取下来的wgs84坐标集合Const.googleWGS84,模拟的运动后获取的坐标集合,
       所以需要转化成百度坐标;实际应该是将定位sdk返回的位置点加入到位置集合中,
       定位sdk需要设置返回坐标为百度坐标:mOption.setCoorType("bd09ll"),这样就直接用,不用转换了。
     */
    private void  coordinateConvert(){
      //百度坐标转化工具类CoordinateConverter 
      CoordinateConverter converter  = new CoordinateConverter(); 
      
      /**
      * 设置需要转化的坐标类型
        CoordType.COMMON:google地图、腾讯地图、高德地图所用坐标
        CoordType.GPS:设备采集的原始GPS坐标
      */
      converter.from(CoordType.COMMON);
    
      double lanSum = 0;
      double lonSum = 0;
      for (int i = 0; i < Const.googleWGS84.length; i++) {
        //"39.881970,116.456218"
        String[] ll = Const.googleWGS84[i].split(",");
        LatLng sourceLatLng = new LatLng(Double.valueOf(ll[0]), Double.valueOf(ll[1]));
        converter.coord(sourceLatLng);  //需要转化的坐标点
        LatLng desLatLng = converter.convert();  //转化成百度坐标点
        latLngs.add(desLatLng);//加入定位点集合
        lanSum += desLatLng.latitude;
        lonSum += desLatLng.longitude;
      }
      
      //我这里设置地图的缩放中心点为所有点的几何中心点
      target = new LatLng(lanSum/latLngs.size(), lonSum/latLngs.size());
    }
    

    运动轨迹效果

    轨迹图
    2.添加起始图标图层、点击图层响应事件
    //始点图层图标
    BitmapDescriptor startBD= BitmapDescriptorFactory
                .fromResource(R.drawable.ic_me_history_startpoint);
    //终点图层图标
    BitmapDescriptor finishBD= BitmapDescriptorFactory
                .fromResource(R.drawable.ic_me_history_finishpoint);
    
    //地图中显示信息窗口
    InfoWindow mInfoWindow;
    
    MarkerOptions oStart = new MarkerOptions();//地图标记类型的图层参数配置类 
    oStart.position(latLngs.get(0));//图层位置点,第一个点为起点
    oStart.icon(startBD);//设置图层图片
    oStart.zIndex(1);//设置图层Index
    //添加起点图层
    Marker mMarkerA = (Marker) (mBaiduMap.addOverlay(oStart)); 
    
    //添加终点图层
    MarkerOptions oFinish = new MarkerOptions().position(latLngs.get(latLngs.size()-1))
                                               .icon(finishBD).zIndex(2);
    Marker mMarkerB = (Marker) (mBaiduMap.addOverlay(oFinish));
    
    //设置图层点击监听回调
    mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
      public boolean onMarkerClick(final Marker marker) {
        if (marker.getZIndex() == mMarkerA.getZIndex() ) {//如果是起始点图层
          TextView textView = new TextView(getApplicationContext());
          textView.setText("起点");
          textView.setTextColor(Color.BLACK);
          textView.setGravity(Gravity.CENTER);
          textView.setBackgroundResource(R.drawable.popup);
                        
          //设置信息窗口点击回调
          OnInfoWindowClickListener listener = new OnInfoWindowClickListener() {
            public void onInfoWindowClick() {
              //这里是主线线程,可以实现自己的一些功能
              Toast.makeText(getApplicationContext(),"这里是起点", Toast.LENGTH_SHORT).show();
              mBaiduMap.hideInfoWindow();//隐藏信息窗口
            }
          };
    
          LatLng latLng = marker.getPosition();//信息窗口显示的位置点
    
          /**
          * 通过传入的 bitmap descriptor 构造一个 InfoWindow
          * bd - 展示的bitmap
            position - InfoWindow显示的位置点
            yOffset - 信息窗口会与图层图标重叠,设置Y轴偏移量可以解决
            listener - 点击监听者
    
            另外,Projection类可以将地理坐标和屏幕坐标进行相互转换。
            Point point = mBaiduMap.getProjection().toScreenLocation(latLng)是
            将地理坐标转换为屏幕上的坐标,其中point.y是地理位置点相对于MapView左上角的y轴坐标。
            这里就可以将mInfoWindow放在你指定的y轴位置了,
            如果将InfoWindow第三个参数设置为mMapView.getHeight()-point.y,
            那么mInfoWindow是不是就放着屏幕底部了呢,哈哈。注意mMapView.getHeight()的取值时机。
          */
          mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(textView), latLng, -47, listener);
          mBaiduMap.showInfoWindow(mInfoWindow);//显示信息窗口
        } else if (marker.getZIndex() == mMarkerB.getZIndex()) {//如果是终点图层
          Button button = new Button(getApplicationContext());
          button.setText("终点");
          button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
              Toast.makeText(getApplicationContext(),"这里是终点", Toast.LENGTH_SHORT).show();
              mBaiduMap.hideInfoWindow();
            }
          });
    
          LatLng latLng = marker.getPosition();
          /**
          * 通过传入的 view 构造一个 InfoWindow, 此时只是利用该view生成一个Bitmap绘制在地图中,监听事件由自己实现。
            view - 展示的 view
            position - 显示的地理位置
            yOffset - Y轴偏移量
          */
          mInfoWindow = new InfoWindow(button, latLng, -47);
          mBaiduMap.showInfoWindow(mInfoWindow);
        } 
        return true;
     }
    });
    
    //也可以给运动轨迹添加点击事件
    mBaiduMap.setOnPolylineClickListener(new BaiduMap.OnPolylineClickListener() {
      @Override
      public boolean onPolylineClick(Polyline polyline) {
        if (polyline.getZIndex() == mPolyline.getZIndex()) {
          Toast.makeText(getApplicationContext(),"点数:" + polyline.getPoints().size() + ",width:" 
                                             + polyline.getWidth(), Toast.LENGTH_SHORT).show();
        }
        return false;
      }
    });
    

    运动轨迹效果,点击图标弹出信息窗口


    点击起始图标

    点击图标弹出信息窗口弹出Toast

    弹出Toast

    到这里,运动结束后画出整个轨迹图和图层添加点击事件就介绍完了。

    二 时时动态的画运动轨迹

    时时动态画运动轨迹效果


    运动轨迹:箭头为当前位置和方向

    关键在于取点:gps刚接收到信号时返回的一些点精度不高,容易造成位置偏移,如何取点很重要。

    //伪代码
    public void onCreate() {
      mMapView = (MapView) findViewById(R.id.bmapView);
      mBaiduMap = mMapView.getMap();
      // 开启定位图层
      mBaiduMap.setMyLocationEnabled(true);
      
      /**添加地图缩放状态变化监听,当手动放大或缩小地图时,拿到缩放后的比例,然后获取到下次定位,
      *  给地图重新设置缩放比例,否则地图会重新回到默认的mCurrentZoom缩放比例
      */
      mCurrentZoom = 18;
      mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {
        @Override
        public void onMapStatusChangeStart(MapStatus arg0) {
        }
    
        @Override
        public void onMapStatusChangeFinish(MapStatus arg0) {
          mCurrentZoom = arg0.zoom;//获取手指缩放地图后的值
        }
    
        @Override
        public void onMapStatusChange(MapStatus arg0) {
        }
      });
    
      //设置定位图标类型为跟随模式
      mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(
                    com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.FOLLOWING, true, null));
    
      // 定位初始化
      mLocClient = new LocationClient(this);
      mLocClient.registerLocationListener(myListener);
      LocationClientOption option = new LocationClientOption();
      option.setLocationMode(LocationMode.Device_Sensors);//只接受gps位置,需要在室外定位。
      option.setOpenGps(true); // 允许gps定位
      option.setCoorType("bd09ll"); // 设置坐标类型
      option.setScanSpan(1000);//一秒一个gps
      mLocClient.setLocOption(option);
    }
    
    //开始获取位置点
    public void onStart() {
      start.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View v) {
            if (mLocClient != null && !mLocClient.isStarted()) {
                mLocClient.start();
            }
        }
      });
    }
    
    //位置回调,取点很重要
    public class MyLocationListenner implements BDLocationListener {
    
        @Override
        public void onReceiveLocation(final BDLocation location) {
    
            if (location == null || mMapView == null) {
                return;
            }
    
            //注意:这里只要gps点,需要在室外定
            if (location.getLocType() == BDLocation.TypeGpsLocation) {
                    
                if (isFirstLoc) {//首次定位
                    /**第一个点很重要,决定了轨迹的效果,gps刚接收到信号时返回的一些点精度不高,
                    * 尽量选一个精度相对较高的起始点,这个过程大概从gps刚接收到信号后5-10秒就可以完成,不影响效果。
                    * 注:gps接收卫星信号少则十几秒钟,多则几分钟,
                    * 如果长时间手机收不到gps,退出,重启手机再试,这是硬件的原因
                    */
                    LatLng ll = null;
    
                    //选一个精度相对较高的起始点
                    ll = getMostAccuracyLocation(location);
                    if(ll == null){
                        return;
                    }
                    isFirstLoc = false;
                    points.add(ll);//加入集合
                    last = ll;
                        
                    //显示当前定位点,缩放地图
                    locateAndZoom(location, ll);
                        
                    //标记起点图层位置
                    MarkerOptions oStart = new MarkerOptions();// 地图标记覆盖物参数配置类
                    oStart.position(points.get(0));// 覆盖物位置点,第一个点为起点
                    oStart.icon(startBD);// 设置覆盖物图片
                    mBaiduMap.addOverlay(oStart); // 在地图上添加此图层
                    return;//画轨迹最少得2个点,首地定位到这里就可以返回了
                }
    
                //从第二个点开始
                LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
    
                /*
                * sdk回调gps位置的频率是1秒1个,位置点太近动态画在图上不是很明显,
                  可以设置点之间距离大于为5米才添加到集合中
                */
               if (DistanceUtil.getDistance(last, ll) < 5) {
                    return;
                }
    
                points.add(ll);//如果要运动完成后画整个轨迹,位置点都在这个集合中
    
                last = ll;
                    
                //显示当前定位点,缩放地图
                locateAndZoom(location, ll);
                    
                //清除上一次轨迹,避免重叠绘画
                mMapView.getMap().clear();
    
                //起始点图层也会被清除,重新绘画
                MarkerOptions oStart = new MarkerOptions();
                oStart.position(points.get(0));
                oStart.icon(startBD);
                mBaiduMap.addOverlay(oStart);
    
                //将points集合中的点绘制轨迹线条图层,显示在地图上
                OverlayOptions ooPolyline = new PolylineOptions().width(13).color(0xAAFF0000).points(points);
                mPolyline = (Polyline) mBaiduMap.addOverlay(ooPolyline);
            }
        }
    }
    
    /**
    * 首次定位很重要,选一个精度相对较高的起始点
    * 注意:如果一直显示gps信号弱,说明过滤的标准过高了,
      你可以将location.getRadius()>25中的过滤半径调大,比如>50,
      并且将连续5个点之间的距离DistanceUtil.getDistance(last, ll ) > 5也调大一点,比如>10,
      这里不是固定死的,你可以根据你的需求调整。
    */
    private LatLng getMostAccuracyLocation(final BDLocation location){
            
        if (location.getRadius()>25) {//gps位置精度大于25米的点直接弃用,
            return null;
        }
            
        LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
            
        if (DistanceUtil.getDistance(last, ll ) > 5) {
            last = ll;
            points.clear();//有两点位置大于5,重新来过
            return null;
        }
        points.add(ll);
        last = ll;
        //有5个连续的点之间的距离小于5,认为gps已稳定,以最新的点为起始点
        if(points.size() >= 5){
            points.clear();
            return ll;
        }
        return null;
    }
    
    //显示当前定位点,缩放地图
    private void locateAndZoom(BDLocation location, LatLng ll) {
        /**
        * 记录当前经纬度,当位置不变,手机转动,取得方向传感器的方向,
          给地图重新设置位置参数,在跟随模式下可使地图箭头随手机转动而转动
        */
        mCurrentLat = location.getLatitude();
        mCurrentLon = location.getLongitude();
        locData = new MyLocationData.Builder().accuracy(0)//去掉精度圈
                //此mCurrentDirection为自己获取到的手机传感器方向信息,顺时针0-360
                .direction(mCurrentDirection).latitude(location.getLatitude())
                .longitude(location.getLongitude()).build();
        mBaiduMap.setMyLocationData(locData);//显示当前定位位置点
        
        //给地图设置缩放中心点,和缩放比例值
        builder = new MapStatus.Builder();
        builder.target(ll).zoom(mCurrentZoom);
        mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
    }
    
    //运动结束增加终点图标
    finish.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View v) {
    
            if (mLocClient != null && mLocClient.isStarted()) {
                mLocClient.stop();//停止定位
    
                if(points.size() <= 0){
                    return;
                }
                        
                //运动结束记得标记终点图标
                MarkerOptions oFinish = new MarkerOptions();
                oFinish.position(points.get(points.size() - 1));
                oFinish.icon(finishBD);
                mBaiduMap.addOverlay(oFinish); 
            }
        }
    });
    

    退出记得释放资源

    //伪代码
    protected void onDestroy() {
      // 退出时销毁定位
      mLocClient.unRegisterLocationListener(myListener);
      mLocClient.stop();
      // 关闭定位图层
      mBaiduMap.setMyLocationEnabled(false);
      mMapView.getMap().clear();
      mMapView.onDestroy();
      mMapView = null;
      startBD.recycle();
      finishBD.recycle();
    }
    

    注:我们画运动轨迹要求定位sdk返回的位置精度很高,轨迹的效果才会好,因而必须接受gps位置点。但是gps位置的在刚开始收到信号时精度不高,会出现位置漂移的情况,所以要选取一个精度较好的点。在建筑物、桥梁、大树、隧道里面,gps信号不好,精度不高,所以在开阔地带,运动轨迹效果更好。

    当运动轨迹效果不佳时,可以利用百度鹰眼sdk采集位置数据,然后查询纠偏后轨迹,这样效果会好很多,详情请阅读:
    Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼sdk服务

    更多百度地图、定位sdk参数详解请阅读篇头百度地图(一、二)文章

    如果各位看官觉得文章不错,别忘了点个喜欢。
    源码下载地址 https://github.com/zhuhaoHappig/BaiduMapApi

    以上文章内容,是本人工作中的总结,供大家参考,有误的地方还请指正。

    相关文章

      网友评论

      • 457a45d7dff8:老哥写得真好,能不能把源码发给我呀,邮箱1152656738@qq.com,谢谢
      • zzj丶:大神 遇到一个问题 不知道其他人有没有遇到,我手机是荣耀九 安卓8.0 轨迹在手机亮屏的情况下是没有问题的 但是息屏后轨迹就不运动了 有没有遇到的 有解决办法吗
        zzj丶:找到问题了 华为8.0对后台活动做了限制,在手机管家中 启动管理里 把应用的后台活动打开 就没问题了
      • c7cc2b7a580f:老哥,写的真不错, 能不能麻烦你把源码发到我的邮箱 278653059@qq.com 万分感谢
      • da547cb312dd:老哥 能不能麻烦你把源码发到我的邮箱 741163103@qq.com 万分感谢
      • 丶小小思佳:大神 可以加个Q? 有问题想请教一下494921159
      • 金麟_789f:文章写的不错,关注你了,老哥,我去你的Git上下载源码,感觉好像少了什么东西,出错,老哥,方便的话,能把源码和APK文件发我一份么,邮箱279283855@qq.com,谢谢老哥,交个朋友
      • 1c63df731bad:画出轨迹之后,怎么查看历史轨迹啊
      • x耶律:你好 我现在的需求是展示用户的历史行程轨迹列表,1.展示的时候请求每个行程的轨迹点,再绘制出来(这样同时绘制这么多轨迹会不会卡顿)2.在每个行程结束后把行程轨迹绘制出来,把轨迹图上传服务器,展示的时候就拉去轨迹图 请问这两种方法哪种比较可行。麻烦帮忙解答一下:blush:
      • 谁铃浪子心_ea9f:您好,我在房间行走,走的距离也蛮远的了,怎么看不到我行驶的路线呢?
        谁铃浪子心_ea9f:@zhh_happig 刚才去室外走一圈,轨迹还是没画出来,但是查询历史轨迹时地图上面又画出来了,是怎么回事呢
        zhh_happig:@谁铃浪子心_ea9f 这个demo只能在室外,接收到gps的时候可以画轨迹路线
      • 4ec330b1b1ca:你好 我这边下载不了源代码 能发到我邮箱吗 谢谢 sdxtxtm@163.com
        zhh_happig:@梦落他乡 已发
      • e429714edc8b:大神,问下怎么计算出起点和终点之间的距离,能加下我的QQ吗278488304
        e429714edc8b:@zhh_happig 大神p1,p2 在代码中哪取呢 我有点懵
        e429714edc8b:@zhh_happig 怎么写呢 我是新手有点不太会啊
        zhh_happig://计算p1、p2两点之间的直线距离,单位:米
        DistanceUtil. getDistance(p1, p2);你遍历你的点集合,把相邻两点之间的距离累加起来
      • f4c353cbef24:是我在绘制实时轨迹的时候,上传的经纬度不正确吗?
      • f4c353cbef24:你好为什么我把实时轨迹的经纬度上传后台,然后再获取后台的经纬度画静态的轨迹的时候,画出来的二个轨迹不一致呢?
      • 明朗__:您好 我这边有这样一个需求 就是用户在查看历史轨迹的时候 将地图无限放大后 轨迹会超出屏幕外 这时如果用户查看运动轨迹动画效果的话 会有一部分轨迹因为在屏幕外面而看不到 ,这边是想的办法是让运动轨迹动画效果 一直保持在屏幕中心点 这样地图就跟随轨迹运动,现在的问题是不知道百度地图 是否有这方面API支持
        明朗__:@zhh_happig 谢谢 我试试看看
        zhh_happig:这个是将整个轨迹线显示在地图中心,保证所有点都会被看到,你试试这个,我不知道行不行
        zhh_happig:@明朗__ LatLngBounds.Builder builder = new LatLngBounds.Builder();for (LatLng latLng : poins) {
        builder.include(latLng);
        }
        mBaiduMap.setMapStatus(MapStatusUpdateFactory
        .newLatLngBounds(builder.build()));
      • 2819abdbf29e:大神,window下载后编译没问题,运行时出现
        Invalid VCS root mapping
        The directory D:\Users\mcg\AndroidStudioProjects\BaiduMapApi-master is registered as a Git root, but no Git repositories were found there.

        请问怎么解决?
        2819abdbf29e: @zhh_happig 安装了git后再下载么
        2819abdbf29e:@zhh_happig 是在pc上安装git么,没有安装
        zhh_happig:@alfred_mu 你安装git了吗
      • 1fddff70f4ff:我现在是在百度地图上规划路径,点击路径划线上的某一点,想拿到点击这一点的地理坐标,但是发现绘制的轨迹把此地图的点击事件给拦截了,只能获取轨迹上的所有坐标点,想问大神我有什么办法可以解决这个问题吗,急求,跪谢
        1fddff70f4ff:@zhh_happig 是的有什么好的解决办法吗?
        zhh_happig:@Zkiller setOnMapClickListener响应地图的点击事件,轨迹应该不会拦截地图的点击事件吧,除非你设置了setOnPolylineClickListener,这样地图的点击事件就会被路径拦截
        1fddff70f4ff:急需大神解答
      • xtn:大神 您好 我这个提示一直GPS信号搜索中 过一会又提示信号弱是怎么回事 gps我是开启的!
        xtn:@zhh_happig 谢谢 我试了还是一样 还有一个问题就是
        //起点图标
        // BitmapDescriptor startBD = BitmapDescriptorFactory.fromResource(R.drawable.ic_me_history_startpoint);
        //终点图标
        // BitmapDescriptor finishBD = BitmapDescriptorFactory.fromResource(R.drawable.ic_me_history_finishpoint);要把这两句注释了才能运行起来 不注释的话直接闪退 可不可运行起来就定位到我现在的为位置
        zhh_happig:我把起始点过滤了一下,精度大于25米的都弃用了,连续5个点距离小于5米才显示位置,不然就一直显示信号弱,你可以把这两个值调大一点试试
        zhh_happig:提示一直GPS信号搜索中表示你的手机gps正在搜索卫星,这个需要一点时间。提示信号弱是我写的逻辑造成的,你可以把源码里面的getMostAccuracyLocation这个方法里面的location.getRadius()>25,25调成50,DistanceUtil.getDistance(last, ll ) > 5,5调成20,试试
      • 池塘细雨:楼主能够限制地图的移动范围吗?我只想让用户限制在特定的区域范围内。
        zhh_happig:在OnTraceListener监听器中的onPushCallback()里PushMessage.getFenceAlarmPushInfo().getMonitoredAction()可以知道进或出,MonitoredAction.enter :进入围栏,exit出围栏
        zhh_happig:用户出了这个围栏,你再把他定位到围栏里面,我文章篇头百度地图(四)有介绍百度鹰眼sdk的用法的,你可以参考一下
        zhh_happig:行政区围栏:支持通过传入行政区名称,创建以行政区边界为界的围栏,将根据轨迹判断终端是否进出围栏,并实时推送报警。http://lbsyun.baidu.com/index.php?title=android-yingyan/guide/geo-fencing,你这个能不能满足你的要求。
      • d01c7cc11c37:可以给个源码和apk,让我回去研究下,可以不,楼主1092741288@qq.com
        d01c7cc11c37:好的,谢谢
        zhh_happig: @Jackhua 文章片头有源码地址,可以在那下载
      • 像新人一样出发:源码网址好像打不开
        zhh_happig:@像新人一样出发 好的,明天发你
        像新人一样出发: @zhh_happig 我这里确实打不开,最近也在学导航这方面的知识,我把我邮箱给你了1033249919@qq.com 谢谢了(^~^)
        zhh_happig:我这边是可以打开的,你检查网络再试试。如果需要源码,留个邮箱,我明天可以发给你

      本文标题:Android百度地图(三):百度地图画运动轨迹及图层点击事件处

      本文链接:https://www.haomeiwen.com/subject/gibccxtx.html