1. 程式人生 > >AndroidStudio下加入百度地圖的使用(四)——路線規劃

AndroidStudio下加入百度地圖的使用(四)——路線規劃

package com.jerehedu.administrator.baidumapapplication;
import android.app.Activity;
import android.location.Geocoder;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.InfoWindow; import com.baidu.mapapi.map.MapPoi; import com.baidu.mapapi.map.MapStatus; import
com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationConfigeration; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.overlayutil.DrivingRouteOvelray; import com.baidu.mapapi.overlayutil.OverlayManager;
import com.baidu.mapapi.overlayutil.TransitRouteOverlay; import com.baidu.mapapi.overlayutil.WalkingRouteOverlay; import com.baidu.mapapi.search.core.RouteLine; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.route.DrivingRouteLine; import com.baidu.mapapi.search.route.DrivingRoutePlanOption; import com.baidu.mapapi.search.route.DrivingRouteResult; import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener; import com.baidu.mapapi.search.route.PlanNode; import com.baidu.mapapi.search.route.RoutePlanSearch; import com.baidu.mapapi.search.route.TransitRouteLine; import com.baidu.mapapi.search.route.TransitRoutePlanOption; import com.baidu.mapapi.search.route.TransitRouteResult; import com.baidu.mapapi.search.route.WalkingRouteLine; import com.baidu.mapapi.search.route.WalkingRoutePlanOption; import com.baidu.mapapi.search.route.WalkingRouteResult; public class RoutePlanDemo extends Activity implements BaiduMap.OnMapClickListener, OnGetRoutePlanResultListener { //瀏覽路線節點相關 Button mBtnPre = null;//上一個節點 Button mBtnNext = null;//下一個節點 int nodeIndex = -1;//節點索引,供瀏覽節點時使用 RouteLine route = null; OverlayManager routeOverlay = null; boolean useDefaultIcon = false; private TextView popupText = null; //地圖相關,使用繼承MapView的MyRouteMapView目的是重寫touch事件實現泡泡處理 //如果不處理touch事件,則無需繼承,直接使用MapView即可 MapView mMapView = null; // 地圖View BaiduMap mBaidumap = null; //搜尋相關 RoutePlanSearch mSearch = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_routeplan); CharSequence titleLable = "路線規劃功能"; setTitle(titleLable); //初始化地圖 mMapView = (MapView) findViewById(R.id.map); mBaidumap = mMapView.getMap(); //設定中心點座標 LatLng cenpt = new LatLng(37.52,121.39); //定義地圖狀態 MapStatus mMapStatus = new MapStatus.Builder() .target(cenpt) .build(); //定義MapStatusUpdate物件,以便描述地圖狀態將要發生的變化 MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus); //改變地圖狀態 mBaidumap.setMapStatus(mMapStatusUpdate); mBtnPre = (Button) findViewById(R.id.pre); mBtnNext = (Button) findViewById(R.id.next); mBtnPre.setVisibility(View.INVISIBLE); mBtnNext.setVisibility(View.INVISIBLE); //地圖點選事件處理 mBaidumap.setOnMapClickListener(this); // 初始化搜尋模組,註冊事件監聽 mSearch = RoutePlanSearch.newInstance(); mSearch.setOnGetRoutePlanResultListener(this); } /** * 發起路線規劃搜尋示例 * * @param v */ public void SearchButtonProcess(View v) { //重置瀏覽節點的路線資料 route = null; mBtnPre.setVisibility(View.INVISIBLE); mBtnNext.setVisibility(View.INVISIBLE); mBaidumap.clear(); // 處理搜尋按鈕響應 EditText editSt = (EditText) findViewById(R.id.start); EditText editEn = (EditText) findViewById(R.id.end); //設定起終點資訊,對於tranist search 來說,城市名無意義 PlanNode stNode = PlanNode.withCityNameAndPlaceName("煙臺", editSt.getText().toString()); PlanNode enNode = PlanNode.withCityNameAndPlaceName("煙臺", editEn.getText().toString()); // 實際使用中請對起點終點城市進行正確的設定 if (v.getId() == R.id.drive) { mSearch.drivingSearch((new DrivingRoutePlanOption()) .from(stNode) .to(enNode)); } else if (v.getId() == R.id.transit) { mSearch.transitSearch((new TransitRoutePlanOption()) .from(stNode) .city("煙臺") .to(enNode)); } else if (v.getId() == R.id.walk) { mSearch.walkingSearch((new WalkingRoutePlanOption()) .from(stNode) .to(enNode)); } } /** * 節點瀏覽示例 * * @param v */ public void nodeClick(View v) { if (route == null || route.getAllStep() == null) { return; } if (nodeIndex == -1 && v.getId() == R.id.pre) { return; } //設定節點索引 if (v.getId() == R.id.next) { if (nodeIndex < route.getAllStep().size() - 1) { nodeIndex++; } else { return; } } else if (v.getId() == R.id.pre) { if (nodeIndex > 0) { nodeIndex--; } else { return; } } //獲取節結果資訊 LatLng nodeLocation = null; String nodeTitle = null; Object step = route.getAllStep().get(nodeIndex); if (step instanceof DrivingRouteLine.DrivingStep) { nodeLocation = ((DrivingRouteLine.DrivingStep) step).getEntrace().getLocation(); nodeTitle = ((DrivingRouteLine.DrivingStep) step).getInstructions(); } else if (step instanceof WalkingRouteLine.WalkingStep) { nodeLocation = ((WalkingRouteLine.WalkingStep) step).getEntrace().getLocation(); nodeTitle = ((WalkingRouteLine.WalkingStep) step).getInstructions(); } else if (step instanceof TransitRouteLine.TransitStep) { nodeLocation = ((TransitRouteLine.TransitStep) step).getEntrace().getLocation(); nodeTitle = ((TransitRouteLine.TransitStep) step).getInstructions(); } if (nodeLocation == null || nodeTitle == null) { return; } //移動節點至中心 mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation)); // show popup popupText = new TextView(RoutePlanDemo.this); popupText.setBackgroundResource(R.drawable.popup); popupText.setTextColor(0xFF000000); popupText.setText(nodeTitle); mBaidumap.showInfoWindow(new InfoWindow(popupText, nodeLocation,null)); } /** * 切換路線圖示,重新整理地圖使其生效 * 注意: 起終點圖示使用中心對齊. */ public void changeRouteIcon(View v) { if (routeOverlay == null) { return; } if (useDefaultIcon) { ((Button) v).setText("自定義起終點圖示"); Toast.makeText(this, "將使用系統起終點圖示", Toast.LENGTH_SHORT).show(); } else { ((Button) v).setText("系統起終點圖示"); Toast.makeText(this, "將使用自定義起終點圖示", Toast.LENGTH_SHORT).show(); } useDefaultIcon = !useDefaultIcon; routeOverlay.removeFromMap(); routeOverlay.addToMap(); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } @Override public void onGetWalkingRouteResult(WalkingRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(RoutePlanDemo.this, "抱歉,未找到結果", Toast.LENGTH_SHORT).show(); } if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { //起終點或途經點地址有岐義,通過以下介面獲取建議查詢資訊 //result.getSuggestAddrInfo() return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { nodeIndex = -1; mBtnPre.setVisibility(View.VISIBLE); mBtnNext.setVisibility(View.VISIBLE); route = result.getRouteLines().get(0); WalkingRouteOverlay overlay = new MyWalkingRouteOverlay(mBaidumap); mBaidumap.setOnMarkerClickListener(overlay); routeOverlay = overlay; overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); overlay.zoomToSpan(); } } @Override public void onGetTransitRouteResult(TransitRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(RoutePlanDemo.this, "抱歉,未找到結果", Toast.LENGTH_SHORT).show(); } if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { //起終點或途經點地址有岐義,通過以下介面獲取建議查詢資訊 //result.getSuggestAddrInfo() return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { nodeIndex = -1; mBtnPre.setVisibility(View.VISIBLE); mBtnNext.setVisibility(View.VISIBLE); route = result.getRouteLines().get(0); TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaidumap); mBaidumap.setOnMarkerClickListener(overlay); routeOverlay = overlay; overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); overlay.zoomToSpan(); } } @Override public void onGetDrivingRouteResult(DrivingRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(RoutePlanDemo.this, "抱歉,未找到結果", Toast.LENGTH_SHORT).show(); } if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { //起終點或途經點地址有岐義,通過以下介面獲取建議查詢資訊 //result.getSuggestAddrInfo() return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { nodeIndex = -1; mBtnPre.setVisibility(View.VISIBLE); mBtnNext.setVisibility(View.VISIBLE); route = result.getRouteLines().get(0); DrivingRouteOvelray overlay = new MyDrivingRouteOverlay(mBaidumap); routeOverlay = overlay; mBaidumap.setOnMarkerClickListener(overlay); overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); overlay.zoomToSpan(); } } //定製RouteOverly private class MyDrivingRouteOverlay extends DrivingRouteOvelray { public MyDrivingRouteOverlay(BaiduMap baiduMap) { super(baiduMap); } @Override public BitmapDescriptor getStartMarker() { if (useDefaultIcon) { return BitmapDescriptorFactory.fromResource(R.drawable.icon_st); } return null; } @Override public BitmapDescriptor getTerminalMarker() { if (useDefaultIcon) { return BitmapDescriptorFactory.fromResource(R.drawable.icon_en); } return null; } } private class MyWalkingRouteOverlay extends WalkingRouteOverlay { public MyWalkingRouteOverlay(BaiduMap baiduMap) { super(baiduMap); } @Override public BitmapDescriptor getStartMarker() { if (useDefaultIcon) { return BitmapDescriptorFactory.fromResource(R.drawable.icon_st); } return null; } @Override public BitmapDescriptor getTerminalMarker() { if (useDefaultIcon) { return BitmapDescriptorFactory.fromResource(R.drawable.icon_en); } return null; } } private class MyTransitRouteOverlay extends TransitRouteOverlay { public MyTransitRouteOverlay(BaiduMap baiduMap) { super(baiduMap); } @Override public BitmapDescriptor getStartMarker() { if (useDefaultIcon) { return BitmapDescriptorFactory.fromResource(R.drawable.icon_st); } return null; } @Override public BitmapDescriptor getTerminalMarker() { if (useDefaultIcon) { return BitmapDescriptorFactory.fromResource(R.drawable.icon_en); } return null; } } @Override public void onMapClick(LatLng point) { mBaidumap.hideInfoWindow(); } @Override public boolean onMapPoiClick(MapPoi poi) { return false; } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onDestroy() { mSearch.destroy(); mMapView.onDestroy(); super.onDestroy(); } }

相關推薦

AndroidStudio加入地圖的使用——路線規劃

package com.jerehedu.administrator.baidumapapplication; import android.app.Activity; import android.location.Geocoder; import android.os.Bundle; impo

AndroidStudio加入地圖的使用 ——API基本方法及常量屬性

package com.jerehedu.administrator.baidumapapplication; import android.app.Activity; import android.os.Bundle; import android.view.View; import and

關於地圖:點聚合及只顯示螢幕範圍內的marker

繼續來總結百度地圖。 前面我們將marker傳入了地圖中去,但是,隨著專案的深入,需要在地圖上顯示的marker也越來越多,這個時候就必然會出現一個問題:卡頓! 那麼百度地圖也為我們提供了“點聚合”來解決這個問題,不過我們還可以設定地圖只顯示螢幕範圍內的ma

Android Studio加入地圖的使用 ——環境搭建

  最近有學生要做畢業設計,會使用到定位及地圖資訊的功能,特此研究了一下,供大家參考,百度定位SDK已經更新到了5.0,地圖SDK已經更新到了3.5,但是在AndroidStudio中使用還是存在一些不穩定的情況,本章我們使用定位SDK 4.0,MAP SDK 3.0,下面我們開始搭建環境。 第一步:申請K

Android Studio加入地圖的使用——定位服務

package com.jerehedu.administrator.baidumapapplication; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import and

Android地圖結合方向傳感器我們自己定位哪裏走

troy 真機 pretty 刪除文件 RR tap 大神 素材 near Android百度地圖(二)結合方向傳感器我們自己定位哪裏走 本文代碼在http://b

android之使用地圖1

baidu man ports cte public phone sch lis stat Activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmln

地圖2——繪出小區邊界

效果圖: HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Bmap_test</title&g

Vue專案實戰引入地圖

一、在 http://lbsyun.baidu.com/ 申請 祕鑰 二、在index.html檔案中引入 <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=Fh9X4h

Vue專案實戰引入地圖

一、在 http://lbsyun.baidu.com/ 申請 祕鑰 二、在index.html檔案中引入 <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=Fh9X4h

第三方SDK:地圖定位 + 鷹眼軌跡

#1 基礎地圖 + 基礎定位# 可以看到地圖的介面。 如圖: Menu: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app

史上最詳細的Android Studio地圖BaiDuMap開發教程,可以當作官方文件的教科書級別教程!

本文是續寫一一哥作品,(一些大神沒想過要寫出來的,而笨小白又不懂的,,稍有完善。) 原文:http://blog.csdn.net/syc000666/article/details/50756551 由於工作原因,需要用到地圖模組,之前一直是用Eclipse開發百度地圖

Android整合地圖POI檢索

      有時候我們需要在地圖上搜索周邊資訊,我們可以用百度地圖提供的POI檢索。      POI(Point of Interest),中文可以翻譯為“興趣點”。在地理資訊系統中,一個POI可以是一棟房子、一個商鋪、一個郵筒、一個公交站等。百度地圖SDK提供三種類型的P

地圖AK申請與給應用簽名

1.申請金鑰 首先,使用百度地圖sdk需要一個AK,即金鑰,進入官網,點選下方申請金鑰 然後單擊建立應用,輸入相應資訊後提交即可獲得金鑰 注意,數字簽名和報名之間的分號為英文時候的分號。 數字簽名獲取方法:eclipse獲取數字簽名時只需要在window->P

android 地圖具體請看開放平臺

int over layout tco pap 平臺 jar pil inter compile files(‘libs/BaiduLBS_Android.jar‘) compile ‘com.android.support:appcompat-v7:26.+‘

地圖多點定位+聚合

初始化 默認 each 直接 搜索 不能 行政 參數 全部 首先頁面引用必須的兩個JS <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的Key值">

ios 整合地圖獲取定位,反向地理編碼

原因 :之所以使用百度地圖,是因為當時使用蘋果自帶的定位給後臺傳經緯度,後臺用百度解析誤差比較大,所以換成了百度地圖 本文主要講解下cocoapods 整合 看詳細整合請點選(cocoapod整合連結) 1 、首先去百度地圖開放平臺註冊賬戶 點選立即使用 然後註冊 2、然後進行郵箱啟用

vue-cli中使用地圖根據輸入框輸入的內容,獲取詳細地址

效果圖如下: 1.申請百度地圖金鑰(ak)-- http://lbsyun.baidu.com/index.php?title=jspopular (1)百度地圖開放平臺–開發文件–web開發–JavaScript API–服務介紹–產品簡介–申請金鑰(ak) (2)

Android學習筆記之地圖駕車路線搜尋及RouteOverlay步行路線搜尋及RouteOverlay

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

地圖icon,zIndex

百度地圖v2.0參考http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a3b2 覆蓋物(Marker) Icon: var myIcon = new BMap.Icon(           tagicon,//圖片