最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回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

暂时就总结这么多。

做移动应用使用地图API时需要注意的问题的更多相关文章

  1. 程序开发使用地图API时需注意的问题(转)

    最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图.毕竟Google地图在技 ...

  2. 高德地图API INVALID_USER_SCODE问题以及keystore问题

    今天这篇文章会给大家介绍三个问题: 1,接入API时出现invalid_user_scode问题 首先进行第一个大问题,接入高德地图API时出现invalid_user_scode问题 因为项目需要接 ...

  3. android 高德地图API 之 java.lang.UnsatisfiedLinkError: Couldn't load amapv3: findLibrary returned null错误

    错误场景: 运行android app时,在运行到调用高德地图API时,出现 “java.lang.UnsatisfiedLinkError: Couldn't load amapv3: findLi ...

  4. 百度地图API 级别自动缩放

    今天做一个基于百度地图API的小项目 查了很长时间apid都没有找到地图呈现出来的时候地图按坐标的多少自动缩放显示的等级比例,特此记录笔记!var points = [point1, point2,p ...

  5. 百度地图点击地图显示地址详情的默认方法怎么关闭,去掉百度地图api图标信息

    去掉百度地图api图标信息 调用百度地图API时,如果想去掉百度的logo,只需要在css里设置: <style> .anchorBL{display:none} </style&g ...

  6. 百度地图API开发一——仿照现有测距效果实现测面功能

      最近做了一个百度地图API的开发项目,里面有测量距离和测量面积的功能需求.测量距离百度给出了封装好的javascript包——BMapLib.DistanceTool,效果如下: 这个效果体验很好 ...

  7. 百度地图引用时 报出A Parser-blocking, cross site (i.e. different eTLD+1) script

    页面引入百度地图api时 chrome控制台报出警示问题 A Parser-blocking, cross site (i.e. different eTLD+1) script, http://ap ...

  8. 百度地图API示例:鼠标绘制点线面 控件修改

    需求 :在使用地图API时,绘制工具栏控件想自己选择哪些要,哪些不要. 可以查看相应的类:官网地址: http://api.map.baidu.com/library/DrawingManager/1 ...

  9. 使用百度地图API查地理坐标

    在网络编程中,我们会和API打交道.那么,什么是API?如何使用API呢?本文分享了一下我对API的理解以及百度地图API的使用. API是"Application Programming ...

随机推荐

  1. [转]Java四种线程池的使用

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...

  2. HTML - 文本标签相关

    <html> <head></head> <body> <!-- 标题标签 : h1到h6, 文字大小依次变小, 加粗显示, 自带换行 标签中的部 ...

  3. CentOS7服务器中apache、php7以及mysql5.7的安装配置代码

    CentOS7服务器中apache.php7以及mysql5.7的配置代码如下所示: yum upgradeyum install net-tools 安装apache (http://m.86822 ...

  4. 07.07NOIP模拟赛

    考中 考试时不知道自己在想啥.. 拿到第一题:woc组合数学,第二题:woc组合数学,第三题,woc组合数学. 然后开始认真读题…… 我tm真是闲的... 第一题是15年山东省选题,感觉暴力搜索都没法 ...

  5. C++编程规范和编译过程详解

    前言:因为c++基础打得不牢,所以准备花点时间再学一下c++的基础知识,主要是看网易云课堂里面的免费课程,把一些知识点做个笔记记下来. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  6. C++写矩阵的转置

    (2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2017年2月5日) 对于任意非n阶矩阵的转置,用c++应该怎么写代码,思考了一下,发现并没有那么简单,上网找到了一个比较好 ...

  7. Windows 系统文件夹目录挂载到 Linux服务器中

    在Windows系统文件上传到Linux服务器时有时候很麻烦,因为Linux无界面的系统不像Windows系统一样,可以直接复制粘贴,下面方法可以解决Windows系统文件拷贝到Linux服务器. 1 ...

  8. Redis Replication & Sentinel

    实践目标: Redis Replication 一主:192.168.1.104 双从:192.168.1.101 192.168.1.103 Sentinel:192.168.1.102 系统环境: ...

  9. java虚拟机(十)--性能监控工具测试内存溢出和死锁基本思路

    在之前就曾经简单介绍过jdk自带的性能检测工具,但是只是很入门的内容.没有真正的用过都是白扯了,面试的时候也说不过去,更别提真正 在生产环境去解决问题,所以这里我们学习一下真正解决问题的过程,最起码面 ...

  10. ES5-ES8 数组拥有的方法

    1.判断是否是数组 Array.isArray( arg ) 有兼容性 2.toString 数组转字符串 arr.toString(); 3.join 数组每一项间的拼接 arr.join(); S ...