Commit 4908210b authored by Administrator's avatar Administrator

个大图商坐标系转换

parent b27b4934
......@@ -8,8 +8,8 @@ android {
applicationId "com.virjar.ratel.virtuallocation"
minSdkVersion 19
targetSdkVersion 28
versionCode 20210420
versionName "v1.3"
versionCode 20210421
versionName "v1.4"
archivesBaseName = "JDY_${versionName}".replace(' ', '_')
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"//, "x86","arm64-v8a","x86_64"
......
......@@ -36,6 +36,7 @@ import top.littlerich.virtuallocation.common.AppApplication;
public class XPosedPlugin implements IRposedHookLoadPackage {
private static final String TAG = AppApplication.tag;
private static boolean hasMapApi = false;
@Override
public void handleLoadPackage(RC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
......@@ -76,8 +77,15 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
LocationListener fakeLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
location.setLatitude(AppApplication.mockGPS.mLatitude);
location.setLongitude(AppApplication.mockGPS.mLongitude);
if (!hasMapApi) {
double x = AppApplication.mockGPS.mLongitude - 0.0065, y = AppApplication.mockGPS.mLatitude - 0.0035;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);
double tempLng = z * Math.cos(theta);
double tempLat = z * Math.sin(theta);
location.setLatitude(tempLat);
location.setLongitude(tempLng);
}
}
@Override
......@@ -112,8 +120,15 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
if (location == null) {
return;
}
location.setLatitude(AppApplication.mockGPS.mLatitude);
location.setLongitude(AppApplication.mockGPS.mLongitude);
if (!hasMapApi) {
double x = AppApplication.mockGPS.mLongitude - 0.0065, y = AppApplication.mockGPS.mLatitude - 0.0035;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);
double tempLng = z * Math.cos(theta);
double tempLat = z * Math.sin(theta);
location.setLatitude(tempLat);
location.setLongitude(tempLng);
}
}
});
}
......@@ -128,6 +143,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
@Override
public void onClassLoad(final Class<?> clazz) {
Log.i(AppApplication.tag, "命中腾讯API:" + clazz);
hasMapApi = true;
// public final int requestLocationUpdates(TencentLocationRequest var1, TencentLocationListener var2) {
// public final int requestLocationUpdates(TencentLocationRequest var1, TencentLocationListener var2, Looper var3) {
//public final int requestSingleFreshLocation(TencentLocationRequest var1, TencentLocationListener var2, Looper var3) {
......@@ -263,6 +279,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
@Override
public void onClassLoad(Class<?> clazz) {
Log.i(AppApplication.tag, "命中百度API:" + clazz);
hasMapApi = true;
RposedBridge.hookAllMethods(clazz, "registerLocationListener", new RC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
......@@ -326,7 +343,7 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
@Override
public void onClassLoad(Class<?> clazz) {
Log.i(AppApplication.tag, "命中高德API:" + clazz);
hasMapApi = true;
RposedHelpers.findAndHookMethod(clazz, "setLocationListener",
"com.amap.api.location.AMapLocationListener",
new RC_MethodHook() {
......@@ -361,9 +378,16 @@ public class XPosedPlugin implements IRposedHookLoadPackage {
continue;
}
// 我们是百度坐标系,这里是高德,所以进行一次坐标系转换
Location location = (Location) obj;
location.setLatitude(AppApplication.mockGPS.mLatitude);
location.setLongitude(AppApplication.mockGPS.mLongitude);
double x = AppApplication.mockGPS.mLongitude - 0.0065, y = AppApplication.mockGPS.mLatitude - 0.0035;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);
double tempLng = z * Math.cos(theta);
double tempLat = z * Math.sin(theta);
location.setLatitude(tempLat);
location.setLongitude(tempLng);
// public void setAddress(String var1) {
try {
......
......@@ -19,6 +19,7 @@ import org.json.JSONObject;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import top.littlerich.virtuallocation.model.Gps;
import top.littlerich.virtuallocation.service.LocationService;
......@@ -150,6 +151,9 @@ public class AppApplication extends Application {
if (lat == -1 && lng == -1) {
return;
}
Random random = new Random();
lat += (random.nextDouble() - 0.5) * 0.0012;
lng += (random.nextDouble() - 0.5) * 0.001;
mockGPS = new Gps(lat, lng, address);
} catch (Exception e) {
Log.e(AppApplication.tag, "error for queryMockGPS", e);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment