定位研究

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

软件肯定是以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启动就不会那么容易被清理到。但是实现成本有些搞。暂时只研究到这里,后面有更好的解决方式再来记录.

【转】Android学习指南

http://www.apkbus.com/android-830-1-1.html

整理了一下这本《Android学习指南》的目录 


目录
第一讲:Android开发环境的搭建
第二讲:Android系统构架分析和应用程序目录结构分析
第三讲:Android模拟器的使用
第四讲:Activity入门指南
第五讲:用户界面 View(一)
第六讲:用户界面 View(二)
第七讲:用户界面 View(三)
第八讲:Intent入门指南
第九讲:用户界面 View(四)
第十讲:用户界面 View(五)
第十一讲:用户界面 View(六)
第十二讲:用户界面 View(七)
第十三讲:用户界面 View(八)
第十四讲:Service入门指南
第十五讲:SQLite入门指南
第十六讲:菜单 Android Menu
第十七讲:对话框 Android Dialog
第十八讲:Android SharedPreferences和File
第十九讲:Android Notification的使用入门
第二十讲:Content Provider 使用入门
第二十一讲:Broadcast Receiver 使用入门
第二十二讲:AIDL和远程Service调用
第二十三讲:Drawable使用入门
第二十四讲:Android动画入门(一)
第二十五讲:Android动画入门(二)
第二十六讲:Android中的GPS应用入门

第二十八讲:Android多媒体(Media)入门
音乐播放、视频播放、声音录制,窈窈录音
第三十讲:URLConnection和HttpClient使用入门
读取Google天气预报信息
解析Google天气预报信息
Style, Theme
自定义音乐播放器界面
火箭发射倒计时
Hello,App Widget! ,音乐播放器小部件
窈窈照相机
窈窈录音器
第三十八讲:Android手写输入和手势编程入门
未写
第三十九讲:Android语音识别编程入门
未写
第四十讲:Android Wifi编程入门
未写
第四十二讲:用户界面 View(九)
SlidingDrawer 仿造Home的应用程序列表
ExpandableListView  ExpandableListActivity
TabHost,TabWidget,Tabactivity
ImageSwitcher TextSwitcher
ViewFlipper ViewAnimator