• 百度地图自定义Marker


    最近写了百度地图的Demo,所以总结下遇到的问题;

    1.首先在百度地图中创建应用时用到 发布版SHA1是在Preferences下的Android下的Build中;
    2.在使用百度地图时,先要创建一个Application的类,中间引用 SDKInitializer.initialize(this)// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext;

    3.在清单文件中配置应用的权限及配置com.baidu.lbsapi.API_KEY

    4.使用时候将你用到的jar包添加上,离线包需要的添加上;

    如下是我写的例子的2个效果图:

    一共是3个小例子:定位自己,添加marker,和轨迹;

    在写的时候一共遇到2个问题:

    1.在使用定位的时候,忘了加定位的离线包,所以一直定位到大西洋,定位错误;

    2.在添加轨迹的时候,我使用模拟器的时候,一直蹦溃没有处理好,但是用真机时候又可以了。

    如下是代码下载链接:http://download.csdn.net/detail/qq_29774291/9718205

    如下是主要代码:

    package com.item.baidu;
    
    import java.util.ArrayList;
    import java.util.List;
    import com.baidu.mapapi.map.BaiduMap;
    import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
    import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
    import com.baidu.mapapi.map.BitmapDescriptor;
    import com.baidu.mapapi.map.BitmapDescriptorFactory;
    import com.baidu.mapapi.map.GroundOverlayOptions;
    import com.baidu.mapapi.map.InfoWindow;
    import com.baidu.mapapi.map.MapStatusUpdate;
    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.OverlayOptions;
    import com.baidu.mapapi.model.LatLng;
    import com.baidu.mapapi.model.LatLngBounds;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TextView;
    
    /**
     * 添加自定义的mark
     * 
     * @author Administrator
     * 
     */
    public class MyMarkActivity extends Activity {
        private MapView mMapView;
        private BaiduMap mBaiduMap;
        private List<Bean> mapBeans;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_mark);
            mMapView = (MapView)findViewById(R.id.bmapView);
            mBaiduMap = mMapView.getMap();
            MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(13.0f);
            mBaiduMap.setMapStatus(msu);
            mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
                
                @Override
                public boolean onMarkerClick(Marker marker) {
                    // TODO Auto-generated method stub
                    final Bean beans = (Bean)marker.getExtraInfo().get("BEAN");
                    View markView = View.inflate(getApplicationContext(), R.layout.item_maker, null);
                    TextView tv_id = (TextView)markView.findViewById(R.id.mark_id);
                    TextView tv_number = (TextView)markView.findViewById(R.id.mark_carnumber);
                    TextView tv_speed = (TextView)markView.findViewById(R.id.mark_speed);
                    tv_id.setText(beans.getId()  + "");
                    tv_number.setText("车  牌 号:" + beans.getNumber());
                    tv_speed.setText("当前车速:" + beans.getSpeed() + " km/h");
                    OnInfoWindowClickListener listener = null;
                    listener = new OnInfoWindowClickListener() {
                        
                        @Override
                        public void onInfoWindowClick() {
                            // TODO Auto-generated method stub
                            Intent intent = new Intent(MyMarkActivity.this,TrackActivity.class);
                            intent.putExtra("bean", beans);
                            startActivity(intent);
                            mBaiduMap.hideInfoWindow();
                        }
                    };
                    LatLng ll = marker.getPosition();
                    InfoWindow mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(markView), ll, -47, listener);
                    mBaiduMap.showInfoWindow(mInfoWindow);
                    return true;
                }
            });
           
            initData();
        }
        /**
         * 添加几个数据
         */
        BitmapDescriptor bdGround = BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);
        private void initData() {
            // TODO Auto-generated method stub
            //设置中心点
            LatLng southwest = new LatLng(39.92235, 116.380338);
            LatLng northeast = new LatLng(39.947246, 116.414977);
            LatLngBounds bounds = new LatLngBounds.Builder().include(northeast).include(southwest).build();
            OverlayOptions ooGround = new GroundOverlayOptions().positionFromBounds(bounds).image(bdGround).transparency(0.7f);
            mBaiduMap.addOverlay(ooGround);
            //添加marker
            mapBeans = new ArrayList<Bean>();
            mapBeans.add(new Bean(1, "皖111111", "111", 30.82943, 116.89586));
            mapBeans.add(new Bean(2, "皖222222", "222", 39.942821, 116.369199));
            mapBeans.add(new Bean(3, "皖333333", "333", 39.939723, 116.425541));
            mapBeans.add(new Bean(4, "皖444444", "444", 39.906965, 116.401394));
            mapBeans.add(new Bean(5, "皖555555", "555", 39.82943, 116.42586));
            mapBeans.add(new Bean(6, "皖666666", "666", 38.92943,116.89586));
            mapBeans.add(new Bean(7, "皖777777", "777", 39.92235, 116.414977));
            mapBeans.add(new Bean(8, "皖888888", "888", 39.947246, 116.89586));
            for(Bean bean : mapBeans){
                LatLng latLng = new LatLng(bean.getLatitude(), bean.getLongitude());
                Bundle bundle = new Bundle();
                bundle.putSerializable("BEAN", bean);
                View view = View.inflate(getApplicationContext(), R.layout.item_bean, null);
                TextView tView = (TextView)view.findViewById(R.id.item_bean);
                tView.setText(bean.getId() + "");
                //将View转化为Bitmap
                BitmapDescriptor descriptor = BitmapDescriptorFactory.fromView(view);
                OverlayOptions options = new MarkerOptions().position(latLng).icon(descriptor).extraInfo(bundle).zIndex(9).draggable(true);
                mBaiduMap.addOverlay(options);
            }
        }
        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            mMapView.onResume();
        }
        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            super.onPause();
            mMapView.onPause();
        }
        @Override
        protected void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            mMapView.onDestroy();
            mBaiduMap = null;
            bdGround.recycle();
        }
    }

    定位的代码

    package com.item.baidu;
    
    
    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.MapStatus;
    import com.baidu.mapapi.map.MapStatusUpdate;
    import com.baidu.mapapi.map.MapStatusUpdateFactory;
    import com.baidu.mapapi.map.MapView;
    import com.baidu.mapapi.map.MyLocationData;
    import com.baidu.mapapi.model.LatLng;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    /**
     * 定位自己
     * 
     * @author Administrator
     * 
     */
    public class MyOptionActivity extends Activity {
        private TextView tv_option;
        private MapView mMapView;
        private BaiduMap mBaiduMap;
        //定位相关
        private LocationClient mLocClient;
        private boolean isFirstLoc = true;//是否首次定位
        private MyLocationListenner myListener = new MyLocationListenner();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_option);
            tv_option = (TextView) findViewById(R.id.tv_option);
            mMapView = (MapView) findViewById(R.id.map_option);
            mBaiduMap = mMapView.getMap();
            MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(13.0f);
            mBaiduMap.setMapStatus(msu);
            
            //开启定位图层
            mBaiduMap.setMyLocationEnabled(true);
            //定位初始化
            mLocClient = new LocationClient(getApplicationContext());
            mLocClient.registerLocationListener(myListener);
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true);// 打开GPS
            option.setCoorType("bd09ll");//设置坐标类型
            option.setScanSpan(10000);//设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效    
            option.setIsNeedAddress(true);//设置地址信息,默认无地址信息
            mLocClient.setLocOption(option);
            mLocClient.start();
        }
        /**
         * 定位SDK监听函数
         */
        private class MyLocationListenner implements BDLocationListener{
    
            @Override
            public void onReceiveLocation(BDLocation location) {
                // TODO Auto-generated method stub
                // map view 销毁后不在处理新接收的位置
                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());
                    tv_option.setText(ll +"详情地点:" + location.getAddrStr() + "   城市:" +location.getCity());
                    MapStatus.Builder builder = new MapStatus.Builder();
                    builder.target(ll).zoom(18.0f);
                    mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
                }
            }
            
        }
        @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();
    
        }
    }

    轨迹

        private void initData() {
            // TODO Auto-generated method stub
            Intent intent = getIntent();
            Bean bean = (Bean)intent.getSerializableExtra("bean");
            tv_bean.setText(bean.getNumber() + "");
            initTrack();
            //设置开始的坐标为地图中心点
            mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(pointLngs.get(0)));
            //添加开始的图标
            mBaiduMap.addOverlay(new MarkerOptions().position(pointLngs.get(0))
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_start)));
            //添加结束的图标
            mBaiduMap.addOverlay(new MarkerOptions().position(pointLngs.get(pointLngs.size()-1))
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_end)));
            //描线
            mBaiduMap.addOverlay(new PolylineOptions().width(8).color(Color.rgb(0,255,0))
                    .points(pointLngs).dottedLine(true));
        }
  • 相关阅读:
    Java打jar包详解
    用户体验评价
    本周总结(13)
    本周总结(12)
    第一阶段意见评论
    本周总结(11)
    冲刺计划第十天
    冲刺计划第九天
    冲刺计划第八天
    冲刺计划第七天
  • 原文地址:https://www.cnblogs.com/wangfengdange/p/5640867.html
Copyright © 2020-2023  润新知