Flutter App 照片显示Android定位信息

2021-08-02  本文已影响0人  长若执念

背景交代

最近写Flutter App 时候,有一个功能是拍照片,然后照片上显示经纬度和大概地址(例如北京市海淀区)。而我们都App定位允许使用网络定位和GPS定位同时使用的。 Android定位服务.jpeg

高德定位服务包含GPS和网络定位(Wi-Fi和基站定位)两种能力。定位SDK将GPS、网络定位能力进行了封装,以三种定位模式对外开放,SDK默认选择使用高精度定位模式

出现问题描述:

近期我司其他人员在外地使用App时候出现了缩略图有经纬度信息:如下图


定位缩略图展示.jpeg

但是大图详情照片上有经纬度数据,但是经纬度数据的小数点位数过长,无定位地址信息:如下图


大图详情展示原生定位.jpeg

问题分析:

问题解决继续排除原因:
结合实际起情况:猜测可能是网不好,于是忍受着臭气决定去厕所,那个网络奇差的地方进行测试:
1-到厕所经过多次测试,基本上每次都能展示出大图详情中的经纬度和地址信息,偶发出现的是没有经纬度没有地址,那就是没有定位出来,也不是那种有经纬度,无地址。 所以不行 ❌
2 - 然后想起来坐车过程中乘坐地铁信号也不好,于是手动增加Android高德其他参数:进行测试

将原先

//经度
map.put("longitude", aMapLocation.getLongitude());
//纬度
map.put("latitude", aMapLocation.getLatitude());

增加测试参数,修改为:

//经度
map.put("longitude", aMapLocation.getLongitude()+"+"+aMapLocation.getSpeed()+"");
//纬度
map.put("latitude", aMapLocation.getLatitude()+"+Gps"+aMapLocation.getGpsAccuracyStatus()+"+"+aMapLocation.getLocationType()+"");

在乘坐地铁过程中,正常手机能上网的时候显示书这样:


手机有网GPS未用.jpg 手机有网GPS未用_延用上次结果.jpg
各位注意到没有:
aMapLocation.getGpsAccuracyStatus()   显示 -1; //GPS定位状态-1,未启用
aMapLocation.getLocationType()   显示6 ,或者4,有时候也会显示2(2未截图);
//说明
//aMapLocation.getLocationType()定位类型 响应码 6, 是 "基站定位结果".  具体是“纯粹依赖移动、联通、电信等移动网络定位,定位精度在500米-5000米之间。”
//aMapLocation.getLocationType() 定位类型 响应码 4, 是 “缓存定位结果” 具体是“返回一段时间前设备在同样的位置缓存下来的网络定位结果”
//aMapLocation.getLocationType() 定位类型 响应码 2, 是 “前次定位结果” 网络定位请求低于1秒、或两次定位之间设备位置变化非常小时返回,设备位移通过传感器感知。”
//此时的经纬度小数点都是6位小数点,也是我们业务所需要的,是正常显示的。
//且aMapLocation.getSpeed() 显示速度是0,说明GPS未启用

👆上面和👇下面定位类型相应码的链接 Android定位SDK定位类型对照表 响应码的说明:

遇到涵洞或者长距离相对荒芜地区时候,此时拍照就会出现:
启用GPS定位_地址未显示.jpg 启用GPS定位_定位地址展示.jpg
各位注意到没有:
aMapLocation.getGpsAccuracyStatus()   显示 1; //GPS定位状态1,已启用
aMapLocation.getLocationType()   显示1;
//aMapLocation.getLocationType() 定位类型 响应码 1, 是 "GPS定位结果".  具体是“通过设备GPS定位模块返回的定位结果,精度较高,在10米-100米左右”
//此时的经纬度小数点都是超过6位小数点。
//且aMapLocation.getSpeed() 是显示速度的,说明GPS已经启用

这里说明一下为啥GPS启用后,一次显示定位的地址信息,一次不显示呢?

 通过测试现象:
1> 我在拍照后立刻确定返回图片信息,此时是不显示地址的。
2> 我在拍照后,稍等一会儿,然后确定返回图片信息,此时是显示地址的。
   透过现象看本质,进行分析:
1> 因为此时大前提是用GPS定位,GPS定位精准,但是耗时,立刻返回此时GPS优先返回最基础的经纬度信息,其他信息如地址还没有获取,那么此时的图片是获取不到,所以没有展示地址。
2> 因为此时大前提是用GPS定位,GPS定位精准,但是耗时,立刻返回此时GPS优先返回最基础的经纬度信息,稍等一会儿后,其他信息如地址也已经获取,那么此时确定返回,图片获取到地址信息的,所以有展示地址。

关于GPS耗时到说明,给大家看一下:
Android 定位SDK的基站定位、WiFi定位和GPS定位,它们有什么特性?

GPS定位耗时.jpg
为什么Android 定位SDK获取不到定位的速度[getSpeed()]、角度[getBearing()]、海拔[getAltitude()] ?
GPS获取速度_角度_海拔.jpg
上一篇下一篇

猜你喜欢

热点阅读