版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a_step_further/article/details/54025386
要点:
1. 通过高德开放者平台http://lbs.amap.com/,注册一个开发者账号,获得一个KEY(查询接口需要使用该KEY)
2. 阅读高德web 服务API接口的文档 http://lbs.amap.com/api/webservice/summary/
3. 可将编程过程分解过两步
- 获取一个地址的经度、纬度信息
- 通过两个地址的经纬度,查询距离
上代码:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class getDistance {
public static void main(String[] args){
String start = "浙江省杭州市西湖区";
String end = "郑州市金水区";
String startLonLat = getLonLat(start);
String endLonLat = getLonLat(end);
System.out.println(startLonLat);
System.out.println(endLonLat);
Long dis = getDistance(startLonLat,endLonLat);
System.out.println(dis);
}
private static String getLonLat(String address){
//返回输入地址address的经纬度信息, 格式是 经度,纬度
String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key=你申请到的KEY&address="+address;
String queryResult = getResponse(queryUrl); //高德接品返回的是JSON格式的字符串
JSONObject jo = new JSONObject().fromObject(queryResult);
JSONArray ja = jo.getJSONArray("geocodes");
return new JSONObject().fromObject(ja.getString(0)).get("location").toString();
}
private static Long getDistance(String startLonLat, String endLonLat){
//返回起始地startAddr与目的地endAddr之间的距离,单位:米
Long result = new Long(0);
String queryUrl = "http://restapi.amap.com/v3/distance?key=你申请到的KEY&origins="+startLonLat+"&destination="+endLonLat;
String queryResult = getResponse(queryUrl);
JSONObject jo = new JSONObject().fromObject(queryResult);
JSONArray ja = jo.getJSONArray("results");
result = Long.parseLong(new JSONObject().fromObject(ja.getString(0)).get("distance").toString());
return result;
// return queryResult;
}
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 (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result.toString();
}
}
运行结果:
通过高德地图手机APP查询两地之间的距离,验证一下,如下图所示,发现确实是943公里左右的距离。