开发指南:https://lbs.amap.com/api/webservice/guide/api/georegeo/
一、首先需要注册成为开发者,注册成功后就可以使用此开放平台。
高德开放平台网址:https://lbs.amap.com/
点击注册:
选择注册方式,注册完成进入下一步:选择认证方式
我是个人开发,就选个人认证开发者,如果是企业就选企业认证开发者
填写完善信息,进行支付宝扫描实名认证,勾选同意,点击提交资料:
认证结果:
二、进入控制台
使用 API 前请您先注册高德账号申请Key。
1.进入控制台
https://console.amap.com/dev/key/app
2.在应用管理创建应用
创建好的应用:
3.为上面的应用添加key
生成的key:
注:此key值是以后,请求api所用的key,一定要保存好
服务示例:
https://restapi.amap.com/v3/geocode/geo?address=北京市朝阳区阜通东大街6号&output=XML&key=<用户的key>
请求示例:
示例说明:address 是需要获取坐标的结构化地址,output(XML)用于指定返回数据的格式
,Key是用户请求数据的身份标识。
localtion中逗号前面为经度,后面为纬度
由此api,把地址转为经纬度。
三、Java调用高德地图API根据详细地址获取经纬度
代码如下:
package com.example.listdemo.utils;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
/**
* 地址转经纬度(使用高德地图获取地址信息的经纬度)
* @author qzz
*/
public class AddressLocationUtil {
/**
* Key
*/
private static String KEY="<高德key>";
public static String GD_URL="https://restapi.amap.com/v3/geocode/geo?address=%s&key=%s";
/**
* 成功标识
*/
private static String SUCCESS_FLAG="1";
/**
* 根据地址获取对应的经纬度信息
* @param address
* @return
*/
public static String getLonAndLatByAddress(String address){
String location="";
GD_URL = String.format(GD_URL, address, KEY);
//高德接口返回的是JSON格式的字符串
String queryResult = getResponse(GD_URL);
JSONObject obj = JSONObject.parseObject(queryResult);
if(String.valueOf(obj.get("status")).equals(SUCCESS_FLAG)){
JSONObject jobJSON = JSONObject.parseObject(obj.get("geocodes").toString().substring(1, obj.get("geocodes").toString().length() - 1));
location = String.valueOf(jobJSON.get("location"));
}else{
throw new RuntimeException("地址转换经纬度失败,错误码:" + obj.get("infocode"));
}
return location;
}
/**
* 发送请求
*
* @param serverUrl 请求地址
*/
private static String getResponse(String serverUrl) {
// 用JAVA发起http请求,并返回json格式的结果
StringBuffer result = new StringBuffer();
try {
URL url = new URL(serverUrl);
URLConnection conn = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
public static void main(String[] args) {
String address="北京市朝阳区阜通东大街6号";
String location=getLonAndLatByAddress(address);
System.out.println("经纬度:" + location);
}
}
执行结果: