做移动应用使用地图API时需要注意的问题
2024-08-28 09:38:12
最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回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
- 如何让程序推出时,GPS的图标不再闪烁(即停止使用GPS)
暂时就总结这么多。
最新文章
- The difference between QA, QC, and Test Engineering
- php生成curl命令行
- IOS开发的目录结构
- linux上安装apache
- 用于迭代器的yield return
- Python基础教程之List对象 转
- SSH信任
- sql存储过程的创建
- 由mysql数据库基础上的php程序实现单词的查询、删除、更改和查询
- html5介绍
- 超棒的自定义超酷滚动条jQuery插件 - Perfect Scrollbar
- 在Kubernetes集群中使用calico做网络驱动的配置方法
- [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)
- arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expression
- Python图形编程探索系列-09-tkinter与matplotlib结合案例
- 树莓派Raspberry Pi zero w无线联网实测
- 开学习实用的笔试面试技术:linux
- dp的进阶 (一)
- C语言控制结构
- HDU 4632 区间DP 取模
热门文章
- [笔记]180612 for DevOps
- 杜教筛&;套路总结
- 【NOI2010】能量采集
- 容斥原理——poj1091
- C++ const修饰不同类型的用法
- Autowire(自动装配)机制
- 报错initscripts conflicts with redhat-release-server-7.0-1.el7.x86_64
- 02_jQuery对象初识(二)筛选器1
- 基于baseline、svd和stochastic gradient descent的个性化推荐系统
- ch5 vlsms