androidAndroidandroid

基于Android平台的全球地图方案

2017-03-08  本文已影响2340人  天哥在奔跑

现状

百度地图、高德地图在国外无法显示详细地面信息或显示不全面,Google Map在国内不好使。

需求

根据坐标在地图上显示位置,无论国内国外都要正常显示。

由于旅游公司一般都会有地图显示,所以笔者针对OTA行业的几款应用进行了调研,调研结果都是从App的展示现象总结的,未必是实际情况。

市场上部分OTA应用的地图使用情况

坐标类型及偏差范围

WGS-84 GCJ-02 bd-09/bd-09ll
原始坐标,国际上采用的地心坐标系,GPS拿到的原始经纬度数据,国内不允许直接使用该坐标; “火星坐标系”,由WGS-84加密而来,高德和Google在国内使用GCJ-02坐标; 百度坐标,在GCJ-02基础上再次加密;

如果把百度的坐标直接显示到高德或者谷歌地图上,肯定会有所偏差,因为他们使用的坐标类型不同,同理,高德坐标也不能直接显示到百度地图上,经过多组数据的比较,百度、高德和Google的经纬度偏差如下:

高德和Google 百度和高德/Google
<0.00001度(小于1米) <0.01度(小于1000米)

坐标转换

百度和高德都提供了将其他坐标类型转换为各自的坐标类型;
转为百度坐标:
百度提供:将google地图、soso地图、aliyun地图、mapabc地图和amap地图以及GPS所采集的坐标转换为百度坐标。参照地址

// 将google地图、soso地图、aliyun地图、mapabc地图和amap地图// 所用坐标转换成百度坐标 
CoordinateConverter converter  = new CoordinateConverter(); 
converter.from(CoordType.COMMON); 
// sourceLatLng待转换坐标 
converter.coord(sourceLatLng); 
LatLng desLatLng = converter.convert(); 
  
// 将GPS设备采集的原始GPS坐标转换成百度坐标 
CoordinateConverter converter  = new CoordinateConverter(); 
converter.from(CoordType.GPS); 
// sourceLatLng待转换坐标 
converter.coord(sourceLatLng); 
LatLng desLatLng = converter.convert();

转为高德坐标:
高德提供:支持GPS/Mapbar/Baidu等多种类型坐标在高德地图上使用。参见类CoordinateConverter。参照地址

CoordinateConverter converter  = new CoordinateConverter();
// CoordType.GPS 待转换坐标类型
converter.from(CoordType.GPS);
// sourceLatLng待转换坐标点 LatLng类型
converter.coord(sourceLatLng);
// 执行转换操作
LatLng desLatLng = converter.convert();

在百度和高德的“Web服务API”中也有相关坐标转换接口:
百度Web服务API转换接口
高德Web服务API转换接口

如何根据经纬度判断国内还是国外

以高德地图举例:
CoordinateConverter类提供的isAMapDataAvailable(double latitude,double longitude)接口可以用来判断指定位置是否在大陆以及港、澳地区。参照地址

CoordinateConverter converter  = new CoordinateConverter(); 
//返回true代表当前位置在大陆、港澳地区,反之不在。
boolean isAMapDataAvailable = converter.isAMapDataAvailable(latitude,longitude);
//第一个参数为纬度,第二个为经度,纬度和经度均为高德坐标系。

方案参考

  1. 高德地图:国内高德可正常显示,国外可用高德添加Google瓦片;
  2. 百度地图、高德地图:国内使用百度地图,国外使用高德添加Google瓦片
  3. 百度地图、高德地图、Google地图:国内使用百度地图,国外 if (可以ping通Google && 手机安装了Google Play Service) {Google地图} else {高德地图结合Google瓦片};

Google地图有两个必要条件:

  1. 手机安装了Google Play Service应用(国产机一般都阉割了吧)
  2. 可以访Google。

什么是瓦片?见下图,图1该区域高德无法展示具体地面信息,图2添加Google瓦片后:

高德地图无法显示国外详细路面信息.png 添加Google瓦片后可以展示路面信息 .png

之前一直在某博客,最近接触到简书,今天第一次尝试,如果下次还高兴来的话,就写一下高德地图百度地图的具体用法。

备注

百度地图开放平台地址
高德地图开放平台地址
Google地图开发者地址

推荐:

Android开发视频教程(Java版 | 2017年最新录制)

附一张手机随拍图

冬日的顾村公园.png
上一篇 下一篇

猜你喜欢

热点阅读