package com.krt.common.util;
import com.alibaba.fastjson.JSONObject;
import com.krt.common.bean.DicDefalult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* @author lyp
* @description 高德地图工具类
* @date 2022/01/12 09:16
*/
@Slf4j
public class GaodeMapUtil {
/**
* key
*/
private final static String KEY = "";
/**
* 百度地图请求url
*/
private final static String URL = "https://restapi.amap.com/v3/geocode/regeo";
/**
* pi
*/
public static double PI = 3.14159265358979324;
/**
* bdo9ll坐标系转gc102坐标系
*
* @param bd09Lat
* @param bd09Lng
* @return
*/
public static Map<String, String> bd09llToGcj02(String bd09Lat, String bd09Lng) {
if (StringUtils.isBlank(bd09Lat) || StringUtils.isBlank(bd09Lng)) {
return new HashMap<>();
}
Double bdLat = Double.valueOf(bd09Lat);
Double bdLon = Double.valueOf(bd09Lng);
double x = bdLon - 0.0065;
double y = bdLat - 0.006;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * PI);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * PI);
double lng = z * Math.cos(theta);
double lat = z * Math.sin(theta);
Map<String, String> map = new HashMap<>();
map.put("lat", String.valueOf(lat));
map.put("lng", String.valueOf(lng));
return map;
}
/**
* 通过经纬度逆向物理地址
*
* @param lat
* @param lng
* @return
*/
public static String getAddressByLatAndLng(String lat, String lng) {
StringBuffer sb = new StringBuffer();
sb.append(URL).append("?key=").append(KEY)
.append("&location=").append(lng).append(",").append(lat);
try {
String json = HttpUtils.doGet(sb.toString(), null);
JSONObject jsonObject = JSONObject.parseObject(json);
if (DicDefalult.E_1.equals(jsonObject.getString("status"))) {
String address = jsonObject.getJSONObject("regeocode").getString("formatted_address");
log.info("高德地址逆向成功,获得地址是:{}", address);
return address;
}
} catch (Exception e) {
log.error("高德地址逆向失败:{}", e.getMessage());
}
return "";
}
public static void main(String[] args) {
Map<String, String> map = bd09llToGcj02("28.861348756267974667785826612597675281568", "115.36727983364266036633267068994293346688");
System.out.println(map);
String address = getAddressByLatAndLng(map.get("lat"), map.get("lng"));
System.out.println(address);
}
}
java bdo9ll坐标系转gc102坐标系,及高德根据经纬度逆向物理地址
最新推荐文章于 2022-12-15 10:41:50 发布