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的时候免不了使用地图功能,本人最近由于项目的需 ...
随机推荐
- 浅析I/O模型及其设计模式
前言 I/O在软件开发中的重要性无需多言,无论是在操作系统.网络协议.DBMS这种底层支撑软件还是在移动APP,大型网站服务器等应用软件的开发中都是最核心最重要的部分.特别是现在软件服务使用量和数据量 ...
- JS中 escape, encodeURI 和 encodeURIComponent的区别
为避免Url字符串在传递过程中的乱码,我们一般需要对字符串进行处理. 在Javascript中实现此功能的全局对象有3个,分别是:escape(), encodeURI() 和 encodeURI ...
- C中extern的用法
/*********************************************************************** INPUT3.C -- Input data pars ...
- lnmp_auto:自动化安装lnmp环境脚本
朋友找我在一台机器上帮忙安装下discuz.想着搭建过好几次的lnmp了,但是还没有使用过"一键安装"的自动化脚本,去网上有搜索出来,但是运行的时候发现用root运行别人的脚本还是 ...
- Vector Clock/Version Clock
physical clock 机器上的物理时钟,不同的机器在同一个时间点取到的physical clock不一样,之间会存在一定的误差,NTP可以用来控制这个误差,同一个机房内的机器之间的时钟误差可以 ...
- 比较body.onload(function())、$(document).ready(function())与$(windows).load(function)
原理对比: body.onload(function())是优先将document的DOM渲染,即将页面所有的元素(包括html标签以及所引用到的图片,flash媒体等媒体文件)加载完成,然后再执行页 ...
- C语言字符串匹配函数
C语言字符串匹配函数,保存有需要时可以用: #include <stdio.h> #include <stdlib.h> #include <string.h> # ...
- 可以调整gif动画图片尺寸的很实用的php类
类的使用demo: <?php //http://www.cnblogs.com/roucheng/ require_once "roucheng.php"; $gr = n ...
- 1 初识Orchard
网上关于Orchard的介绍已经很多了,具体Orchard是干啥的我就不再啰嗦,这个系列的主要目的就是介绍学习和使用orchard的过程,和在此过程中碰到问题的解决方案.下面直接进入正题. 获取orc ...
- 【C#进阶系列】08 方法
实例构造与引用类型 之前的章节其实已经写过了引用类型的构造过程: 首先当然是,在堆中,为引用类型的实例对象分配内存,然后初始化对象的附加字段(即类型对象指针和同步块索引). 这个时候为对象分配的内存都 ...