zoukankan      html  css  js  c++  java
  • 百度地图开发-与地图的交互功能 06

    上一篇推文,重点介绍了离线地图的使用方法,我们可以通过缓存离线地图来满足某些业务需求。接下来介绍在使用百度地图时,可以和地图有那些交互。

    从这些交互中我们可以定制自己的软件,满足各种各样不同客户的需求。

    与地图的交互功能

    根据百度地图官方教程显示,可以对地图进行控件的显示、手势控制、事件交互、方法交互、元素压盖顺序等。

    我们重点介绍比较常见的几个功能

    1、地图控件

    比如指南针默认为开启状态,可以进行关闭,其余的也都是类似。

        UiSettings mUiSetting = mBaiduMap.getUiSettings();  
       //开启指南针
       mUiSetting.setCompassEnabled(true);          
       //地图Logo的位置      
       mMapView.setLogoPosition(LogoPosition.logoPostionleftBottom);
       //比例尺   
       //通过设置enable为true或false 选择是否显示比例尺
       mMapView.showScaleControl(enable);
       //缩放按钮
       mMapView.showZoomControls(enable);
    

    可以通过mBaiduMap.getUisettings()来控制地图的一些常规属性。这个具体看官方教程就可以,介绍罗列的很清楚。

    2、地图手势

    //地图平移
    mUiSetting.setScrollGesturesEnabled(true);   
    //地图缩放
    mUiSetting.setZoomGesturesEnabled(true);     
    //地图俯视
    mUiSetting.setOverlookingGesturesEnabled(true); 
    //地图旋转
    mUiSetting.setRotateGesturesEnabled(true);    
    //禁用所有手势
     mUiSetting.setAllGesturesEnabled(false);     
     //双击地图中心点放大
     mUiSetting.setEnlargeCenterWithDoubleClickEnable(true);         
    

    上面这两个都是可以通过设置其状态对应的地图就会进行显示,很容易就能实现。

    3、地图的事件监听机制

    下面我们来看看百度地图的事件机制,关于事件机制百度地图预留的接口还是很丰富的。下来我简单对各类监听事件进行介绍。

    key验证时间监听、广播监听、地图事件监听 等很丰富,基本能满足我们日常软件对地图控件的需求。

    这里重点介绍下地图事件监听,也是日常开发中使用频率较高的。

    SDK定义了各种地图相关的事件监听,提供相应的事件监听方法,包括地图状态的改变,手势事件,地图渲染,地图截图等。

    地图单击事件监听接口

            //地图单击事件监听
            mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener(){
    
                /**
                 * 地图单击事件回调函数
                 * */
                @Override
                public void onMapClick(LatLng latLng) {
                    Toast.makeText(getApplicationContext(),"单击位置的经纬度:"+latLng.latitude,Toast.LENGTH_SHORT);
                }
    
                /**
                 * 地图内Poi单击事件回调函数
                 * */
                @Override
                public void onMapPoiClick(MapPoi mapPoi) {
    
                }
            });
    
    • 地图Marker覆盖物点击事件监听接口
            //点击覆盖物监听事件
            mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
    
                /**
                 * 地图Marker覆盖物点击事件监听函数
                 * */
                @Override
                public boolean onMarkerClick(Marker marker) {
                    //进行一些业务逻辑处理,当点击覆盖物时,比如弹出详细信息等。
                    
                    return false;
                }
            });
    

    地图截图回调接口。这个还是比较实用的,很多APP都会让实现截图功能。

            //截图功能回调
            mBaiduMap.snapshot(new BaiduMap.SnapshotReadyCallback() {
    
                @Override
                public void onSnapshotReady(Bitmap bitmap) {
                    //这里就可以得到保存图片的Bitmap格式,你只需要进行保存即可。
                    if (null!=bitmap){
                        saveBitmap("地图截图",bitmap,getApplicationContext());
                    }
                }
            });
            
         /**
         * Save Bitmap
         *
         * @param name file name
         * @param bm   picture to save
         */
         void saveBitmap(String name, Bitmap bm, Context mContext) {
            //指定我们想要存储文件的地址
            String TargetPath = mContext.getFilesDir() + "/images/";
            //判断指定文件夹的路径是否存在
            if (!fileIsExist(TargetPath)) {
                Log.d("Save Bitmap", "TargetPath isn't exist");
            } else {
                //如果指定文件夹创建成功,那么我们则需要进行图片存储操作
                File saveFile = new File(TargetPath, name);
    
                try {
                    FileOutputStream saveImgOut = new FileOutputStream(saveFile);
                    // compress - 压缩的意思
                    bm.compress(Bitmap.CompressFormat.JPEG, 80, saveImgOut);
                    //存储完成后需要清除相关的进程
                    saveImgOut.flush();
                    saveImgOut.close();
                    Log.d("Save Bitmap", "The picture is save to your phone!");
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    
        boolean fileIsExist(String fileName)
        {
            //传入指定的路径,然后判断路径是否存在
            File file=new File(fileName);
            if (file.exists())
                return  true;
            else{
                //file.mkdirs() 创建文件夹的意思
                return file.mkdirs();
            }
        }
    

    这样子就完成了地图的截图功能,很方便,也很实用。
    这里只是简单的介绍了实现了截图功能,官方教程中还有各种各样的监听事件,可以根据自己的业务需求去选择实现。

    这块不是很难,主要是前期你把整个框架搭建起来,就很容易实现一些细节性的功能点。

    今天的分享就到这里,明天将为大家带来在百度地图上绘制点、线、圈等功能操作。

    对了提醒大家一句,多看DEMO,它比官方文档教程强太多了。

    小寄语

    人生短暂,我不想去追求自己看不见的,我只想抓住我能看的见的。

    原创不易,给个关注。

    我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。

    作者:阿辉
    关注我:微信扫描下面二维码,关注后6T编程资料免费送。
    微信公众号:Andy阿辉
    写一些程序员的所思所想,希望对你有帮助。

    版权声明:本文版权归作者和博客园共有,欢迎转载,
    但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    (转)【web前端培训之前后端的配合(中)】继续昨日的故事
    ural(Timus) 1136. Parliament
    scau Josephus Problem
    ACMICPC Live Archive 6204 Poker End Games
    uva 10391 Compound Words
    ACMICPC Live Archive 3222 Joke with Turtles
    uva 10132 File Fragmentation
    uva 270 Lining Up
    【转】各种字符串哈希函数比较
    uva 10905 Children's Game
  • 原文地址:https://www.cnblogs.com/netxiaohui/p/15204371.html
Copyright © 2011-2022 走看看