两个地址之间的距离测量(使用高德API)
生活随笔
收集整理的這篇文章主要介紹了
两个地址之间的距离测量(使用高德API)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先:
注冊完成后如下圖,在我的應用里面創建,key的名稱自己取,key值自動生成
距離測量在 高德API路徑規劃里
https://lbs.amap.com/api/webservice/guide/api/direction
然后: 貼代碼吧
這里有直接通過經緯度獲取距離的
也有輸入一個地址獲取距離的
請求參數里面有一個type(API接口里有介紹)
0:直線距離
1:駕車導航距離(僅支持國內坐標)。
必須指出,當為1時會考慮路況,故在不同時間請求返回結果可能不同。
此策略和駕車路徑規劃接口的 strategy=4策略基本一致,策略為“ 躲避擁堵的路線,但是可能會存在繞路的情況,耗時可能較長 ”
若需要實現高德地圖客戶端效果,可以考慮使用駕車路徑規劃接口
3:步行規劃距離(僅支持5km之間的距離)
這里采用的是type=1,即駕車導航距離
import com.google.gson.Gson; 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; import java.util.List; import java.util.Map;public class NewGetDistance {private static final String key = "你申請的key";public static void main(String[] args){//111111根據經緯度查詢距離的//注意:高德最多取小數點后六位 //格式: 經度,緯度String origin = "108.960747"+","+"34.266451";//陜西省西安市新城區String destination = "117.150738"+","+"39.138203";//天津市南開區String distance = distance(origin, destination);System.out.println(distance);//222222根據地址查詢距離的String start = "陜西省西安市新城區";String end = "天津市南開區";String startLonLat = getLonLat(start);//獲取到開始地址的經緯度String endLonLat = getLonLat(end);//獲取到達地址的經緯度String distan = distance(startLonLat,endLonLat);System.out.println(distan);}/*** 高德地圖WebAPI : 行駛距離測量*/public static String distance(String origins,String destination) {int type = 1;//type=1,即駕車導航距離String url = "http://restapi.amap.com/v3/distance?"+ "origins="+origins+"&destination="+destination+"&type="+type+"&key="+ key;//這里用的Gson,也可以用下面的JSON,都試了一下Gson gson = new Gson();Map map = new Gson().fromJson(getLoadJson(url),Map.class);List list=(List)map.get("results");Map<String,String> map1 = (Map) list.get(0);String distance = map1.get("distance");System.out.println(distance);// JSONObject jsonobject = JSONObject.fromObject(loadJson(url)); // System.out.println(jsonobject.toString()); // JSONArray resultsArray = jsonobject.getJSONArray("results"); // JSONObject distanceObject = resultsArray.getJSONObject(0); // String resdistance = distanceObject.getString("distance");return distance;}/*** Java http 請求 獲取結果*/public static String getLoadJson (String url) {StringBuilder json = new StringBuilder();try {//下面那條URL請求返回結果無中文,可不轉換編碼格式URL urlObject = new URL(url);URLConnection uc = urlObject.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));String inputLine = null;while ( (inputLine = in.readLine()) != null) {json.append(inputLine);}in.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return json.toString();}/*** 根據給的地址獲得經緯度信息* @param address* @return*/private static String getLonLat(String address){//返回輸入地址address的經緯度信息, 格式是 經度,緯度String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key="+key+"&address="+address;String queryResult = getLoadJson(queryUrl); //高德接口返回的是JSON格式的字符串//這里也可以用Gson接//JSONObject是Map,可以通過key訪問值//JSONArray是List,可以通過索引訪問值JSONObject jo = new JSONObject().fromObject(queryResult);JSONArray ja = jo.getJSONArray("geocodes");return new JSONObject().fromObject(ja.getString(0)).get("location").toString();} }注意:這里的
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
這兩個包的依賴,注意版本號
Gson還是很好用的,Gson對象有toJson和fromJson兩個方法,toJson是對象轉字符串,fromJson是字符串轉對象。附上Gson的使用
記錄自己寫的過程
總結
以上是生活随笔為你收集整理的两个地址之间的距离测量(使用高德API)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑白棋出现pass 的条件 java_J
- 下一篇: 寒冬,是修炼内功的最好机会