摘要:本文介绍如何通过Java调用高德地图API,将具体地址转换为经纬度坐标。通过简单的代码示例演示完整的地址解析流程,并提供可直接复用的工具类。
一、实现原理
通过高德地图开放平台的地理编码API,可将结构化地址转换为经纬度坐标。其核心流程为:
-
构造包含地址参数的API请求URL
-
发送HTTP请求获取JSON响应
-
解析响应数据提取经纬度信息
二、实现步骤
1. 准备工作
-
注册高德开放平台账号
-
创建应用获取API Key(替换代码中的
YOUR_AMAP_KEY_HERE
)
2. 核心工具类
package com.ruoyi.quartz.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AMapUtils {
// 高德地图Key,请替换为你自己的key
public static final String KEY = "YOUR_AMAP_KEY_HERE";
private static Pattern pattern = Pattern.compile("\"location\":\"(\\d+\\.\\d+),(\\d+\\.\\d+)\"");
/**
* 通过具体位置获取经纬度坐标
* @param address 地址信息
* @return double数组 [经度, 纬度]
*/
public static double[] addressToGPS(String address) {
try {
// 构造API请求URL
String url = String.format(
"http://restapi.amap.com/v3/geocode/geo?&s=rsv3&address=%s&key=%s",
address,
KEY
);
// 发送HTTP GET请求
URLConnection conn = new URL(url).openConnection();
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8")
);
// 读取响应数据
StringBuilder response = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
response.append(line);
}
// 使用正则表达式解析经纬度
Matcher matcher = pattern.matcher(response.toString());
if (matcher.find() && matcher.groupCount() == 2) {
return new double[] {
Double.parseDouble(matcher.group(1)),
Double.parseDouble(matcher.group(2))
};
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 使用示例
public static void main(String[] args) {
String address = "北京市朝阳区阜通东大街6号";
double[] coordinates = addressToGPS(address);
if (coordinates != null) {
System.out.printf("地址: %s%n经度: %.6f%n纬度: %.6f",
address, coordinates[0], coordinates[1]);
} else {
System.out.println("坐标获取失败");
}
}
}
三、代码解析
1. API请求构造
String url = String.format(
"http://restapi.amap.com/v3/geocode/geo?&s=rsv3&address=%s&key=%s",
address,
KEY
);
-
address
参数需要进行URL编码(代码中未展示,实际使用时建议添加) -
key
需替换为真实的高德API Key
2. 数据解析
使用正则表达式匹配JSON响应中的经纬度:
Pattern pattern = Pattern.compile("\"location\":\"(\\d+\\.\\d+),(\\d+\\.\\d+)\"");
-
匹配示例:
"location":"116.480983,39.989628"
四、执行示例
输入地址:
String address = "北京市朝阳区阜通东大街6号";
预期输出:
地址: 北京市朝阳区阜通东大街6号
经度: 116.480983
纬度: 39.989628
五、注意事项
-
API调用限制
免费版每日限额2000次,企业级应用需购买更高配额 -
异常处理建议
-
添加网络请求超时设置
-
处理
address
包含特殊字符的情况(URL编码) -
建议使用JSON解析库(如Jackson)替代正则表达式
-
-
精度问题
地址描述的准确性直接影响坐标精度,建议使用详细的结构化地址
结语:本文提供的方案可快速集成到位置服务、物流系统等需要地理信息处理的Java应用中。建议根据实际业务需求进行扩展优化。
注意事项:请遵守高德地图API使用条款,禁止将坐标数据用于非法用途。