Android地图开发之地图的选择
做lbs开发差不多快2年了,地图相关的产品也差不多做了3个了,用到过的地图包括google地图、高德地图、百度地图、图吧、Osmdroid,今天总结下,方便大家开发时选择合适的地图。
首先说定位模块选择,高德地图、百度地图现在都有了单独的地位sdk,且都支持全球定位,都是非常不错的选择。我现在做的项目对定位要求很高,现在的选择是gps定位使用系统定位方式,基站定位使用百度定位,gps连接成功使用系统定位接口,gps断开切换到百度基站定位。
gps定位,百度和高德都用过,但是测试发现没有同类产品统计的精度高,而且经常在有些机型出现问题,例如有些手机定位时,状态栏定位状态总是一闪一闪的,经常掉线,记录轨迹飘移较大,后来换成系统接口后,稳定很多,用户也反馈记录的轨迹精确很多。还有百度地图现在使用的定位sdk,返回的数据没有海拔数据,这也是不使用百度gps定位的一个原因,不知道现在有没修复。
基站定位,感觉百度比高德数据返回的更快速点,地址解析或是搜索也是,不知道是不是百度的数据检索及大数据处理能力强点,不过也没仔细的对比测试,可能感觉不准确。
其次说下地图的选择,我现在的产品使用的是百度矢量地图和Osmdroid栅格地图,因为主要是做户外地图,所以卫星地图和等高线图是必备,然后考虑到矢量地图数据量很小,所以也加上了,现在可以做到百度矢量、google卫星地图和OpenCycleMap一键切换,使用了2个地图框架,接口封装挺痛苦的。
如果仅是做中国的地图产品,百度、高德都是不错的选择,这2个现在的接口都基本和googel的接口一样了,所以3者之间可以非常快速的切换。稳定性方面,我使用后的感受是google地图>高德>百度,我自己有开发一个应用,最开始采用google地图,后来google被墙了,换成高德,以前在google上使用没问题的地方,切换后就报异常了,多了一些限制,比如向地图添加一段轨迹,轨迹点必须大于2,并且必须设置图标,不然就报异常,然而google就可以先添加,再设置数据(记录轨迹时,刚开始没轨迹点,所以会先向地图添加一个轨迹,然后定位到了再不断更新轨迹点数据)。百度最近一段时间迭代非常快,有时2-3星期就更新一个版本,经常更新后有一些问题,而且有几次接口改动非常大(这个最坑爹了,给开发带来了不少额外工作量),基本就是将以前百度的接口否定了,然后改成了google得接口,在接口方面,google还是牛一点,接口都成了参考标准。另外,有一个同事最近在使用高德地图时,发现居然没有MapViewLayoutParams,我找了下高德的接口也好像确实没有,官方参考例子也没有相关例子,这样在地图某一个坐标添加一个较复杂的View就很麻烦了,不知道是不是有其他方式。
如果要做面向全球服务的产品,在Android上现在好像还没有特别好的选择。google被墙,而且必须手机要有Google Service Framework,百度和高德等国内地图都只有中国的数据,似乎只有OpenStreetMap支持全球数据了。OpenStreetMap本身支持很多图源,数据全球都有,不过主要是面向户外的,城市地图没有其他地图那么精细(当然也可以添加google的普通和卫星瓦片地图的图源),然后可以自定义一些其他图源,有兴趣的朋友可以看下github上面的一个开源框架osmdroid,这个框架网上有一些介绍的文章。
图吧地图,以前公司的几个产品用的是图吧的地图,做过一段时间的维护,和其他地图没什么有特色的地方,现在好像还没矢量地图,sdk很久没更新了。
最后,这几个地图做一个总结:
googel地图:gps坐标系,最稳定,卫星地图精细,但是在中国服务被墙,且手机必须要有Google Service Framework,在中国基本不FQ不root不可用;
高德地图:火星坐标系(gcj),稳定性不错,支持全球定位,卫星地图不精细(很多户外区域放大没卫星数据),不过最近有同事反馈没有MapViewLayoutParams,可能在地图某个坐标添加较复杂视图比较麻烦,不知道是否有更新或者其他实现方式,大家选择时可以先研究下。还有默认UI感觉没百度精细漂亮。
高德地图我在github上面有一个开源小项目TheSceneryAlong:https://github.com/John-Chen/TheSceneryAlong,大家可以参考下;
百度地图:百度坐标系,卫星地图不精细(很多户外区域放大没卫星数据),版本迭代较频繁,不过最新版本已经很稳定了,支持全球定位,功能迭代较快,地图数据加载很快。
Osmdroid:栅格地图,gps坐标系,可以自定义添加其他图源(可能其他图源得先转换坐标系,例如google地图图源得先将gps坐标转换成火星坐标,再在地图显示),有开源框架。
除了使用sdk加载显示地图外,应该也可以通过webView加载map,通过js控制地图,对于地图图层较为简单的可以考虑下。
嗯,先总结到这里,后面想到其他的再添加。如果写的有什么问题,欢迎交流指教。
Android地图开发之地图的选择的更多相关文章
- 百度地图开发-引入地图SDK并配置 02
百度地图开发-引入地图SDK并配置 02 通过上一篇文章的介绍,基本了解百度地图的基本信息,接下来就让我们一起来实际在项目中操作,显示出地图. 01 引入地图SDK 首先需要新建一个空白的Androi ...
- Android百度地图开发 百度地图得到当前位置
1.申请key 2.复制jar,以及.so .注意要Libs目录右键build path -> use as source folder(这是一个坑) 3. AndroidMainFast.xm ...
- android定位和地图开发实例
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便. 首先介绍一下地图包中的主要类: MapController : 主要控制地图移动,伸缩,以某个GPS坐标 ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- Android 百度地图开发之一(Hello BaiDu Map)
之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图 ...
- Android百度地图开发-第一篇:申请、搭建百度地图
一.前言 这是第一篇关于Android使用百度地图的学习记录,主要记录: 1.在百度地图开发者平台上申请API Key. 2.在自己的应用中加入百度地图的Android版SDK. 3.在自己的应用中显 ...
- Android studio 百度地图开发(3)地图导航
Android studio 百度地图开发(3)地图导航 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...
- [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
近期做android百度地图,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--仅仅显示网格而没有显示地图,网 ...
- Android百度地图开发(一)之初体验
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需 ...
随机推荐
- OpenCV开发环境配置-Windows/MinGW/Clion/CMake
临时更换成了TDM-GCC,和mingw类似,这里只是声明一下. 由于opencv下载下来的.exe安装包实际上是没有mingw(gcc)匹配的/动静态库,因此这些东西需要我们自己使用mingw编译. ...
- Android 学习笔记之Volley开源框架解析(四)
学习内容: 1.NetWorkDispatcher网络请求线程调度... 2.NetWork网络请求抽象类... 3.BasicNetWork网络请求抽象类的具体实现... 4.NetWorkResp ...
- Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)
学习内容: 1.了解Drawable类的作用 2.如何使用Drawable... 3.了解Tween动画... 4.如何创建和使用Tween动画... 1.Drawable类... Drawabl ...
- python内置模块(4)
这一部分是python内置模块系列的最后一部分,介绍了一些小巧有用的内置模块. 目录: 1.random 2.shelve 3.getpass 4.zipfile 5.tarfile 6.bisect ...
- Velocity魔法堂系列三:模板与宿主环境通信
一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...
- Jquery核心函数
在Jquery中,所有的DOM对象都将封装成Jquery对象,而且只有Jquery对象才能使用Jquery方法或者属性来执行相应的操作. 所以Jquery提供了一个可以将DOM对象封装成Jquery对 ...
- Unity多语言本地化改进版
简介 之前捣鼓过一个通过csv配置游戏多语言支持的小工具,但是发现使用过程中,通过notepad++去进行转码很不方便,并且直接将配置的csv不加密的放在游戏中心里感觉不是很踏实 于是乎~~ 新的方案 ...
- 【iOS】FMDB/SQLCipher数据库加解密,迁移
2016-04-19更新:本文代码可能有些问题,请移步 http://zhengbomo.github.io/2016-04-18/sqlcipher-start/ 查看 sqlite应用几乎在所有的 ...
- Identity标识列
SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便.但它有时还会带来一些麻烦. 示例一 :当表中被删除了某些数据的时候,自增长列的编号就不再是一个连线的数 ...
- sencha gridpanel checkbox 复选框的勾选 以及和单机行冲突
gridpanel显示checkbox: 添加SelectionModel为Checkbox Selection Model { xtype: 'gridpanel', id: 'Grid1', he ...