这段时间在做定位功能,在这里总结一下,自己对定位的理解。
一,从三大系统Android, IOS, WP的角度上看,各系统均有自己的Map SDK。
安卓有强大的Google Map API,但是很多厂商的rom里是阉割掉的,所以这个渠道不能用,不带google map api的系统也可以通过系统的LocationService来获取位置服务,但是没有了api的优化,通过位置服务来实现定位成功率很低,当然这也和google服务在国内支持的不好有关,经常no response或者time out。
爱疯和温疯系统SDK提供的定位功能均能很好的实现定位,基本上不考虑定位失败的因素,这和苹果,微软的对华策略关系很大。

二,国内地图服务的供应商均有提供定位的功能,这里我试过百度api,图吧api,搜狗api。
百度地图api提供的非常全面,有面向flash,javascript,web,android,ios等等,很强大,定位速度也很快,但据网上讲,定位精度没有google高,这个我没有实际测试。百度对android平台的sdk大小有1m,包含jar和so文件,对于apk大小要求严格的app来说还是挺致命的。百度api使用很方便,个人注册key来使用就ok,商业使用的话可以给百度发邮件,一个工作日内,百度商务会和你联系,并了解你公司app的情况来决定合作事宜。
图吧的地图api是免费使用的,但是定位功能是收费项目,果断不使用。
搜狗api的jar大概有700多k,对于我们这种要求apk大小严格的app来说,没有任何吸引力。

三,定位方式大致分两类:网络定位和GPS定位。
一般情况下我们很少使用GPS定位,因为这个功能的局限太多,首先GPs需要在室外使用,因为在房间里根本搜不到卫星啊亲,其次GPS的定位速度很慢,超过了用户的忍耐极限,如果你在一个旋转的进度条上等个三秒,那么你多半会按back键。但GPS定位的好处是不需要联网。
网络定位也分几种方式,首先的SDK提供的定位接口,一般来讲都需要相应的权限,android手机即使给了权限也不好使,因为墙啊亲!android的定位接口也是分几种的,第一种通过googlemap的api来定位,成功率相对较高;第二种LocationService定位,成功率很低很低很低;第三种通过TelephonyService获取CellId基站Id,并向google基站定位接口www.google.com/loc/json发送json请求来获取基站位置,由此实现基站定位,经过测试中国移动,中国联通的2G支持的很好,成功定位的概率达到80%,但是3G信号基本上0成功。WP和IOS的SDK定位比较给力,就不再赘述。
其次通过百度地图api等国内地图服务商提供的地图服务是很快,很稳定的,基本上不需要设置权限,走网络就ok。
最后,我们还可以通过wifi定位,即获取周围wifi的mac地址上传google服务器,获取更加精确的定位信息。

总结一下,如果想实现快速稳定的定位功能,还是使用国内地图服务商的api服务吧。