█ 【安卓学习之常见问题】百度sdk不显示地图:此区域无卫星星图
█ 系列文章目录
提示:这里是收集了无人机的相关文章
█ 文章目录
█ 读前说明
- 本文通过学习别人写demo,学习一些课件,参考一些博客,’学习相关知识,如果涉及侵权请告知
- 本文只简单罗列相关的代码实现过程
- 涉及到的逻辑以及说明也只是简单介绍,主要当做笔记,了解过程而已
█ 问题描述:
本来地图可以显示的,然后在地图上面随便添加位置后,地图没显示出来,代码也没有问题:
█ 初步原因分析:
1. 刚开始因为是硬件问题,比如手机的定位问题,将app重装就不会,因此可以排除
2. 通过代码删减法,可以发现是以下方法导致无法显示:
float DEFAULT_LATITUDE = 37.8575523f;
float DEFAULT_LONGITUDE = -122.292767f;
int DEFAULT_BEARING = 0;
int DEFAULT_TILT = 0;
int DEFAULT_ZOOM_LEVEL = 17;
@Override
public void loadCameraPosition() {
final BaiduMap map = getBaiduMap();
if (map == null) return;
final SharedPreferences settings = mAppPrefs.prefs;
final MapStatus.Builder camera = new MapStatus.Builder();
camera.rotate(settings.getFloat(PREF_BEA, DEFAULT_BEARING));
camera.overlook(settings.getFloat(PREF_TILT, DEFAULT_TILT));
camera.zoom(settings.getFloat(PREF_ZOOM, DEFAULT_ZOOM_LEVEL));
camera.target(new LatLng(settings.getFloat(PREF_LAT, DEFAULT_LATITUDE),
settings.getFloat(PREF_LNG, DEFAULT_LONGITUDE)));// 重点是这句
map.setMapStatus(MapStatusUpdateFactory.newMapStatus(camera.build()));
}
3.坐标比较
提示:【显示异常】是指地图展示【此区域无卫星星图】
纬度latitude |
经度longitude |
结果 |
37.8575523 |
122.292767 |
显示正常 |
46.10719 |
-26.88701 |
显示异常 |
46.10719 |
-10 |
显示异常 |
46.10719 |
-5 |
显示异常 |
46.10719 |
-2 |
显示异常 |
46.10719 |
-1.8 |
显示异常 |
46.10719 |
-1.7 |
显示正常 |
46.10719 |
-1.5 |
显示正常 |
46.10719 |
-1 |
显示正常 |
4.查看LatLng.java
提示:坐标都是进行加密,不是真实坐标,因加密方式不同,分为以下几种坐标:
WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块)
GCJ-02:中国坐标/国测局偏移标准,谷歌地图、高德地图、腾讯地图使用
BD-09:百度坐标偏移标准,百度地图使用
public final class LatLng implements Parcelable {
private static final String a = LatLng.class.getSimpleName();
public final double latitude;
public final double longitude;
public final double latitudeE6;
public final double longitudeE6;
public static final Creator<LatLng> CREATOR = new a();
public LatLng(double var1, double var3) {
double var5 = var1 * 1000000.0D;
double var7 = var3 * 1000000.0D;
this.latitudeE6 = var5;
this.longitudeE6 = var7;
this.latitude = var5 / 1000000.0D;
this.longitude = var7 / 1000000.0D;
}
。。。。。。
}
5.再看下float和double
float的范围为-2^128 ~ +2^128(-3.40E+38 ~ +3.40E+38)
double的范围为-2^1024 ~ +2^1024(-1.79E+308 ~ +1.79E+308)
错误的以为:经度longitude < -1.79,超过double的精度,所以就显示异常 |
█ 进一步分析:
1. 通过坐标找地图位置
提示:46.10719 | -26.88701 这个坐标是存在的,并非非法坐标
2. app上面缩小地图看看
提示:是坐标放大过度,导致显示不了
3. 换个地址放大地图看看,比如北京-天安门
4. 换个地址放大地图看看,发现公路可以看到,但是大海通常就显示不了
█ 解决方案:
这个不是地图问题,也不是坐标问题
█ 相关资料
提示:这里是参考的相关文章
- 拾取坐标系统 - 百度地图
- float和double取值范围_sinat_39370511的博客-CSDN博客_double取值范围
- Android Fragment 加载地图 | 百度地图API SDK
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)_qq_39714792的博客-CSDN博客
提示:转载请注明出处:
https://blog.csdn.net/ljb568838953/article/details/113613283