Java 根据地址查询经纬度
作者:@大木瓜
本文为作者原创,转载请注明出处:https://www.cnblogs.com/damugua/p/17275894.html
百度开放平台控制台:https://lbsyun.baidu.com/apiconsole/key#/home
经纬度比较网址:https://jingweidu.bmcx.com/
1、创建应用
2、写Java服务

/** * 通过字符串地址获取经纬度 * @Author: menghaipeng * @Date: 2023/3/31 11:31 */ public class DistanceUtil { public static final String SHOW_LOCATION = "showLocation&&showLocation"; public static final String STATUS = "status"; /** * 通过字符串地址获取经纬度 * @param address */ public static Point getPoint(String address) { //配置上自己的百度地图应用的AK String applicationId = "e2Py94HGFo5e6Np27uTqsdjbLeAky"; try { InputStream urlStream; URL url = new URL("https://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=" + applicationId + "&callback=showLocation"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.connect(); urlStream = connection.getInputStream(); java.io.BufferedReader reader = new java.io.BufferedReader(new InputStreamReader(urlStream)); String str = reader.readLine(); System.out.println(str); if(StringUtils.hasLength(str) && str.startsWith(SHOW_LOCATION)){ str = str.replaceAll("showLocation&&showLocation\\(",""); str = str.replaceAll("\\)",""); } JSONObject jsonObject = JSON.parseObject(str); if(jsonObject.getInteger(STATUS ) != 0) { return null; } JSONObject location = (JSONObject) ((JSONObject) jsonObject.get("result")).get("location"); //用经度分割返回的网页代码 return new Point(location.getDouble("lng"),location.getDouble("lat")); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 地球半径,进行经纬度运算需要用到的数据之一 */ private static final double EARTH_RADIUS = 6378137; /** * 根据坐标点获取弧度 * @param d * @return */ private static double rad(double d) { return d * Math.PI / 180.0; } /** * 根据两点之间经纬度坐标(double值),计算两点之间距离,单位为米 * @param point1 A点坐标 * @param point2 B点坐标 * @return */ public static double getDistance(Point point1, Point point2) { double radLat1 = rad(point1.getLat()); double radLat2 = rad(point2.getLat()); double a = radLat1 - radLat2; double b = rad(point1.getLng()) - rad(point2.getLng()); double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))); s = s * EARTH_RADIUS; s = Math.round(s * 10000) / 10000; return s; } }
存储经纬度的对象Point

/** * @description: * @author: menghaipeng * @create: 2023-03-31 09:22 **/ @Data @AllArgsConstructor @NoArgsConstructor public class Point { /** * 经度 */ private Double lng; /** * 纬度 */ private Double lat; }
成功!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-03-31 C#读取excel数据并显示在datagrilview控件