Android百度地图:只显示屏幕范围内的marker

之前在关于百度地图(四):点聚合及只显示屏幕范围内的marker这篇文章中写了只显示屏幕范围内的点,当时的操作是这样的:

if (llr.latitude < lat && lat < ll.latitude && ll.longitude < lng && lng < llr.longitude) {
        infos.add(info);
  }

由于当时是禁用了地图旋转,前几天需要开启旋转,在测试的时候发现,当旋转地图到一定角度(手机屏幕左上角的纬度低于右下角的纬度)的时候,那么marker是不会在这个范围内的。 
那么如何解决这个问题呢? 
这里写图片描述 
如图,当地图的北面指针旋转到指向这样一个角度的时候,左下角的纬度是要比右上角的纬度低的,那么上面那个判断就不能用了。 
这边我用了一个简单点,但也许不是太准的方法,就是取出四个点的所有经纬度,取最大与最小的经纬度,用最大与最小的经度得到一个区域,再最大与最小的纬度之间也得到一个区域,两个区域的重叠部分就是我要显示的marker。但是这个范围也是不准确的,因为下图: 
这里写图片描述 
其实花了绿线的区域,这部分是我们不想要的。所以其实这里感兴趣的可以去计算一下,把这一部分减掉。 
好了,上我的代码:

 

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics outMetrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(outMetrics);
        int width = outMetrics.widthPixels;
        int height = outMetrics.heightPixels;
//        Log.i("屏幕宽度和高度", width + "," + height);
        //1.左上
        Point pt = new Point();
        pt.x = 0;
        pt.y = 0;
        final LatLng ll = mBaiduMap.getProjection().fromScreenLocation(pt);
        //2.右上
        Point pttr = new Point();
        pttr.x = width;
        pttr.y = 0;
        final LatLng lltf = mBaiduMap.getProjection().fromScreenLocation(pttr);
        //3.左下
        Point ptbl = new Point();
        ptbl.x = 0;
        ptbl.y = height;
        final LatLng llbl = mBaiduMap.getProjection().fromScreenLocation(ptbl);
        //4.右下
        Point ptr = new Point();
        ptr.x = width;
        ptr.y = height;
        final LatLng llr = mBaiduMap.getProjection().fromScreenLocation(ptr);
        /**
         * 获取屏幕内范围:1.左上角,2右上角,3左下角,4右下角
         */
        double[] lats = new double[]{ll.latitude, lltf.latitude, llbl.latitude, llr.latitude};
        double[] lngs = new double[]{ll.longitude, lltf.longitude, llbl.longitude, llr.longitude};
        //排序
        Arrays.sort(lats);
        Arrays.sort(lngs);
        //最大经纬度与最小经纬度
        double latMax = lats[3];
        double latMin = lats[0];
        double lngMax = lngs[3];
        double lngMin = lngs[0];

那么这个时候,只要用你的marker的经纬度去判断就ok了

if ((latMin<lat&&lat<latMax)&&(lngMin<lng&&lng<lngMax)){
       /**
        * 这里就是屏幕范围内了 
        */             
   }

转载自:https://blog.csdn.net/qq_35693043/article/details/79083764

coremark是一种常用的CPU性能评分工具,可以用来衡量处理器的性能水平。RP2040是英国树莓派基金会最新发布的微控制器芯片,广受欢迎。那么在coremark测试,RP2040的排行如何呢? 据测试结果显示,RP2040在coremark测试表现出色。它的得分通常能达到几千分甚至上万分的水平,这意味着它具备相当强大的处理能力。与其他常用的微控制器芯片相比,RP2040在性能上居于较高的位置。特别是考虑到其低功耗和经济实惠的价格,RP2040在性价比方面非常出色。 RP2040采用了ARM Cortex-M0+内核,拥有双核心和高达133MHz的主频,是一款高性能的微控制器芯片。相比其他同类型的微控制器芯片,RP2040的性能在同价位范围内是非常突出的。它能够处理更加复杂的任务,并且支持丰富的外设接口,如多个UART、SPI和I2C接口,以及多个PWM和ADC通道等。 在实际应用,RP2040的高性能和丰富的外设接口使其适用于各种场景。无论是物联网设备、工业自动化、智能家居还是嵌入式系统等领域,RP2040都能够提供出色的性能和稳定的运行。同时,RP2040还得到了广大开发者的支持和认可,有着强大的社区生态和相应的开发资源。 综上所述,RP2040在coremark测试的排行较高,具备出色的性能和丰富的外设接口。它是一款值得推荐的微控制器芯片,可适用于各种应用场景,并提供出色的性价比。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值