From ed8cc02735a89929de67304987769828aa106249 Mon Sep 17 00:00:00 2001 From: herecomestheking <278445584@qq.com> Date: Wed, 3 May 2023 20:49:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5GPS=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E5=90=91=E4=B8=8E=E6=91=87=E6=9D=86=E7=9A=84=E6=96=B9=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/zcshou/joystick/JoyStick.java | 6 +++--- app/src/main/java/com/zcshou/service/ServiceGo.java | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/zcshou/joystick/JoyStick.java b/app/src/main/java/com/zcshou/joystick/JoyStick.java index 838c404..044d1b5 100644 --- a/app/src/main/java/com/zcshou/joystick/JoyStick.java +++ b/app/src/main/java/com/zcshou/joystick/JoyStick.java @@ -260,7 +260,7 @@ public class JoyStick extends View { // 注意:这里的 x y 与 圆中角度的对应问题(以 X 轴正向为 0 度)且转换为 km disLng = mSpeed * (double)(DivGo / 1000) * mR * Math.cos(mAngle * 2 * Math.PI / 360) / 1000;// 注意安卓中的三角函数使用的是弧度 disLat = mSpeed * (double)(DivGo / 1000) * mR * Math.sin(mAngle * 2 * Math.PI / 360) / 1000;// 注意安卓中的三角函数使用的是弧度 - mListener.onMoveInfo(mSpeed, disLng, disLat); + mListener.onMoveInfo(mSpeed, disLng, disLat, 90.0F-mAngle); mTimer.start(); } }); @@ -385,7 +385,7 @@ public class JoyStick extends View { // 注意:这里的 x y 与 圆中角度的对应问题(以 X 轴正向为 0 度)且转换为 km disLng = mSpeed * (double)(DivGo / 1000) * mR * Math.cos(mAngle * 2 * Math.PI / 360) / 1000;// 注意安卓中的三角函数使用的是弧度 disLat = mSpeed * (double)(DivGo / 1000) * mR * Math.sin(mAngle * 2 * Math.PI / 360) / 1000;// 注意安卓中的三角函数使用的是弧度 - mListener.onMoveInfo(mSpeed, disLng, disLat); + mListener.onMoveInfo(mSpeed, disLng, disLat, 90.0F-mAngle); } } } @@ -424,7 +424,7 @@ public class JoyStick extends View { } public interface JoyStickClickListener { - void onMoveInfo(double speed, double disLng, double disLat); + void onMoveInfo(double speed, double disLng, double disLat, double angle); void onPositionInfo(double lng, double lat); } diff --git a/app/src/main/java/com/zcshou/service/ServiceGo.java b/app/src/main/java/com/zcshou/service/ServiceGo.java index 0b4950e..9b3219a 100644 --- a/app/src/main/java/com/zcshou/service/ServiceGo.java +++ b/app/src/main/java/com/zcshou/service/ServiceGo.java @@ -35,8 +35,10 @@ public class ServiceGo extends Service { // 定位相关变量 public static final double DEFAULT_LAT = 36.667662; public static final double DEFAULT_LNG = 117.027707; + public static final float DEFAULT_BEA = 0.0F; private double mCurLat = DEFAULT_LAT; private double mCurLng = DEFAULT_LNG; + private float mCurBea = DEFAULT_BEA; private double mSpeed = 1.2; /* 默认的速度,单位 m/s */ private static final int HANDLER_MSG_ID = 0; private static final String SERVICE_GO_HANDLER_NAME = "ServiceGoLocation"; @@ -146,7 +148,7 @@ public class ServiceGo extends Service { mJoyStick = new JoyStick(this); mJoyStick.setListener(new JoyStick.JoyStickClickListener() { @Override - public void onMoveInfo(double speed, double disLng, double disLat) { + public void onMoveInfo(double speed, double disLng, double disLat, double angle) { mSpeed = speed; // 根据当前的经纬度和距离,计算下一个经纬度 // Latitude: 1 deg = 110.574 km // 纬度的每度的距离大约为 110.574km @@ -154,6 +156,7 @@ public class ServiceGo extends Service { // 具体见:http://wp.mlab.tw/?p=2200 mCurLng += disLng / (111.320 * Math.cos(Math.abs(mCurLat) * Math.PI / 180)); mCurLat += disLat / 110.574; + mCurBea = (float) angle; } @Override @@ -231,7 +234,7 @@ public class ServiceGo extends Service { Location loc = new Location(LocationManager.GPS_PROVIDER); loc.setAccuracy(Criteria.ACCURACY_FINE); // 设定此位置的估计水平精度,以米为单位。 loc.setAltitude(55.0D); // 设置高度,在 WGS 84 参考坐标系中的米 - loc.setBearing(1.0F); // 方向(度) + loc.setBearing(mCurBea); // 方向(度) loc.setLatitude(mCurLat); // 纬度(度) loc.setLongitude(mCurLng); // 经度(度) loc.setTime(System.currentTimeMillis()); // 本地时间 @@ -286,7 +289,7 @@ public class ServiceGo extends Service { Location loc = new Location(LocationManager.NETWORK_PROVIDER); loc.setAccuracy(Criteria.ACCURACY_COARSE); // 设定此位置的估计水平精度,以米为单位。 loc.setAltitude(55.0D); // 设置高度,在 WGS 84 参考坐标系中的米 - loc.setBearing(1.0F); // 方向(度) + loc.setBearing(mCurBea); // 方向(度) loc.setLatitude(mCurLat); // 纬度(度) loc.setLongitude(mCurLng); // 经度(度) loc.setTime(System.currentTimeMillis()); // 本地时间