百度地圖簡單的使用,百度地圖簡單使用

來源:互聯網
上載者:User

百度地圖簡單的使用,百度地圖簡單使用

最近寫了百度地圖的Demo,所以總結下遇到的問題;

1.使用百度地圖,先看下官方的例子。要再資訊清單檔中配置KEY,如果用到定位要註冊serviece:android:name="com.baidu.location.f"

2.要建立application類並在資訊清單檔中配置;不然一直報 java.lang.IllegalStateException: you have not supplyed the global app context info from SDKInitializer.initialize(Context) function. SDKInitializer.initialize(this)即可;
3.還有注意MapView的生命週期,記得及時建立和銷毀。

4.在定位當前時,擷取當前的地名使用option.setIsNeedAddress(true);//設定地址資訊;原先的option.setAddrType("all")到期不過也能獲得資訊。

5.在使用Marker時,marker.getExtraInfo()一直報null 指標的問題;報空是因為在加入Marker是沒有將bundle賦予到每個Marker,當然會得null了;

需要在OverlayOptions中添加extraInfo(bundle)欄位。

6.

如下是我demo的 

                       

先定位自己,再在地圖上展示6個Marker,點擊每個Marker時展示出當前Marker的資訊

如下是主要代碼

package com.it.hello.activity.baidu;import java.util.ArrayList;import java.util.List;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;import com.baidu.mapapi.map.BaiduMap.OnMyLocationClickListener;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.InfoWindow;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.Marker;import com.baidu.mapapi.map.MarkerOptions;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;import com.baidu.mapapi.map.MarkerOptions.MarkerAnimateType;import com.baidu.mapapi.map.OverlayOptions;import com.baidu.mapapi.model.LatLng;import com.it.hello.R;import com.it.hello.activity.entity.CarInfo;import com.it.hello.activity.util.DensityUtils;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;/** * 百度Marker的問題 * @author zh * */public class MyBaidu extends Activity{    private MapView mMapView;    private BaiduMap mBaiduMap;    /**清除Marker*/    private Button btn_clean;    /**地圖上Marker的資訊*/    private List<CarInfo> carInfos = new ArrayList<CarInfo>();    /**定位相關*/    private LocationClient mLocClient;    /**定位當前的位置名稱*/    private String nowPosition = "";    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_baidu);        mMapView = (MapView)findViewById(R.id.baidu_mapView);        btn_clean =(Button)findViewById(R.id.baidu_clean);        mBaiduMap = mMapView.getMap();//        MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(12.0f);//        mBaiduMap.setMapStatus(msu);                // 開啟定位元影像層        mBaiduMap.setMyLocationEnabled(true);        // 定位初始化        mLocClient = new LocationClient(this);        mLocClient.registerLocationListener(new MyLocationListenner());        LocationClientOption option = new LocationClientOption();        option.setOpenGps(true);// 開啟GPS        option.setCoorType("bd09ll");//設定座標類型                option.setScanSpan(1000);//設定掃描間隔,單位是毫秒 當<1000(1s)時,定時定位無效                //option.setAddrType("all");        option.setIsNeedAddress(true);//設定地址資訊,預設無地址資訊        mLocClient.setLocOption(option);        mLocClient.start();        /**         * 地圖定位元影像標點擊事件監聽介面         */        mBaiduMap.setOnMyLocationClickListener(new OnMyLocationClickListener() {                        @Override            public boolean onMyLocationClick() {                // TODO Auto-generated method stub                //多士當前位置資訊                DensityUtils.showToast(MyBaidu.this,  nowPosition) ;                return false;            }        });                initOverlay();        /**         * Marker點擊事件的監聽介面         */        mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {                        @Override            public boolean onMarkerClick(Marker marker) {                // TODO Auto-generated method stub                TextView textView = new TextView(getApplicationContext());                textView.setPadding(15, 10, 15, 30);                textView.setBackgroundResource(R.drawable.popup);                OnInfoWindowClickListener listener = null;                System.out.println(marker.getExtraInfo()  + "  d  " + marker);                final CarInfo carInfo = (CarInfo)marker.getExtraInfo().get("STATION");                textView.setText("車牌號:" +carInfo.getLicenseNumber());                textView.setTextColor(getResources().getColor(R.color.action_bar_bg_select));                listener = new OnInfoWindowClickListener() {                                        @Override                    public void onInfoWindowClick() {                        // TODO Auto-generated method stub                        System.out.println(carInfo  + carInfo.getLatitude() + "  " + carInfo.getLongitude());                        mBaiduMap.hideInfoWindow();                    }                };                LatLng ll = marker.getPosition();                InfoWindow mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(textView), ll, -47, listener);                mBaiduMap.showInfoWindow(mInfoWindow);                return true;            }        });        /**         * 清除Marker,單擊事件的介面         */        btn_clean.setOnClickListener(new View.OnClickListener() {                        @Override            public void onClick(View arg0) {                // TODO Auto-generated method stub                mBaiduMap.clear();                carInfos.clear();            }        });    }        /**     * 定位SDK監聽函數     *      */    boolean isFirstLoc = true; // 是否首次定位    private class MyLocationListenner implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            // TODO Auto-generated method stub            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());                Log.d("jiejie", "Latitude" + location.getLatitude()                        + "   Longitude" + location.getLongitude() + "  location"                        + location.getCity() + location.getAddrStr() );                //tv_location.setText(ll  + "詳細地點:" +location.getAddrStr() + "    城市:"+location.getCity());                nowPosition = location.getAddrStr();                MapStatus.Builder builder = new MapStatus.Builder();                builder.target(ll).zoom(12.0f);                mBaiduMap.animateMapStatus(MapStatusUpdateFactory                        .newMapStatus(builder.build()));            }        }    }    /**     * 添加mark     */    private BitmapDescriptor bdA = BitmapDescriptorFactory            .fromResource(R.drawable.icon_marka);    private Bundle bundle;    private void initOverlay() {        // TODO Auto-generated method stub        //載入的資料        carInfos.add(new CarInfo("無警示", "1", "39.939723", "116.425541", "皖A111", "9208000", "11", "Acc關閉空車"));        carInfos.add(new CarInfo("無警示", "2", "39.942821", "116.369199", "皖A222", "9208000", "12", "Acc關閉空車"));        carInfos.add(new CarInfo("無警示", "3", "31.843025", "117.275366", "皖N333", "9208000", "13", "ACC關閉空車"));        carInfos.add(new CarInfo("無警示", "4", "31.803025", "117.255366", "皖N444", "9208000", "14", "ACC關閉空車"));        carInfos.add(new CarInfo("有警示", "5", "30.82943", "116.89586", "皖WA555", "9208000", "15", "Acc不關閉"));        carInfos.add(new CarInfo("有警示", "6", "31.81943", "117.134623", "皖WA666", "9208000", "16", "Acc不關閉"));        for(CarInfo info : carInfos){            LatLng llLng = new LatLng(Float.parseFloat(info.getLatitude()),Float.parseFloat(info.getLongitude()));            bundle = new Bundle();            bundle.putSerializable("STATION", info);//            MarkerOptions ooA = new MarkerOptions().position(llLng).icon(bdA).extraInfo(bundle)//                    .zIndex(9).draggable(true);//            ooA.animateType(MarkerAnimateType.grow);            OverlayOptions options = new MarkerOptions().position(llLng).icon(bdA).extraInfo(bundle)                    .zIndex(9).title(info.getLicenseNumber()).draggable(true).animateType(MarkerAnimateType.grow);                        mBaiduMap.addOverlay(options);        }    }    @Override    protected void onPause() {        // MapView的生命週期與Activity同步,當activity掛起時需調用MapView.onPause()        mMapView.onPause();        super.onPause();    }    @Override    protected void onResume() {        // MapView的生命週期與Activity同步,當activity恢複時需調用MapView.onResume()        mMapView.onResume();        super.onResume();    }    @Override    protected void onDestroy() {        // 退出時銷毀定位        mLocClient.stop();        // 關閉定位元影像層        mBaiduMap.setMyLocationEnabled(false);        // MapView的生命週期與Activity同步,當activity銷毀時需調用MapView.destroy()        mMapView.onDestroy();        mMapView = null;        super.onDestroy();        // 回收 bitmap 資源        bdA.recycle();    }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.