Android 程序开发——百度地图的使用(二) 基础地图

分为 普通地图、卫星图、空白地图、交通图、热力图、地图控制、标注覆盖物、划线、文字、弹出框、待续。。。

mMapView = (MapView) findViewById(R.id.bmapView);  
mBaiduMap = mMapView.getMap();  

@1普通地图

//普通地图  
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);





@2卫星地图

//卫星地图  
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); 





@3空白地图

//空白地图, 基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);




@4实时交通图

mMapView = (MapView) findViewById(R.id.bmapView);  
mBaiduMap = mMapView.getMap();  
//开启交通图   
mBaiduMap.setTrafficEnabled(true);


@5城市热力图

mMapView = (MapView) findViewById(R.id.bmapView);  
mBaiduMap = mMapView.getMap();  
//开启交通图   
mBaiduMap.setBaiduHeatMapEnabled(true);


@6地图控制及手势

地图Logo

  • 默认在左下角显示,不可以移除。

通过mMapView.setLogoPosition(LogoPosition.logoPostionleftBottom);方法,使用枚举类型控制显示的位置,共支持6个显示位置(左下,中下,右下,左上,中上,右上)。

  • 地图Logo不允许遮挡,可通过mBaiduMap.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);方法可以设置地图边界区域,来避免UI遮挡。

其中参数paddingLeft、paddingTop、paddingRight、paddingBottom参数表示距离屏幕边框的左、上、右、下边距的距离,单位为屏幕坐标的像素密度。

指南针

指南针默认为开启状态,可以关闭显示 。

比例尺

比例尺默认为开启状态,可以关闭显示。同时支持设置MaxZoomLevel和minZoomLevel,可通过mMapView.getMapLevel获取当前地图级别下比例尺所表示的距离大小。

地图手势

地图平移

控制是否启用或禁用平移的功能,默认开启。如果启用,则用户可以平移地图

地图缩放

控制是否启用或禁用缩放手势,默认开启。如果启用,用户可以双指点击或缩放地图视图。

地图俯视(3D)

控制是否启用或禁用俯视(3D)功能,默认开启。如果启用,则用户可使用双指 向下或向上滑动到俯视图。

地图旋转

控制是否启用或禁用地图旋转功能,默认开启。如果启用,则用户可使用双指 旋转来旋转地图。

禁止所有手势

控制是否一并禁止所有手势,默认关闭。如果启用,所有手势都将被禁用。



@7标注覆盖物 以及弹出框


比较完美的添加方式,请跳转http://blog.csdn.net/treasureqian/article/details/67638773点击打开链接

新建一个Marker标记

//定义Maker坐标点
        final LatLng point = new LatLng(lat, lon);
        //始终保证当前位置是屏幕的正中间
        MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(point);
        map.setMapStatus(update);
        BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_red_flag);
        OverlayOptions option = new MarkerOptions()
                .position(point)
                .icon(bitmap)
                .zIndex(9)
                .draggable(true);
        map.addOverlay(option);
Marker的点击事件以及弹出框

 //Mark点击事件
        map.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(final Marker marker) {
                marker_latitude = marker.getPosition().latitude;
                marker_longitude = marker.getPosition().longitude;
                //创建InfoWindow展示的view
                View inflate = LayoutInflater.from(getApplicationContext()).inflate(R.layout.user_map_infowindow, null);

                TextView ac_join = (TextView) inflate.findViewById(R.id.user_map_marker_activity_join);

                ac_join.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        startActivity(new Intent(UserMapActivity.this, UserOrienteeringDescActivity.class));
                    }
                });

                //定义用于显示该InfoWindow的坐标点
                LatLng pt = new LatLng(marker_latitude, marker_longitude);
                InfoWindow mInfoWindow = new InfoWindow(inflate, pt, -80);
                map.showInfoWindow(mInfoWindow);
                return false;
            }
        });


Marker的拖拽

//调用BaiduMap对象的setOnMarkerDragListener方法设置marker拖拽的监听
mBaiduMap.setOnMarkerDragListener(new OnMarkerDragListener() {
    public void onMarkerDrag(Marker marker) {
        //拖拽中
    }
    public void onMarkerDragEnd(Marker marker) {
        //拖拽结束
    }
    public void onMarkerDragStart(Marker marker) {
        //开始拖拽
    }
});

