Android高德之旅(17)出行路線規(guī)劃

廢話

今天這篇來記錄一下地圖SDK中非常重要的一個功能:出行路線規(guī)劃才避。我相信高德地圖使用最多的也就是這個功能了遇革,當(dāng)然潦匈,我們今天的內(nèi)容可能還做不到高德地圖那么豐富的效果谚咬,比如林志玲嬌嫩的語音指引你烘嘱,但我們可以先做一個核心的功能就是把路線先畫出來昆禽。

簡介

我們在規(guī)劃路線時,主要考慮的是四種模式:

  • 駕車模式
  • 步行模式
  • 公交模式
  • 騎行模式

其實高德SDK里遠(yuǎn)遠(yuǎn)不止這四種模式蝇庭,還有很多細(xì)分模式醉鳖,比如不走高速、最少紅綠燈哮内、避免擁堵盗棵、多策略模式等等,道理是一樣的北发,我們暫且忽略這些細(xì)分模式纹因。

作為演示demo,我們也沒必要每種模式都演示下琳拨,換湯不換藥瞭恰,我們只演示下駕車模式即可,駕車模式學(xué)會了狱庇,其它任何模式都是手到擒來惊畏。

1、添加Marker

為了顯示出起點和終點密任,我們?yōu)槠瘘c和終點分別添加兩個Marker颜启。

private void addMarkers() {
    LatLng start = new LatLng(startPoint.getLatitude(), startPoint.getLongitude());
    aMap.addMarker(new MarkerOptions()
            .position(start)
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.start)));
            
    LatLng end = new LatLng(endPoint.getLatitude(), endPoint.getLongitude());
    aMap.addMarker(new MarkerOptions()
            .position(end)
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.end)));
}

2、路徑規(guī)劃

public void searchRoute() {
    RouteSearch routeSearch = new RouteSearch(this);
    routeSearch.setRouteSearchListener(listener);
    RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(
            startPoint, endPoint);
    RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(
            fromAndTo, //路徑規(guī)劃的起點和終點
            RouteSearch.DrivingDefault, //駕車模式
            null, //途經(jīng)點
            null, //示避讓區(qū)域
            "" //避讓道路
    );
    routeSearch.calculateDriveRouteAsyn(query);
}

在規(guī)劃路徑時批什,你可以選擇性地添加途經(jīng)點农曲,比如你和朋友約好在一個地方捎上他,還可以添加避讓區(qū)驻债,比如你不想經(jīng)過和前女友分手的地方乳规,可以說還是很人性化的。

3合呐、路徑回調(diào)

規(guī)劃的路徑會通過onDriveRouteSearched方法返回暮的,拿到返回數(shù)據(jù)后,我們就可以把路徑繪制在地圖上了淌实。

這里先別急冻辩,我們看下回調(diào)的數(shù)據(jù)猖腕。

@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
    List<DrivePath> drivePathList = result.getPaths();
}

回調(diào)中我們通過result可以獲得一個DrivePath的列表,為什么是一個列表呢恨闪?很簡單倘感,使用過高德地圖的都知道,起點通往終點的咙咽,可能是多種路線方案老玛,所以需要一個List來保存,那我們這里就取出第0個钧敞,接著往下看蜡豹。

@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
    List<DrivePath> drivePathList = result.getPaths();
    DrivePath drivePath = drivePathList.get(0);
    List<DriveStep> steps = drivePath.getSteps();
}

DrivePath有一個方法getSteps(),它會返回一個DriveStep列表溉苛,為什么又是一個列表镜廉?因為一段路徑可能是分成很多段的,每一段就是一個DriveStep愚战,這個也不奇怪娇唯,使用過高德地圖的都知道,轉(zhuǎn)彎凤巨、掉頭视乐、換高速都是一段新的開始。OK敢茁,接著往下看佑淀。

@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
    List<DrivePath> drivePathList = result.getPaths();
    DrivePath drivePath = drivePathList.get(0);
    List<DriveStep> steps = drivePath.getSteps();
    for (DriveStep step : steps) {
        List<LatLonPoint> polyline = step.getPolyline();
    }
}

遍歷steps,調(diào)用DriveStep.getPolyline()方法可以獲得一個List<LatLonPoint>彰檬,哦伸刃,到這里終于拿到我們想要的了,一個List<LatLonPoint>就可以描述一段路徑逢倍,所有的DriveStep連起來就描述了整條規(guī)劃路徑捧颅。那么至此,我們理論上已經(jīng)可以畫出規(guī)劃路徑了较雕。終于怎么畫碉哑,就是用之前畫線段的方法,這里就不細(xì)說了亮蒋。


