最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图。毕竟Google地图在技术和成熟度上完胜百度地图,当然百度也在慢慢追赶,希望有一天大家都能用上咱们自己的好用的地图服务。

现在把碰到的问题和解决方案罗列一下:

  • 版权:如果是大量商用的话,还是得事先注意一下版权意识,不然到时候就很被动了。两者的免费版都不允许商业应用,具体可以看这里Google Maps API百度API常见问题。不过在万能的国度,也有其他解决方案Google地图采集遇到IP限制的解决思路,其他的大家可以google一下。
  • GPS偏差(仅限中国国大陆地区):刚开始在看API文档时,没太注意这样一句话[百度对外接口的坐标系,都是经过国家测绘局加密处理,符合国家测绘局对地理信息保密要求] 悲催了。这就是中国特色(看看月光博主这篇网络地图国家队进场抢钱)。我们的需求是:根据手机GPS获得的坐标跟用户从地图上选择的坐标进行比较,然后决定是否在用户进入或离开该区域进行提醒。由于百度对外提供的坐标系是百度自己的坐标系,而手机GPS获得的是原始坐标,两者不在一个坐标系上,所以有很大的误差,我们测试了一下,误差在千米之外。所以必须得把两者换成统一坐标系。换成原始GPS坐标在国内原则上是违法的,所以只能统一成各个地图运营商自己的坐标系,比如百度坐标系或者google坐标系。
  • API性能比较,请参照:多家地图API内存消耗对比测试
  • 如何转换成百度坐标系:官方文档给的是:坐标转换接口非公开。请将您的公司名称、项目名称、项目简介、联系人和联系方式,发邮件至mapapi@baidu.com咨询。有专人为您解答。说白了就是收钱,不过这个东西在网上有人透露了。我试过还挺好使。
    •   

      http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude
      其中:
      from: 来源坐标系 (0表示原始GPS坐标,2表示Google坐标)
      to: 转换后的坐标 (4就是百度自己啦,好像这个必须是4才行)
      x: 精度
      y: 纬度 返回的结果是一个json字符串:
      {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"}
      error:是结果是否出错标志位,"0"表示OK
      x: 百度坐标系的精度(Base64加密)
      y: 百度坐标系的纬度(Base64加密)
    • 百度还提供了js的转换工具,可参考官方链接:常用坐标转换
  • 如何转换成google坐标系:
    •   

      http://ditu.google.cn/maps/vp?spn=0.0,0.0&z=18&vp=latitude,longitude
      
      注意,google的参数里经纬度是反过来的。
      
      相关详细见
      http://blog.sina.com.cn/s/blog_65bd7eef0100hu5o.html
  • 其他
    • 如何让程序推出时,GPS的图标不再闪烁(即停止使用GPS)

      #启动GPS的时候,根据需求设置一些参数,注册监听方法
      Criteria criteria = new Criteria();
      criteria.setAccuracy(Criteria.ACCURACY_FINE);
      criteria.setAltitudeRequired(false);
      criteria.setBearingRequired(false);
      criteria.setCostAllowed(true);
      criteria.setPowerRequirement(Criteria.POWER_HIGH);
      String provider = this.mLocationManager.getBestProvider(criteria, false); this.mLocationManager.requestLocationUpdates(provider, MINIMUM_TIME_BETWEEN_UPDATE, MINIMUM_DISTANCE_FOR_UPDATE, this.mListener); #退出的时候,需要取消该监听方法
      this.mLocationManager.removeUpdates(this.mListener);
      使用地图的时候也需要注意:
      1:使用BMapManager一定要最后调用stop和destroy
      2:使用MyLocationOverlay的时候,如果enableMyLocation之后一定接的disable掉
      3:其实就一个原则,记得及时安全的资源释放,特别是这种全局资源(用户很care的)
    • LocationManager.addProximityAlert()可以试用,但是不好控制,特别是他的启动间隔无法控制,最好还是自己实现相关的功能,然后在准确度和耗电上根据应用找到一个好的平衡点。
    • 如何通过LocationManager获取用户的最佳当前位置 =》Good
      way of getting the user's location in Android

暂时就总结这么多。

最新文章

  1. The difference between QA, QC, and Test Engineering
  2. php生成curl命令行
  3. IOS开发的目录结构
  4. linux上安装apache
  5. 用于迭代器的yield return
  6. Python基础教程之List对象 转
  7. SSH信任
  8. sql存储过程的创建
  9. 由mysql数据库基础上的php程序实现单词的查询、删除、更改和查询
  10. html5介绍
  11. 超棒的自定义超酷滚动条jQuery插件 - Perfect Scrollbar
  12. 在Kubernetes集群中使用calico做网络驱动的配置方法
  13. [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)
  14. arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expression
  15. Python图形编程探索系列-09-tkinter与matplotlib结合案例
  16. 树莓派Raspberry Pi zero w无线联网实测
  17. 开学习实用的笔试面试技术:linux
  18. dp的进阶 (一)
  19. C语言控制结构
  20. HDU 4632 区间DP 取模

热门文章

  1. [笔记]180612 for DevOps
  2. 杜教筛&套路总结
  3. 【NOI2010】能量采集
  4. 容斥原理——poj1091
  5. C++ const修饰不同类型的用法
  6. Autowire(自动装配)机制
  7. 报错initscripts conflicts with redhat-release-server-7.0-1.el7.x86_64
  8. 02_jQuery对象初识(二)筛选器1
  9. 基于baseline、svd和stochastic gradient descent的个性化推荐系统
  10. ch5 vlsms