解决Android端微信浏览器每次调用百度地图API都会弹出允许位置信息弹窗问题

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

不知道大家有没有遇见过,开发微信公众号的时候,需要使用到当前的位置信息跟某一个地址的位置信息计算出这两点之间的距离,这个时候呢,无疑百度的API是比较好用的,比如说哈,有一个应用场景是这样的,数据库里面只存了地址信息,没有存对应的经纬度信息,这个时候呢,百度地图的API有给我们提供了一个叫做正逆地理编码的API,可以很方便的让我们根据地址信息解析出它的经纬度信息,然后拿到当前的定位信息,这样就可以计算出这两个地方他们之间的距离了,然后呢,本来以为这样的解决方式是很完美的,然后在系统浏览器上运行也没有任何的问题,但是呢,偏偏在Android端的微信浏览器(IOS的微信浏览器不会有这个问题)上就出现了问题,原因是什么呢?

经过调试我发现,微信浏览器每次点返回键都会刷新我们的页面,然后它也没有帮我们记住已经允许过获取位置信息这个权限了,所以它会再次向我们请求权限,这个就很烦了

接下来重点来了,解决办法其实很简单,微信浏览器不帮我们记住已经允许过权限了,那我们就自己写代码(前端可以用js的sessionStorage,后台可以用session)记住我们已经允许过权限了,于是自然就会想到使用session把我们的定位信息存起来,但是每次定位都去服务器交互的话感觉比较麻烦,所以我选择了sessionStorage来记住我们的定位信息,于是就有了下面的代码

<script type="text/javascript" charset="utf-8">

       // 四舍五入保留2位小数(若第二位小数为0,则保留一位小数)
       function keepTwoDecimal(num) {
           var result = parseFloat(num);
           if (isNaN(result)) {
               alert('传递参数错误,请检查!');
               return false;
           }
           result = Math.round(num * 100) / 100;
           return result;
       }

       // 计算房源到当前位置的距离,id是定位后显示位置距离的span的id
       function calcDistance(lng,lat,id) {

           // 调用百度地图API
           var map = new BMap.Map("allmap");
           // 初始化地图,设置城市和地图级别
           map.centerAndZoom("兴文",12);

           if (sessionStorage.getItem('currentLocPoint') == null){

               // 创建百度地图定位控件
               var geolocation = new BMap.Geolocation();
               geolocation.getCurrentPosition(function(r){
                   if(this.getStatus() == BMAP_STATUS_SUCCESS){
                       // 创建点坐标B--当前位置
                       var pointB = new BMap.Point(r.point.lng,r.point.lat);
                       // 存储起来的当前位置信息对象
                       var currentLocPoint = {
                           clng:r.point.lng,
                           clat:r.point.lat
                       };
                       // 将当前位置转为json信息存储在sessionStorage中,避免多次请求,同时解决多次询问获取位置信息的bug
                       sessionStorage.setItem('currentLocPoint',JSON.stringify(currentLocPoint));//这里不能直接写pointB因为sessionStorage里面只能存放字符串
                       // 创建点坐标A--房源位置
                       var pointA = new BMap.Point(lng,lat);
                       // 获取两点距离,保留小数点后两位
                       $(id).append(keepTwoDecimal((map.getDistance(pointA,pointB)).toFixed(2)/1000)+'km');
                   } else {
                       alert('定位失败');
                   }
               },{enableHighAccuracy: true});

           } else{

               // 从sessionStorage中取出当前位置点信息
               var p = sessionStorage.getItem('currentLocPoint');
               var pointB = new BMap.Point(JSON.parse(p).clng,JSON.parse(p).clat);
               // 创建点坐标A--房源位置
               var pointA = new BMap.Point(lng,lat);
               // 获取两点距离,保留小数点后两位
               $(id).append(keepTwoDecimal((map.getDistance(pointA,pointB)).toFixed(2)/1000)+'km');

           }
       }
</script>

测试一下,问题果然得到了完美的解决

附上效果图

 

展开阅读全文

Webbrowser调用百度地图API问题

05-18

我们近期在做一个CS端的GIS跟踪系统,需要有跟地图交互。rn目前用到的做法是,在Winform中使用WebBrowser控件,然后在WebBrowser控件中跟前台写的HTML做交互,HTML里面大部分都是手写的百度地图JS代码。但是现在发现有几个瓶颈,很难解决,希望各位有经验的大神支支招,救命一把。[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/15.gif][/img]rnrn1. 使用Webbrowser时间久了内存就会急剧上升,而且我们是要求实时刷新地图的,所以这就更要了亲命了。最厉害的情况是平均每秒增加1M内存,用不了多长时间机器就卡的死翘翘了。找了很多国内国外的资料,都没有给出很好的解决方法,最好的方法就是定时重启应用程序,但是这个举措对我们而讲很难接受。另一个折中的方案就是使用SetProcessWorkingSetSize,但是这个也是治标不治本的东西,并且还有可能衍生出更多的问题。当然,内存上升的这么厉害,跟下面这条应该有直接的关系。rnrn2. 因为要在地图上画线,所以要从后台数据库读取一坨儿的坐标数据,大概每条路线几千条坐标的样子,当然,路线长度不一,坐标数量肯定也不一样。将读取到的数据要想办法扔到前台去,然后再画线。rn 目前的做法是:rn A:在HTML页上放置hidden隐藏控件,用来存储坐标数据rn B:在后台将数据转换成JSON,赋值到前台的hiddenrn [code=csharp]String strLines = JavaScriptCommon.ConvertSerialize(dtLines);rn webMap.SetWebElementValueById("hid_Lines", strLines);[/code]rn C:然后执行前台的JS代码,将线画出来rn [code=csharp] webMap.Document.InvokeScript("ClearTaskLines");rn webMap.Document.InvokeScript("DrawTaskLines");[/code]rn 但是,现在由于坐标数据量太大,在调试过程中很明显的能发现在赋值到前台hidden控件时,花费了很长时间,而且导致内存急剧上升。不知道有木有更好的方法rnrn希望有做过的大师指点,感激不尽! 论坛

没有更多推荐了,返回首页