百度地圖----檢索功能的使用
阿新 • • 發佈:2019-01-27
百度地圖—-檢索功能的使用
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();
步行線路規劃:
步行線路規劃的方式與駕車線路規劃方式類似,在此不再贅述。