使用高德API介面查詢兩個地址之間的距離
阿新 • • 發佈:2019-01-26
要點:
1. 通過高德開放者平臺http://lbs.amap.com/,註冊一個開發者賬號,獲得一個KEY(查詢介面需要使用該KEY)
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公里左右的距離。