Marker的动画

 // 通过marker的icons设置一组图片,再通过period设置多少帧刷新一次图片资源
        ArrayList<BitmapDescriptor> giflist = new ArrayList<BitmapDescriptor>();
        giflist.add(bdA);
        giflist.add(bdB);
        giflist.add(bdC);
        OverlayOptions ooD = new MarkerOptions().position(point).icons(giflist)
                .zIndex(0).period(10);
        map.addOverlay(ooD);

Marker出现的动画

 BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_red_flag);
        MarkerOptions option = new MarkerOptions()
                .position(point)
                .icon(bitmap)
                .zIndex(9)
                .draggable(true);
        option.animateType(MarkerOptions.MarkerAnimateType.grow);
        map.addOverlay(option);
option.animateType(MarkerOptions.MarkerAnimateType.grow);//生长动画

option.animateType(MarkerOptions.MarkerAnimateType.drop);//从天而降动画

Marker设置透明度

MarkerOptions ooA = new MarkerOptions().position(llD).icons(giflist)
                .zIndex(0).period(10).alpha(0.5);
mBaiduMap.addOverlay(ooA);

Marker点聚合功能(百度SDK未提供直接的方法,但是开发包里有,需要自己合成,具体参考代码下方提供的博客,借鉴的)

// 初始化点聚合管理类
ClusterManager mClusterManager = new ClusterManager<>(this, mBaiduMap);
// 向点聚合管理类中添加Marker实例
LatLng llA = new LatLng(39.963175, 116.400244);
List<MyItem> items = new ArrayList<>();
items.add(new MyItem(llA));
mClusterManager.addItems(items);


参考博客:http://blog.csdn.net/u010635353/article/details/52386097


@8  划线

1.画实线(只需要确认两个点即可)

public void drawLines(){    
   
double startlats=39.960299;  
double startlongs=116.418642;  
double latline=9.968263;  
double lngline=116.439914;  
LatLng p1 = new LatLng(startlats, startlongs);  
LatLng p2 = new LatLng(latline, lngline);  
List<LatLng> points = new ArrayList<LatLng>();  
points.add(p1);  
points.add(p2);  
OverlayOptions ooPolyline = new PolylineOptions().width(10).color(0xAAFF0000).points(points);  
mBaiduMap.addOverlay(ooPolyline);  
 } 


2.画虚线(实际上不断的划线,)

//线段绘制
    public void drawLines() {
        double destination_latitude = 39.915168;
        double destination_longitude = 116.403875;
        double sub_latitude = destination_latitude - latitude;
        double sub_longitude = destination_longitude - longitude;

        point_list = new ArrayList<>();
        int j = 0;
        for (int i = 0; i < 20; i++) {
            p1 = new LatLng(latitude + sub_latitude * j / 40, longitude + sub_longitude * j / 40);
            p2 = new LatLng(latitude + sub_latitude * (j + 1) / 40, longitude + sub_longitude * (j + 1) / 40);
            point_list.clear();
            point_list.add(p1);
            point_list.add(p2);
            ooPolyline = new PolylineOptions().width(10).color(0xAAFF0000).points(point_list);
            map.addOverlay(ooPolyline);
            j = j + 2;
        }
    }

//线段绘制
    public void drawLines() {
        double destination_latitude = 39.915168;
        double destination_longitude = 116.403875;
        point_list = new ArrayList<>();
        p1 = new LatLng(latitude, longitude);
        p2 = new LatLng(destination_latitude, destination_longitude);
        point_list.add(p1);
        point_list.add(p2);
        ooPolyline = new PolylineOptions().dottedLine(true).width(8).color(0xAA666666).points(point_list);
        map.addOverlay(ooPolyline);
    }

@9文字

//定义文字所显示的坐标点  
LatLng llText = new LatLng(39.86923, 116.397428);  
//构建文字Option对象,用于在地图上添加文字  
OverlayOptions textOption = new TextOptions()  
    .bgColor(0xAAFFFF00)  
    .fontSize(24)  
    .fontColor(0xFFFF00FF)  
    .text("Hello World")  
    .rotate(-30)  
    .position(llText);  
//在地图上添加该文字对象并显示  
mBaiduMap.addOverlay(textOption);

 


未完待续。。。。。





  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值