百度地图在合适视野范围内显示所有的点_map 所选地点全部展示-程序员宅基地

技术标签: OnMapLoadedCallback  百度地图的使用  合适范围  百度地图  所有点  

通常地图会显示出多个点,如像行驶轨迹等,往往在屏幕上一次性就全部显示出来,那要怎么设置地图的显示宽高,才能将所有的点合理的显示出来呢。

看看以下的代码实现:

 private void setMyLocation() {
        list = new ArrayList<>();
        LatLng ll = new LatLng(24.475982,
                118.093132);
        LatLng ll1 = new LatLng(24.477382,
                118.093232);
        LatLng ll2 = new LatLng(24.478382,
                118.093832);
        LatLng ll3 = new LatLng(24.487382,
                118.094232);
        LatLng ll4 = new LatLng(24.497982,
                118.099562);

        list.add(ll);
        list.add(ll1);
        list.add(ll2);
        list.add(ll3);
        list.add(ll4);

        MapStatus.Builder builder = new MapStatus.Builder();
        builder.target(ll).zoom(18.0f);
//        mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
        for (LatLng latLng : list) {
            mBaiduMap.addOverlay(new BaiduMapUtil().setMarker(latLng));
        }

        mBaiduMap.addOverlay(new BaiduMapUtil().Polyline(list));

//将所有的坐标显示出来的合理视图
        if (isFrist) {
            mBaiduMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {

                @Override
                public void onMapLoaded() {
                    isFrist=false;
                    mBaiduMap.animateMapStatus(new BaiduMapUtil().setLatLngBounds(list, mMapView));
                }
            });
        }else{
            mBaiduMap.animateMapStatus(new BaiduMapUtil().setLatLngBounds(list, mMapView));
        }

    }


以下为工具类BaiduMapUtil的具体实现

public class BaiduMapUtil {

    /**
     * 绘制Marker,地图上常见的类似气球形状的图层
     */
    public MarkerOptions setMarker(LatLng latLng) {
        return setMarker(latLng, R.drawable.icon_defult_marker);
    }


    public MarkerOptions setMarker(LatLng latLng, int drawableId) {
        MarkerOptions markerOptions = new MarkerOptions();//参数设置类
        markerOptions.position(latLng);//marker坐标位置
        markerOptions.icon(BitmapDescriptorFactory
                .fromResource(drawableId));//marker图标,可以自定义
        markerOptions.draggable(false);//是否可拖拽,默认不可拖拽
        markerOptions.anchor(0.5f, 1.0f);//设置 marker覆盖物与位置点的位置关系,默认(0.5f, 1.0f)水平居中,垂直下对齐
        markerOptions.alpha(0.8f);//marker图标透明度,0~1.0,默认为1.0
        markerOptions.animateType(MarkerOptions.MarkerAnimateType.none);//marker出现的方式,从天上掉下
        markerOptions.flat(false);//marker突变是否平贴地面
        markerOptions.zIndex(1);//index
        return markerOptions;
    }

    /**
     * 绘制折线
     */
    public PolylineOptions Polyline(List<LatLng> points) {
        PolylineOptions polylineOptions = new PolylineOptions();//参数设置类
        polylineOptions.width(10);//宽度,单位:像素
        polylineOptions.color(0xAAFF0000);//设置折线颜色
        polylineOptions.points(points);//折线顶点坐标集
        return polylineOptions;
    }

    /**
     * 多个点,在Android里面显示合理的缩放级
     */
    public MapStatusUpdate setLatLngBounds(List<LatLng> points, MapView mMapView) {
        LatLngBounds.Builder builder2 = new LatLngBounds.Builder();
        for (LatLng p : points) {
            builder2 = builder2.include(p);
        }
        LatLngBounds latlngBounds = builder2.build();
        MapStatusUpdate u = MapStatusUpdateFactory.newLatLngBounds(latlngBounds, mMapView.getWidth(), mMapView.getHeight());
        return u;
    }


}

//将所有的坐标显示出来的合理视图
        if (isFrist) {
            mBaiduMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {

                @Override
                public void onMapLoaded() {
                    isFrist=false;
                    mBaiduMap.animateMapStatus(new BaiduMapUtil().setLatLngBounds(list, mMapView));
                }
            });
        }else{
            mBaiduMap.animateMapStatus(new BaiduMapUtil().setLatLngBounds(list, mMapView));
        }
这段代码为显示合理范围的核心代码,加入是否为首次的判断,因为要在 OnMapLoadedCallback中实现是关键,否则mapview的with和height取得是0,如果在其他视觉范围内,想恢复到这个合理的范围则经过首次加载后,就不会再执行OnMapLoadedCallback方法,所以要判断是否为第一次加载的状态。




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012693479/article/details/77666781

智能推荐

安装svn(Setup-Subversion-1.7.7)认证失败的解决办法,附加注册服务_svn安装no certification authorities found-程序员宅基地

