百度地图----检索功能的使用

百度地图—-检索功能的使用

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();

步行线路规划:
步行线路规划的方式与驾车线路规划方式类似,在此不再赘述。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值