【百度地圖學習-一】初始化以及TextOverlay

1、百度地圖的初始化java

  主要用到三個類:android

  一、BMapManager:使用地圖sdk前需先初始化BMapManager.BMapManager是全局的,可爲多個MapView共用,它須要地圖模塊建立前建立, 並在地圖地圖模塊銷燬後銷燬,只要還有地圖模塊在使用,BMapManager就不該該銷燬。它屬於地圖引擎管理類。api

   最好在用一個自定義的繼承於Application的類來依附Activity的生命週期,它有四個經常使用方法:網絡

  public boolean start() //開啓百度地圖API
  public boolean stop() //終止百度地圖API,調用此函數後,不會再發生回調
  public void destroy() //在程序退出前調用
  
 
public boolean init(java.lang.String strKey,MKGeneralListener listener)//其中的參數:
strKey - 申請的受權驗證碼,
 - 註冊回調事件

  
listener
package org.hjw.hellobaidu;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;

import android.app.Application;
import android.content.Context;
import android.widget.Toast;

public class MapApplication extends Application {
        /**
         * 使用地圖sdk前需先初始化BMapManager.
         * BMapManager是全局的,可爲多個MapView共用,它須要地圖模塊建立前建立,
         * 並在地圖地圖模塊銷燬後銷燬,只要還有地圖模塊在使用,BMapManager就不該該銷燬
         */
        private static MapApplication mInstance = null;
        public  boolean m_keyRight = true;
        BMapManager bMapManager = null;//地圖管理引擎
        
        public static final String mapKey = "sEtVxB4uwzTRlchScMcELXu8";

        @Override
        public void onCreate() {
            super.onCreate();
            mInstance = this;
            initMapManager(this);
        }

        private void initMapManager(Context context) {
                if(bMapManager==null){
                    bMapManager = new BMapManager(context);
                }
                if(!bMapManager.init(mapKey, new GeneralListner())){
                     Toast.makeText(MapApplication.getInstance().getApplicationContext(), 
                                "BMapManager  初始化錯誤!", Toast.LENGTH_LONG).show();
                }
        }
        
        public static MapApplication getInstance(){
            return mInstance;
        }
        static class GeneralListner implements MKGeneralListener{

            @Override
            public void onGetNetworkState(int arg0) {
                if(arg0 ==MKEvent.ERROR_NETWORK_CONNECT){
                     Toast.makeText(MapApplication.getInstance().getApplicationContext(), 
                                "網絡出錯啦!", Toast.LENGTH_LONG).show();
                }else if(arg0 ==MKEvent.ERROR_NETWORK_DATA){
                     Toast.makeText(MapApplication.getInstance().getApplicationContext(), 
                                "請輸入正確的檢索條件!", Toast.LENGTH_LONG).show();
                }
                
            }

            @Override
            public void onGetPermissionState(int iError) {
                if(iError!=0){
                    Toast.makeText(MapApplication.getInstance().getApplicationContext(), 
                            "請輸入正確Mapkey!", Toast.LENGTH_LONG).show();
                    MapApplication.getInstance().m_keyRight=false;
                }else{
                    Toast.makeText(MapApplication.getInstance().getApplicationContext(), 
                            "MapKey認證成功!", Toast.LENGTH_LONG).show();
                    MapApplication.getInstance().m_keyRight=true;
                }
        }

        }
        
        
    
}

 

   二、MapView類:它直接繼承於ViewGroup,顯示地圖的View,一個顯示地圖的視圖,當被焦點選中時,它能捕獲按鍵事件和觸摸手勢去平移和縮放地圖。app

   MapView的生命週期與Activity同步,當activity掛起時需調用MapView.onPause()。必須在setContentview後纔可使用mapView,同時也包含了對覆蓋物的管理等。

 三、MapController類:它是地圖控制器,經過mapView對象得到,同時也取得了對mapView的各類操做權限,包括縮放大小,顯示不一樣類型的圖等等。

 四、MKMapViewListener接口:地圖顯示事件監聽器。 該接口監聽地圖顯示事件,用戶須要實現該接口以處理相應事件,包含下面四個方法。

{ide

void onClickMapPoi(MapPoi mapPoiInfo)函數

點擊到地圖可點標註時會回調此接口字體

void onGetCurrentMap(Bitmap b)動畫

截圖成功後會回調此接口this

void onMapAnimationFinish()

動畫結束時會回調此消息

void onMapLoadFinish()

在圖加載完成回調

}

    void onMapMoveFinish()

    地圖移動完成時會回調此接口

重寫方法時,必須經過mapView對象註冊監聽器。

    mapView.regMapViewListener(MapApplication.getInstance().bMapManager,mkMapViewListener);// 用戶註冊地圖監聽器

 

2、文字覆蓋物的實現

  分爲如下幾步:

1. 用TextItem準備文字數據
2. 建立TextOverlay,調用 addText(TextItem) 接口添加文字.
3. 調用MapView.getOverlays().add()方法添加overlay到mapview中。
4. 調用MapView.refresh() 使Overlay生效。

實現代碼:

     TextItem textItem = new TextItem();
        textItem.fontColor = textColor1;
        //textItem.bgColor = textColor1;
        textItem.fontSize = 20;
        textItem.text = "這裏是中心廣場";
        textItem.pt = mapView.getMapCenter();
        TextOverlay textOverlay = new TextOverlay(mapView);
        textOverlay.addText(textItem);
        mapView.getOverlays().add(textOverlay);
        mapView.refresh();

  其中對於TextItem類中的fontColor和fontSize是必須賦值的,不然地圖上面會看不到的。

  下面是效果圖:

  

那個很小的」這裏是中心廣場」就是覆蓋物,所以需適量調整字體大小。其中TextItem中的fontSize和fontColor是必需要設置的,這是在百度sdk2.0以後才須要這樣,2.0以前都是直接繼承基類Overlay重寫Draw方法。

還有一點就是官方提供的Demo裏面,GeoPoint的初始化,參數分別爲緯度和經度,Demo裏面弄反了,因此可能會致使地圖顯示空白,只有小格子。這個問題糾結了很久。

相關文章
相關標籤/搜索