定位研究

最近公司不知道怎么接了一个猥亵的项目,通过手机安装软件来监控人的行动轨迹。整理下相关问题和不完善的解决方案.

软件肯定是以service 形式运行,界面关闭+ 开机运行。然后动态发送用户坐标到制定的服务器。当然,需要用户的设备信息做唯一标志。下面罗列各点问题。

定位工具:

http://developer.baidu.com/map/index.php?title=android-locsdk

注:研究早了几天,不知道是人品不好还是太好。研究的时候,需要的都没有。折腾了几天,突然发现又有了。主要离线定位和gprs定位不稳定。新版本6.0.5本身已经是启动服务版本了,所以不用通过编写service 等进行定时任务和触发.

Android如何保持程序一直运行:

http://abc20899.iteye.com/blog/1045537

深入了解 Android 系統 Wi-Fi 網路自動休眠機制運作方式:

http://mobileai.net/2013/06/17/android-wi-fi-sleep/

坐标数据需要进行特殊过滤:

61 : GPS定位结果,GPS定位成功。

62 : 无法获取有效定位依据,定位失败,请检查运营商网络或者wifi网络是否正常开启,尝试重新请求定位。

63 : 网络异常,没有成功向服务器发起请求,请确认当前测试手机网络是否通畅,尝试重新请求定位。

65 : 定位缓存的结果。

66 : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。

67 : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果。

68 : 网络连接失败时,查找本地离线定位时对应的返回结果。

161: 网络定位结果,网络定位定位成功。

162: 请求串密文解析失败。

167: 服务端定位失败,请您检查是否禁用获取位置信息权限,尝试重新请求定位。

502: key参数错误,请按照说明文档重新申请KEY。

505: key不存在或者非法,请按照说明文档重新申请KEY。

601: key服务被开发者自己禁用,请按照说明文档重新申请KEY。

602: key mcode不匹配,您的ak配置过程中安全码设置有问题,请确保:sha1正确,“;”分号是英文状态;且包名是您当前运行应用的包名,请按照说明文档重新申请KEY。

501~700:key验证失败,请按照说明文档重新申请KEY。

/**
*求两个已知经纬度之间的距离,单位为米
*@param lng1,lng2 经度
*@param lat1,lat2 纬度
*@return float 距离,单位米
**/
function getdistance($lng1,$lat1,$lng2,$lat2)//根据经纬度计算距离
{
    //将角度转为狐度 
    $radLat1=deg2rad($lat1);
    $radLat2=deg2rad($lat2);
    $radLng1=deg2rad($lng1);
    $radLng2=deg2rad($lng2);
    $a=$radLat1-$radLat2;//两纬度之差,纬度<90
    $b=$radLng1-$radLng2;//两经度之差纬度<180
    $s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000;
    return $s;
}

需要将除了gps 定位返回的坐标进行特殊识别。比如,相隔两点坐标,如果第一个为网络定位,离线定位等可能缓存的坐标。判断时间范围是否在30秒内,距离是否超过300米。如果是。则试为缓存,跳过.

gps 定位慢:

http://blog.csdn.net/u013227819/article/details/19494205

后台管理:

百度地图js显示行动路线时,点少于20个可以考虑行走路线 BMap.WalkingRoute  进行处理。超过这个。在搜索路线时,本身就比较。卡,其它软件产品则通过画线的形式,这边使用 Polyline 进行线条绘制,上百个点绘制无压力,秒出。

补绘制线条箭头:http://blog.csdn.net/baidulbs/article/details/8571961

修复线条箭头bug版本:http://www.bubuko.com/infodetail-802725.html

离线考虑:

离线的情况下,星历等,包括基站,wifi 数据等都有问题。定位本身只能依靠gps。同时可以考虑惯性导航做辅助。不过惯性也只能做普通辅助,毕竟各种影响也不少。需要将坐标保存到本地数据库中,然后等网络通的情况下,将坐标上传到服务器.

总结:

同类型跑酷软件,大都也是通过百度定位sdk获取数据。毕竟基站数据wifi数据,大公司是比较全的。不过我觉得如果不是谷歌被日,会有更好的解决方案。不过终究只是通过先有功能进行处理,线程被杀还是挺容易的,从c启动就不会那么容易被清理到。但是实现成本有些搞。暂时只研究到这里,后面有更好的解决方式再来记录.

发表评论

电子邮件地址不会被公开。 必填项已用*标注