From 66a4c0488ca6da273098058d70dabb0fe9b9bd8d Mon Sep 17 00:00:00 2001 From: Blankj Date: Mon, 22 Feb 2021 00:07:51 +0800 Subject: [PATCH] see 02/22 log --- .../blankj/subutil/util/CoordinateUtils.java | 28 +++++++++++ .../com/blankj/utilcode/util/IntentUtils.java | 4 +- .../com/blankj/utilcode/util/ScreenUtils.java | 46 ++++++++----------- 3 files changed, 50 insertions(+), 28 deletions(-) diff --git a/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java index ee6d78a1..c205a52a 100644 --- a/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java +++ b/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java @@ -121,6 +121,34 @@ public final class CoordinateUtils { return gcj02ToBd09(gcj[0], gcj[1]); } + /** + * Mercator 坐标转 WGS84 坐标 + * + * @param lng Mercator 坐标经度 + * @param lat Mercator 坐标纬度 + * @return WGS84 坐标:[经度,纬度] + */ + public static double[] mercatorToWGS84(double lng, double lat) { + double x = lng / 20037508.34d * 180.; + double y = lat / 20037508.34d * 180.; + y = 180 / PI * (2 * Math.atan(Math.exp(y * PI / 180.0)) - PI / 2); + return new double[]{x, y}; + } + + /** + * WGS84 坐标转 Mercator 坐标 + * + * @param lng WGS84 坐标经度 + * @param lat WGS84 坐标纬度 + * @return Mercator 坐标:[经度,纬度] + */ + public static double[] wgs84ToMercator(double lng, double lat) { + double x = lng * 20037508.34D / 180.0; + double y = Math.log(Math.tan((90.0 + lat) * PI / 360.0)) / (PI / 180.); + y = y * 20037508.34D / 180.0; + return new double[]{x, y}; + } + private static double transformLat(double lng, double lat) { double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)); ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0; diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java index 4a821458..fccddd8d 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java @@ -389,9 +389,9 @@ public final class IntentUtils { public static Intent getShutdownIntent() { Intent intent; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - intent = new Intent(Intent.ACTION_SHUTDOWN); - } else { intent = new Intent("com.android.internal.intent.action.REQUEST_SHUTDOWN"); + } else { + intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN"); } intent.putExtra("android.intent.extra.KEY_CONFIRM", false); return intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java index cb742b7a..623e1551 100644 --- a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java @@ -112,39 +112,34 @@ public final class ScreenUtils { public static int getScreenDensityDpi() { return Resources.getSystem().getDisplayMetrics().densityDpi; } - - - - + /** - * Return X (width) of the screen expressed as dots-per-inch. + * Return the exact physical pixels per inch of the screen in the Y dimension. * - * @return the width of screen density expressed as dots-per-inch + * @return the exact physical pixels per inch of the screen in the Y dimension */ - public static int getScreenXDpi() { + public static float getScreenXDpi() { return Resources.getSystem().getDisplayMetrics().xdpi; } - + /** - * Return Y (height) of the screen expressed as dots-per-inch. + * Return the exact physical pixels per inch of the screen in the Y dimension. * - * @return the height of screen density expressed as dots-per-inch + * @return the exact physical pixels per inch of the screen in the Y dimension */ - public static int getScreenYDpi() { + public static float getScreenYDpi() { return Resources.getSystem().getDisplayMetrics().ydpi; } - - - + /** * Return the distance between the given View's X (start point of View's width) and the screen width. * * @return the distance between the given View's X (start point of View's width) and the screen width. */ - public float calculateDistanceByX(View view) { - int[] point = new int[0]; + public int calculateDistanceByX(View view) { + int[] point = new int[2]; view.getLocationOnScreen(point); - return (getScreenWidth() - point[0]).toFloat(); + return getScreenWidth() - point[0]; } /** @@ -152,10 +147,10 @@ public final class ScreenUtils { * * @return the distance between the given View's Y (start point of View's height) and the screen height. */ - public float calculateDistanceByY(View view) { - int[] point = new int[0]; + public int calculateDistanceByY(View view) { + int[] point = new int[2]; view.getLocationOnScreen(point); - return (getScreenHeight() - point[1]).toFloat(); + return getScreenHeight() - point[1]; } /** @@ -163,23 +158,22 @@ public final class ScreenUtils { * * @return X coordinate of the given View on the screen. */ - public int getViewX(View view){ - int[] point = new int[0]; + public int getViewX(View view) { + int[] point = new int[2]; view.getLocationOnScreen(point); return point[0]; } - + /** * Return the Y coordinate of the given View on the screen. * * @return Y coordinate of the given View on the screen. */ - public int getViewY(View view){ - int[] point = new int[0]; + public int getViewY(View view) { + int[] point = new int[2]; view.getLocationOnScreen(point); return point[1]; } - /** * Set full screen. -- GitLab