现状
百度地图、高德地图在国外无法显示详细地面信息或显示不全面,Google Map在国内不好使。
需求
根据坐标在地图上显示位置,无论国内国外都要正常显示。
由于旅游公司一般都会有地图显示,所以笔者针对OTA行业的几款应用进行了调研,调研结果都是从App的展示现象总结的,未必是实际情况。
市场上部分OTA应用的地图使用情况
-
携程
Android 国内城市:百度地图;国际城市:Google地图(非地图控件,而是WebView访问自己站点网页)
iOS 国内城市:高德地图;国际城市:Google地图(非地图控件,而是WebView访问自己站点网页) -
蚂蜂窝
Android/iOS 国内城市:高德地图;国际城市:高德地图(当地图缩放到某个层级时,高德无法绘制更具体的地面信息,但高德提供了相关的API,可以在地图上覆盖Google瓦片,也就是可以通过Google地图展示更具体的信息) -
驴妈妈
Android/iOS 国内城市:百度地图;国际城市:不显示地图(提示“无法获取地理位置信息”)
坐标类型及偏差范围
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);
//第一个参数为纬度,第二个为经度,纬度和经度均为高德坐标系。
方案参考
- 高德地图:国内高德可正常显示,国外可用高德添加Google瓦片;
- 百度地图、高德地图:国内使用百度地图,国外使用高德添加Google瓦片
- 百度地图、高德地图、Google地图:国内使用百度地图,国外 if (可以ping通Google && 手机安装了Google Play Service) {Google地图} else {高德地图结合Google瓦片};
Google地图有两个必要条件:
- 手机安装了Google Play Service应用(国产机一般都阉割了吧)
- 可以访Google。
什么是瓦片?见下图,图1该区域高德无法展示具体地面信息,图2添加Google瓦片后:
高德地图无法显示国外详细路面信息.png 添加Google瓦片后可以展示路面信息 .png之前一直在某博客,最近接触到简书,今天第一次尝试,如果下次还高兴来的话,就写一下高德地图和百度地图的具体用法。
备注
百度地图开放平台地址
高德地图开放平台地址
Google地图开发者地址
推荐:
Android开发视频教程(Java版 | 2017年最新录制)
附一张手机随拍图
冬日的顾村公园.png
网友评论