華爲Map Kit提供的路徑規劃API是一套以HTTPS形式提供的步行、騎行、駕車路徑規劃以及行駛距離計算接口,經過JSON格式返回路徑查詢數據,提供路徑規劃能力。java
路徑規劃具體提供以下功能:android
駕車路徑規劃 API提供駕車路徑規劃能力,支持如下功能:git
-支持一次請求返回多條路線,最多支持3條路線。 -最多支持5個途經點。 -支持將來出行規劃。 -支持根據實時路況進行合理路線規劃。
用車服務:利用即時和將來出行路線規劃爲訂單提供準確的價格預估。在派單場景中,利高性能批量到達時間預估(ETA)服務,提高派單效率。github
物流:利用駕車和騎行路線規劃,爲支幹線物流和末端配送提供準確的路線規劃、耗時預估和道路收費預測。網絡
旅遊:用戶在預約酒店、設計旅遊線路時,經過路線規劃分析酒店、景點、交通站點之間的路線距離,幫助用戶更高效規劃行程。app
l 路徑規劃服務使用前,須要在開發者聯盟網站上獲取API KEY。ide
說明
若是API KEY包含特殊字符,則須要進行encodeURI編碼。例如:原始API KEY:ABC/DFG+ ,轉換結果: ABC%2FDFG%2B。性能
l 在AndroidManifest.xml文件裏面申請訪問網絡權限網站
<!-- 網絡權限 -->ui
<uses-permission android:name="android.permission.INTERNET" />
private MapFragment mMapFragment; private HuaweiMap hMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_directions); mMapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapfragment_mapfragmentdemo); mMapFragment.getMapAsync(this); }
private void getMyLocation() { Task<Location> locationTask = LocationServices.getFusedLocationProviderClient(this).getLastLocation(); locationTask.addOnCompleteListener(param0 -> { if (param0 != null) { Location location = param0.getResult(); double Lat = location.getLatitude(); double Lng = location.getLongitude(); myLocation = new LatLng(Lat, Lng); Log.d(TAG, " Lat is : " + Lat + ", Lng is : " + Lng); CameraUpdate CameraUpdate = CameraUpdateFactory.newLatLng(myLocation); hMap.moveCamera(CameraUpdate); } }).addOnFailureListener(param0 -> Log.d(TAG, "lastLocation is error")); }
hMap.setOnMapLongClickListener(latLng -> { if (null != mDestinationMarker) { mDestinationMarker.remove(); } if (null != mPolylines) { for (Polyline polyline : mPolylines) { polyline.remove(); } } enableAllBtn(); MarkerOptions options = new MarkerOptions().position(latLng).title("dest"); mDestinationMarker = hMap.addMarker(options); mDestinationMarker.setAnchor(0.5f,1f); StringBuilder dest = new StringBuilder(String.format(Locale.getDefault(), "%.6f", latLng.latitude)); dest.append(", ").append(String.format(Locale.getDefault(), "%.6f", latLng.longitude)); ((TextInputEditText)findViewById(R.id.dest_input)).setText(dest); mDest = latLng; });
private JSONObject buildRequest() { JSONObject request = new JSONObject(); try { JSONObject origin = new JSONObject(); origin.put("lng", myLocation.longitude); origin.put("lat", myLocation.latitude); JSONObject destination = new JSONObject(); destination.put("lng", mDest.longitude); destination.put("lat", mDest.latitude); request.put("origin", origin); request.put("destination", destination); } catch (JSONException e) { e.printStackTrace(); } return request; }
JSONObject route = new JSONObject(result); JSONArray routes = route.optJSONArray("routes"); JSONObject route1 = routes.optJSONObject(0); JSONArray paths = route1.optJSONArray("paths"); JSONObject path1 = paths.optJSONObject(0); JSONArray steps = path1.optJSONArray("steps"); for (int i = 0; i < steps.length(); i++) { PolylineOptions options = new PolylineOptions(); JSONObject step = steps.optJSONObject(i); JSONArray polyline = step.optJSONArray("polyline"); for (int j = 0; j < polyline.length(); j++) { JSONObject polyline_t = polyline.optJSONObject(j); options.add(new LatLng(polyline_t.getDouble("lat"), polyline_t.getDouble("lng"))); } Polyline pl = hMap.addPolyline(options.color(Color.BLUE).width(3)); mPolylines.add(pl); }
若是你對實現方式感興趣,能夠查看Github上的源碼:https://github.com/HMS-Core/h...
欲瞭解更多詳情,請參閱:
華爲開發者聯盟官網:https://developer.huawei.com/consumer/cn/hms?ha_source=hms1
獲取開發指導文檔:https://developer.huawei.com/consumer/cn/doc/development?ha_source=hms1
參與開發者討論請到Reddit社區:https://www.reddit.com/r/Huaw...
下載demo和示例代碼請到Github:https://github.com/HMS-Core
解決集成問題請到Stack Overflow:https://stackoverflow.com/que...
原文連接:https://developer.huawei.com/consumer/cn/forum/topic/0204403880529210184?fid=18
原做者:胡椒