3扣典、多色路徑

路徑雖然出來了,但是細(xì)心的朋友肯定發(fā)現(xiàn)了慎玖,這個路徑并沒有體現(xiàn)出道路的暢通狀況贮尖,使用過高德地圖的都知道,實時了解道路的暢通狀況有利于我們選擇恰當(dāng)?shù)穆肪€趁怔,那怎么根據(jù)不同路段暢通狀況繪制不同顏色呢湿硝,接著往下看薪前。

@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
    List<DrivePath> drivePathList = result.getPaths();
    DrivePath drivePath = drivePathList.get(0);
    List<DriveStep> steps = drivePath.getSteps();
    for (DriveStep step : steps) {
        List<LatLonPoint> polyline = step.getPolyline();
        List<TMC> tmcList = step.getTMCs();
        for(TMC tmc : tmcList) {
            String status = tmc.getStatus();
            List<LatLonPoint> polyline1 = tmc.getPolyline();
        }
    }
}

step對象中還有一個List<TMC>,通過TMC我們可以獲得status和List<LatLonPoint>关斜,這個status就是這段路暢通狀態(tài)的一個描述示括,它的取值只會是以下范圍:

  • “暢通”
  • “緩行”
  • “擁堵”
  • “嚴(yán)重?fù)矶隆?/li>
  • “未知”
    哦原來如此,結(jié)合下面的List<LatLonPoint>蚤吹,我們就可以把每一段路程都對應(yīng)上暢通狀況例诀,根據(jù)暢通狀況選擇不同的顏色,從而構(gòu)建出一個顏色List裁着,那么怎么把這個顏色List繪制在路徑上呢?
List<Integer> colorList = new ArrayList<>();
PolylineOptions polylineOptions = new PolylineOptions();
polylineOptions.colorValues(colorList);
aMap.addPolyline(polylineOptions);

在構(gòu)建PolylineOptions時拱她,我們可以調(diào)用polylineOptions.colorValues(colorList);把顏色List設(shè)置進(jìn)去二驰,這樣再調(diào)用aMap.addPolyline(polylineOptions)時,就會自動繪制出不同的顏色秉沼。


4桶雀、四種模式路徑規(guī)劃

OK,到這里我們基本理清了思路唬复,既然駕車模式可以矗积,其它任何一種模式當(dāng)然也難不倒我們。下面演示下四種模式的路徑規(guī)劃敞咧,作為本節(jié)的結(jié)束棘捣。


總結(jié)

今天這篇我沒有把全部的代碼貼出來,一來是太多了休建,二來是覺得沒必要乍恐,把思路理清楚是最重要的,沒有明白原理测砂,拿到源碼也沒意義茵烈。好吧,本期節(jié)目就到這里砌些,感謝大家收看呜投,我們下期再見~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市存璃,隨后出現(xiàn)的幾起案子仑荐,更是在濱河造成了極大的恐慌,老刑警劉巖有巧,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件释漆,死亡現(xiàn)場離奇詭異,居然都是意外死亡篮迎,警方通過查閱死者的電腦和手機(jī)男图,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門示姿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逊笆,你說我怎么就攤上這事栈戳。” “怎么了难裆?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵子檀,是天一觀的道長。 經(jīng)常有香客問我乃戈,道長褂痰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任症虑,我火速辦了婚禮缩歪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谍憔。我一直安慰自己匪蝙,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布习贫。 她就那樣靜靜地躺著逛球,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苫昌。 梳的紋絲不亂的頭發(fā)上颤绕,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音蜡歹,去河邊找鬼屋厘。 笑死,一個胖子當(dāng)著我的面吹牛月而,可吹牛的內(nèi)容都是我干的汗洒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼父款,長吁一口氣:“原來是場噩夢啊……” “哼溢谤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起憨攒,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤世杀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肝集,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞻坝,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年杏瞻,在試婚紗的時候發(fā)現(xiàn)自己被綠了所刀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衙荐。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浮创,靈堂內(nèi)的尸體忽然破棺而出忧吟,到底是詐尸還是另有隱情,我是刑警寧澤斩披,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布溜族,位于F島的核電站,受9級特大地震影響垦沉,放射性物質(zhì)發(fā)生泄漏煌抒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一乡话、第九天 我趴在偏房一處隱蔽的房頂上張望摧玫。 院中可真熱鬧,春花似錦绑青、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至芍躏,卻和暖如春邪乍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背对竣。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工庇楞, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人否纬。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓吕晌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親临燃。 傳聞我的和親對象是個殘疾皇子睛驳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容