最近公司不知道怎么接了一个猥亵的项目,通过手机安装软件来监控人的行动轨迹。整理下相关问题和不完善的解决方案.
软件肯定是以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启动就不会那么容易被清理到。但是实现成本有些搞。暂时只研究到这里,后面有更好的解决方式再来记录.