1. 程式人生 > >百度地圖----檢索功能的使用

百度地圖----檢索功能的使用

百度地圖—-檢索功能的使用

ONE Goal ,ONE Passion !

上面幾篇寫了如何整合以及使用百度地圖和覆蓋物.現在就說說百度地圖的檢索功能;
目前百度地圖SDK所整合的檢索服務包括:POI檢索、公交資訊查詢、線路規劃、地理編碼、線上建議查詢、短串分享。

PIO檢索:
POI(Point of Interest),中文可以翻譯為“興趣點”。在地理資訊系統中,一個POI可以是一棟房子、一個商鋪、一個郵筒、一個公交站等。

下面將以 周邊檢索 為例,向大家介紹如何使用檢索服務。

 // 第一步:建立POI檢索例項 
 poiSearch = PoiSearch.newInstance();

 //第二步:建立檢索選項---即檢索的一些條件  
PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption(); // 設定檢索中心點 nearbySearchOption.location(new LatLng(34.7568711, 113.663221)); //設定檢索的關鍵字---如超市,酒店,藥店等 nearbySearchOption.keyword("超市"); // 檢索半徑,單位是米
nearbySearchOption.radius(1000); //檢索頁數 nearbySearchOption.pageNum(10); //第三步: 發起附近檢索請求 poiSearch.searchNearby(nearbySearchOption); //第四步: 設定POI檢索監聽者; poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() { /** * 得到檢索結果 * @param
poiResult---檢索結果 */
@Override public void onGetPoiResult(PoiResult poiResult) { final List<PoiInfo> allPoi = poiResult.getAllPoi(); System.out.println("檢索地址" + allPoi); for (int i = 0; i < allPoi.size(); i++) { System.out.println("檢索地址" + allPoi.get(i).address); } } /** * 詳細資訊檢索的回撥方法 * @param poiDetailResult ---檢索結果 * 當檢索的是 POI詳情資訊 時才會回撥這個方法 * 如---- * 發起下面檢索: // uid是POI檢索中獲取的POI ID資訊 poiSearch .searchPoiDetail((new PoiDetailSearchOption()).poiUid(uid)); 此時結果會出現在poiDetailResult中 */ @Override public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) { final LatLng location = poiDetailResult.getLocation(); System.out.println("location----" + location); } }); } });

公交資訊檢索:

利用BusLineSearch方法,開發者可查詢公交線路的詳情資訊,實現方式如下:

第一步,發起POI檢索,獲取相應線路的UID;

//以城市內檢索為例,詳細方法請參考POI檢索部分的相關介紹  
poiSearch.searchInCity((new PoiCitySearchOption())
                        .city("北京")
                        .keyword("717"));

第二步,在POI檢索結果中判斷該POI型別是否為公交資訊;

// 此方法同上是poiSearch設定監聽後回撥的方法.
 /**
                     *   得到檢索結果
                     * @param poiResult---檢索結果
                     */
                    @Override
public void onGetPoiResult(PoiResult result) {  
    if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {  
        return;  
    }  
    //遍歷所有POI,找到型別為公交線路的POI  
    for (PoiInfo poi : result.getAllPoi()) {  
        if (poi.type == PoiInfo.POITYPE.BUS_LINE ||poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {  
            //說明該條POI為公交資訊,獲取該條POI的UID  
            busLineId = poi.uid;  
            break;  
        }  
    }  
}

第三步,定義並設定公交資訊結果監聽者(與POI類似),併發起公交詳情檢索;

//如下程式碼為發起檢索程式碼,定義監聽者和設定監聽器的方法與POI中的類似  
mBusLineSearch.searchBusLine((new BusLineSearchOption()  
    .city("北京”")  
    .uid(busLineId)));

線路規劃:
下面的用法基本和上面是一樣的,就不在一步一步的解釋了,直接使用百度官方解釋了.

公交線路規劃:
實現公交線路規劃的方式如下:
第一步,建立公交線路規劃檢索例項;
mSearch = RoutePlanSearch.newInstance();

第二步,建立公交線路規劃檢索監聽者;

OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() {  
    public void onGetWalkingRouteResult(WalkingRouteResult result) {  
        //    
    }  
    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) {  
        //建立路線覆蓋物來  顯示路線
            TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaidumap);  
            mBaidumap.setOnMarkerClickListener(overlay);  
            overlay.setData(result.getRouteLines().get(0));  
            overlay.addToMap();  
            overlay.zoomToSpan();  
        }  
    }  
    public void onGetDrivingRouteResult(DrivingRouteResult result) {  
        //   
    }  
};

第三步,設定公交線路規劃檢索監聽者;

mSearch.setOnGetRoutePlanResultListener(listener);

第四步,準備檢索起、終點資訊;

//建立節點
PlanNode stNode = PlanNode.withCityNameAndPlaceName("北京", "龍澤");  
PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", "西單");

第五步,發起公交線路規劃檢索;

mSearch.transitSearch((new TransitRoutePlanOption())  
    .from(stNode)  
    .city("北京")  
    .to(enNode));

第六步,釋放檢索例項;

mSearch.destory();

公交線路規劃結果的JSON結構圖如下:

TransitRouteResult {  //換乘路線結果  
    TaxiInfo: {  //打車資訊  
        int totalPrice ;  //總價格  
        String desc;  //打車描述資訊  
        int distance;  //距離  
        int duration;  //時間  
        int perKMPrice;  //單價  
        int startPrice;  //起步價  
    }  
    List<TransitRouteLine> : [   //換乘方案  
        {  
        TaxiInfo taxitInfo,   //打車資訊  
        VehicleInfo vehicleInfo,   //交通工具資訊  
        RouteNode entrance,  //路段入口  
        RouteNode exit,  //路段出口  
        TransitRouteStepType,   //路段型別  
        String instructions,   //路段說明  
        int distance,  //距離  
        int duration  //時間  
        },  
        ……  
    ]  
    SuggestAddrInfo: {   //建議起終點資訊  
        List<PoiInfo> suggestStartNode;    //建議起點  
        List<PoiInfo> suggestEndNode;  //建議終點  
        List<List<PoiInfo>> suggestWpNode;   //建議途經點  
        List<CityInfo> suggestStartCity;   //建議起點城市  
        List<CityInfo> suggestEndCity;   //建議終點城市  
        List<List<CityInfo>> suggestWpCity;    //建議途經點城市  
    }  
}

駕車線路規劃:

第一步,建立駕車線路規劃檢索例項;

mSearch = RoutePlanSearch.newInstance();

第二步,建立駕車線路規劃檢索監聽者;

OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() {  
    public void onGetWalkingRouteResult(WalkingRouteResult result) {  
        //獲取步行線路規劃結果  
    }  
    public void onGetTransitRouteResult(TransitRouteResult result) {  
        //獲取公交換乘路徑規劃結果  
    }  
    public void onGetDrivingRouteResult(DrivingRouteResult result) {  
        //獲取駕車線路規劃結果  
    }  
};

第三步,設定駕車線路規劃檢索監聽者;

mSearch.setOnGetRoutePlanResultListener(listener);

第四步,準備檢索起、終點資訊;

PlanNode stNode = PlanNode.withCityNameAndPlaceName("北京", "龍澤");  
PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", "西單");

第五步,發起駕車線路規劃檢索;

mSearch.drivingSearch((new DrivingRoutePlanOption())  
    .from(stNode)  
    .to(enNode));

第六步,釋放檢索例項;

mSearch.destory();

步行線路規劃:
步行線路規劃的方式與駕車線路規劃方式類似,在此不再贅述。