文章浏览阅读4.9k次。服务器安装Setup-Subversion-1.7.7 安装路径:D:\Subversion在D:\根目录新建SVN目录做为svn的版本库目录。接着,在D:\SVN\目录下新建一个项目bobo目录。然后,在该目录上右键,选择:TortoiseSVN -> 在此创建版本库,点击“确定”(注意:不要创建目录结构-理由:由于本人对SVN不了解,经过测试,如果创建了目录结构,那么同步到客户端的项目_svn安装no certification authorities found

基于TypeScript的Node.js框架Nest.js,可查看中文文档深入学习-程序员宅基地

文章浏览阅读3.5k次。Nest是一套基于Node.js的强大的Web框架,可帮助你轻松构建出高效的、可扩展的应用程序。它是通过结合OOP(面向对象编程)和FP(函数式编程)的最佳理念,采用现代化JavaScript,使用TypeScript构建的。Nest不仅仅只是一套框架,因为它是基于绝妙的,著名的流行库Express和Socket.io构建的(你也可以根据自己的需求选择任何其他库),所以无需等待大型社区,可以直接使..._node得nest框架中文文档

unity序列帧的实现。包括三种效果,后续再补充_unity 序列帧换装-程序员宅基地

文章浏览阅读1.5k次。效果1:从头播放到尾效果2:重复播放效果3:正放、倒放交替播放using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class XuLieZhen : MonoBehaviour{ [Header("序列帧路径")] public string Path; [Header("更换间隔")] public fl_unity 序列帧换装

Android Studio一个连接SQLite数据库的登录注册实现_android sqllite tomcat-程序员宅基地

文章浏览阅读4.7w次,点赞129次,收藏751次。声明:AS版本为:3.4;JDK版本为:1.81、先看一下项目目录:2、新建一个AS项目,创建如上图所示的目录结构,然后添加内容:(1)修改添加布局文件:activity_main.xml:<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xm..._android sqllite tomcat

mysql的扩容_MySQL的InnoDB的扩容-程序员宅基地

文章浏览阅读189次。innodb_data_home_dir这是InnoDB表的目录共用设置。如果没有在 my.cnf 进行设置,InnoDB 将使用MySQL的 datadir 目录为缺省目录。如果设定一个空字串,可以在 innodb_data_file_path 中设定绝对路径。innodb_data_file_path单独指定数据文件的路径与大小。数据文件的完整路径由 innodb_data_home_dir ..._mysql 系统表空间扩容 nnodb_force_frecovery

Xwiki使用说明书_xwiki使用教程-程序员宅基地

文章浏览阅读7.1k次。XWIKI使用说明书 2015-05-05 目录1 用户管理... 21.1 添加用户... 21.2 用户分组... 31.3 用户权限... 41.3.1 wiki管理权限... 41.3.2 空间权限_xwiki使用教程

随便推点

Android BLE 蓝牙通信库,2024年最新应届生面试销售岗位的面试问题技巧_android蓝牙通信-程序员宅基地

文章浏览阅读919次,点赞12次,收藏10次。然后根据自定义的协议,解析对应的 BeaconItem 中的 bytes,首先创建一个 BeaconParser,传入对应的 BeaconItem,然后根据协议不断读取数据, 如果协议中某个字段占 1 个字节,则调用 readByte,若占用两个字节则调用 readShort,如果要取某个字节的某个 bit 则调用 getBit。// 获取第 1 字节的第 1bit。可以在广播中携带设备的自定义数据,用于设备识别,数据广播,事件通知等,这样手机端无需连接设备就可以获取设备推送的数据。_android蓝牙通信

vue el-input表单验证禁止输入空格_element表单空格校验-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏7次。element ui 中自带的表单必填项校验输入空格时,依然能逃过验证(required: true还是可以通过),需要再 在v-model 加上.trim来禁止输入空格字符。加上之后则不能输入空格。..._element表单空格校验

PYTHON常用库简介_python常用库介绍-程序员宅基地

文章浏览阅读8.3k次,点赞6次,收藏80次。Python科学计算基础库:Numpy,Pandas,Scipy,Matplotlib1.NumPy支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,线性代数,傅里叶变换和随机数功能底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。2.PandasPandas是一个强大的基于Numpy分析结构化数据的工具集;Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Micros_python常用库介绍

Anaconda创建Pytorch虚拟环境(排坑详细)_anaconda创建pytorch环境-程序员宅基地

文章浏览阅读5.9w次,点赞150次,收藏1.4k次。利用conda指令搭建Pytorch环境,并在Pytorch环境中安装GPU版Pytorch相关包。_anaconda创建pytorch环境

Linux: 磁盘状态观察命令lsblk、blkid-程序员宅基地

文章浏览阅读955次,点赞12次,收藏32次。有时我们在磁盘规划前会想要确定一下当前系统的文件系统或磁盘分区情况。这时,就有几个命令可以供选择,通过本文,可以学习这些命令的使用。_lsblk

构造方法与方法的区别详解_构造方法和普通方法之间的区别-程序员宅基地

文章浏览阅读5.7k次,点赞11次,收藏46次。结论!!!学生类当中虽然没有构造方法 但是测试代码当中Student对象也创建完成了。是因为当类中没有任何构造方法的时候系统默认构造一个无参数的构造方法构造方法和普通方法结构的区别如下:​​​​​​​调用构造方法怎么调用呢?..._构造方法和普通方法之间的区别

推荐文章

热门文章

相关标签