public class Transform { private static final double PI = Math.PI; private static final double mercatorMax = 20037508.34; /** * 4326坐標轉3857即經緯度轉墨卡托 * @param lon * @param lat */ public static void transformTo3857(double lon,double lat){ double mercatorx = lon * mercatorMax / 180; double mercatory = Math.log(Math.tan(((90+lat) * PI) / 360)) / (PI / 180); mercatory = mercatory * mercatory / 180; System.out.printf("經緯度坐標轉墨卡托后的坐標:%f,%f",mercatorx,mercatory); } /** * 墨卡托坐標轉3857即墨卡托轉經緯度 * @param mercatorx * @param mercatory */ public static void tarnsformTo4326(double mercatorx,double mercatory){ double lon = mercatorx/mercatorMax * 180; double lat = mercatory/mercatorMax * 180; lat = (180 / PI) * (2 *Math.atan(Math.exp((lat * PI) / 180)) - PI / 2); System.out.printf("墨卡托坐標轉經緯度后的坐標:%f,%f \n",lon,lat); } public static void main(String[] args) { tarnsformTo4326(13135699.913606284,3763310.6271446524); transformTo3857(118.000000,32.000000); } }