1. 程式人生 > >使用高德API介面查詢兩個地址之間的距離

使用高德API介面查詢兩個地址之間的距離

要點:

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公里左右的距離。