背景:
开发一个骑行app,页面是百度导航,演示需要模拟人骑行,位置不断移动。
位置模拟
核心是这个:
for (String provider : mockProviders) {Location mockLocation = null;if (location == null) {mockLocation = new Location(provider);} else {mockLocation = new Location(location);mockLocation.setProvider(provider);}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());}locationManager.setTestProviderLocation(provider, mockLocation);}
可以参考下:/b.php/108487.html
我不记得是参考哪篇文章的代码了,文末我附上我的源码,可以直接用的,增加了一些接口。
GPS坐标列表获取
因为需要模拟连续的坐标变化,所以需要整个导航路径的坐标
获取两个点之间路线经纬度数组——/9QQKp
使用方法:
步骤1:1位置输入你需要查询的地方,快速定位到地图位置
步骤2:选择起点坐标。点击2位置,然后在地图点击起点位置
步骤3:选择终点位置。同步骤2
步骤4:查询路线,就可以复制最下面的坐标数组了
GPS坐标系转换
上述查询路线地图是高德地图,使用的坐标数组是GCJ-02坐标,而百度地图使用的是BD-09坐标,直接使用会位置不对应。
在线坐标批量转换 /d/gps
算法转换:
public static double[] gcj2Bd09(double[] gcj) {double x = gcj[0], y = gcj[1];double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);double ret[] = new double[2];ret[0] = z * Math.cos(theta) + 0.0065;ret[1] = z * Math.sin(theta) + 0.006;return ret;}
百度地图获取gps坐标
https://api./lbsapi/getpoint/index.html
坑记录
1、百度地图网页版的坐标和手机版不对应
百度网页版地图上获取的坐标点,输入到手机版地图上会有偏差,通过记录发现偏差是个固定值
所以获取到的百度网页版本坐标,还需要加上偏差值才能用于手机版本地图上
源码文件
免费下载
/download/JCYAO_/8746