开发者社区> 涂作权> 正文

做移动应用使用地图API时需要注意的问题

简介: 最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图。毕竟Google地图在技术和成熟度上完胜百度地图,当然百度也在慢慢追赶,希望有一天大家都能用上咱们自己的好用的地图服务。 现在把碰到的问题和解决方案罗列一下: 版权:如果是大量商用的话,还是得事先注意一
+关注继续查看

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
WM
基于ECS搭建的应用示例(博客、密码管理、同学地图、APP服务端等)详解之一
作为互联网行业从业者,头脑里总是会冒出各种各样的想法,当然可以用网络笔记、云盘甚至本地的方式等记录下自己的想法,然而如果想要落地尝试,则拥有一台自己的服务器就再好不过了。全栈开发已经讲了很久了,如果是前端,通过nodejs也可以搭建后端服务;如果是后端,通过flutter、uniapp等也可以搭建出各种端上的APP;如果非研发人员,通过低代码开发平台拖拽也可以。有了自己的产品之后,如果不满足于本地跑跑,那么就得面临选择应用的载体了,性价比最高的方式是选择云上ECS,下面拿我的几年使用经验来展开讲一下。
77 0
使用蓝牙发送文件时需要注意的问题
牙服务注册在蓝牙的Service Database里面,发送文件建立的是RFCOMM的连接,这就需要指定一个channel,类似于TCP/IP的端口,但是具体连接哪一个channel,就需要通过服务查询来获得。
834 0
Qt编写地图综合应用19-地图服务
一、前言 国内提供地图服务的厂家基本上是五家,百度地图、高德地图、腾讯地图、搜狗地图、天地图,国外的一般还有谷歌地图、微软地图(BING地图),这几家的地图服务的api接口都大同小异,甚至很多函数的名字都一模一样,毕竟叫的很通俗,这样也很容易理解,除了引入的地图服务JS文件不同,对象名称不同,其他.
741 0
使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
34 0
+关注
涂作权
java,架构,编程语言相关专家
1234
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载