Java 通过地址获取经纬度 - 高德地图
一、添加依赖
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0</version> </dependency>
二、请求工具类
import com.github.kevinsawicki.http.HttpRequest; /** * 请求工具类 */ public class RequestUtils { private static final String DEFAULT_CHARSET = "utf-8"; private static final int CONNECT_TIMEOUT_IN_MIS_SECOND = 10000; private static final int READ_TIMEOUT_IN_MIS_SECOND = 30000; public static RequestResult getJsonText(String url, String charset) { if (charset == null) charset = DEFAULT_CHARSET; HttpRequest request = HttpRequest.get(url).connectTimeout(CONNECT_TIMEOUT_IN_MIS_SECOND).readTimeout(READ_TIMEOUT_IN_MIS_SECOND); String body = request.body(charset); int code = request.code(); request.disconnect(); return new RequestResult(code, body); } }
三、返回接收类
import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; /** * 高德地图返回工具类 */ @Getter @Setter @AllArgsConstructor public class RequestResult { /** 状态码 */ private int code; /** 返回body */ private String body; }
四、高德地图工具类
import java.net.URLEncoder; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 获取高德地图经纬度 * * @author lixin.saho */ public class MapUtils { private static String API = "http://restapi.amap.com/v3/geocode/geo?key=<key>&s=rsv3&address=<address>"; private static String KEY = "key"; private static Pattern pattern = Pattern.compile("\"location\":\"(\\d+\\.\\d+),(\\d+\\.\\d+)\""); static { init(); } private static void init() { // System.out.println("高德地图工具类初始化"); // System.out.println("api: {}"+API); // System.out.println("key: {}"+KEY); API = API.replaceAll("<key>", KEY); } private static double[] getLatAndLonByAddress(String address) { try { String requestUrl = API.replaceAll("<address>", URLEncoder.encode(address, "UTF-8")); RequestResult requestResult = RequestUtils.getJsonText(requestUrl, null); if (200 != requestResult.getCode()) { return null; } requestUrl = requestResult.getBody(); if (requestUrl != null) { Matcher matcher = pattern.matcher(requestUrl); if (matcher.find() && matcher.groupCount() == 2) { double[] gps = new double[2]; gps[0] = Double.valueOf(matcher.group(1)); gps[1] = Double.valueOf(matcher.group(2)); return gps; } } } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) { double[] aaa = MapUtils.getLatAndLonByAddress("广东省深圳市福田区天安数码城创业科技大厦一期"); for (double cccc : aaa) { System.out.println(cccc); } System.out.println(MapUtils.getLatAndLonByAddress("广东省深圳市福田区天安数码城创业科技大厦一期")); }
五、高德地图的秘钥,及高德地图工具类里的key需要自己申请
作者:生活这把杀猪刀
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
做人如果没有梦想,那根咸鱼有什么区别!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性