From bc306e56decb7ae54c94f3be92cddcd455e0111f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E9=BB=84=E8=9C=82coder?= Date: Thu, 15 Dec 2022 18:24:46 +0800 Subject: [PATCH] =?UTF-8?q?WGS84=20=E5=9D=90=E6=A0=87=E4=B8=8E=E5=A2=A8?= =?UTF-8?q?=E5=8D=A1=E6=89=98=E6=8A=95=E5=BD=B1=E4=BA=92=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WGS84 坐标与墨卡托投影互转 --- .../cn/hutool/core/util/CoordinateUtil.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/CoordinateUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/CoordinateUtil.java index 04ad3b485..554962c9e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/CoordinateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/CoordinateUtil.java @@ -133,6 +133,34 @@ public class CoordinateUtil { return gcj02ToWgs84(gcj02.lng, gcj02.lat); } + /** + * WGS84 坐标转为 墨卡托投影 + * + * @param lng 经度值 + * @param lat 纬度值 + * @return 墨卡托投影 + */ + public static Coordinate wgs84ToMercator(double lng, double lat) { + double x = lng * 20037508.342789 / 180; + double y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180); + y = y * 20037508.34789 / 180; + return new Coordinate(x, y); + } + + /** + * 墨卡托投影 转为 WGS84 坐标 + * + * @param mercatorX 墨卡托X坐标 + * @param mercatorY 墨卡托Y坐标 + * @return WGS84 坐标 + */ + public static Coordinate mercatorToWgs84(double mercatorX, double mercatorY) { + double x = mercatorX / 20037508.34 * 180; + double y = mercatorY / 20037508.34 * 180; + y = 180 / Math.PI * (2 * Math.atan(Math.exp(y * Math.PI / 180)) - Math.PI / 2); + return new Coordinate(x, y); + } + //----------------------------------------------------------------------------------- Private methods begin /**