百度地圖開發-與地圖的互動功能 06

—阿輝發表於2021-08-30

上一篇推文,重點介紹了離線地圖的使用方法,我們可以通過快取離線地圖來滿足某些業務需求。接下來介紹在使用百度地圖時,可以和地圖有那些互動。

從這些互動中我們可以定製自己的軟體,滿足各種各樣不同客戶的需求。

與地圖的互動功能

根據百度地圖官方教程顯示,可以對地圖進行控制元件的顯示、手勢控制、事件互動、方法互動、元素壓蓋順序等。

我們重點介紹比較常見的幾個功能

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,它比官方文件教程強太多了。

小寄語

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

原創不易,給個關注。

我是阿輝,感謝您的閱讀,如果對你有幫助,麻煩點贊、轉發 謝謝。

相關文章