美文网首页优秀案例第三方扩展Android开发实战总结
Android百度地图(六):百度地图POI检索,行政区边界、公

Android百度地图(六):百度地图POI检索,行政区边界、公

作者: zhh_happig | 来源:发表于2017-07-16 19:52 被阅读3210次

    转载、引用请标明出处
    http://www.jianshu.com/p/026fd4f96d4d
    本文出自zhh_happig的简书博客,谢谢

    Android百度地图(一):百度地图定位sdk 类方法参数、定位原理详细介绍
    Android百度地图(二):百度地图sdk显示位置点、图层绘制
    Android百度地图(三):百度地图画运动轨迹及图层点击事件处理
    Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼sdk服务
    Android百度地图(五):百度地图鹰眼sdk监控进出地理围栏(区域)

    上一篇文章介绍了百度鹰眼sdk监控进出围栏的功能,本篇将详细介绍百度地图中POI检索、公交查询、行政区边界坐标获取、两点之间的路径规划和地理编码(坐标和地址之间的转换)。

    一 POI检索

    1.POI简介
    POI是兴趣点的意思,地图上标注的商铺、饭店、学校、银行、医院、车站等等都是POI。

    地图上的POI是可以点击的,通过设置mBaiduMap.setOnMapClickListener监听,在onMapPoiClick回调方法中就可以获取到POI信息,包括经纬度、POI的描述等。

    如果你获取到一个位置点,那么也可以查询这个位置点附近的POI,接下来我们就来介绍一下如何查询POI,包括:位置点周边查询、指定区域查询、城市内查询。

    2.POI检索api详解

    /*应用场景:输入银行,点击搜索,地图上显示各个银行的红色泡泡图标,点击银行图标,显示银行具体信息*/
    
    //以下都是伪代码
    PoiSearch mPoiSearch = PoiSearch.newInstance();//初始化POI检索
    mPoiSearch.setOnGetPoiSearchResultListener(listener);//注册搜索事件监听
    
    /**
    * 搜索位置点周边POI
    */
    PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption(); //POI附近检索参数设置类
    nearbySearchOption.keyword(keyword);//搜索关键字,比如:银行、网吧、餐厅等
    nearbySearchOption.location(center);//搜索的位置点
    nearbySearchOption.radius(radius);//搜索覆盖半径
    nearbySearchOption.sortType(PoiSortType.distance_from_near_to_far);//搜索类型,从近至远
    nearbySearchOption.pageNum(pageIndex);//查询第几页:POI量可能会很多,会有分页查询;
    nearbySearchOption.pageCapacity(pageCapacity)//设置每页查询的个数,默认10个
    mPoiSearch.searchNearby(nearbySearchOption);//查询
    
    /**
    * 搜索指定区域POI
    */
    PoiBoundSearchOption boundSearchOption = new PoiBoundSearchOption();
    
    /**
    * LatLngBounds searchbound:地理范围数据结构,两个点就可以确定一个矩形
    * southwest:西南点
    * northeast:东北点
    */
    LatLngBounds searchbound = new LatLngBounds.Builder().include(southwest).include(northeast).build();
    boundSearchOption.bound(searchbound);//设置边界
    boundSearchOption.keyword(keyword);
    boundSearchOption.pageNum(pageIndex);
    mPoiSearch.searchInBound(boundSearchOption);//查询
    
    /**
    * 搜索城市内POI
    */
    PoiCitySearchOption citySearchOption = new PoiCitySearchOption();
    citySearchOption.city(citystr);//城市名称,最小到区级单位
    citySearchOption.keyword(keyword);
    citySearchOption.isReturnAddr(true);//是否返回门址类信息:xx区xx路xx号
    citySearchOption.pageNum(pageIndex);
    mPoiSearch.searchInCity(citySearchOption);//查询
    
    /**
    * 查询POI结果回调监听器,包括周边,区域,城市返回的搜索结果
    */
    OnGetPoiSearchResultListener listener = new OnGetPoiSearchResultListener() {
                
          @Override
          public void onGetPoiResult(PoiResult poiResult) {//获取Poi检索列表
               /**
               * PoiInfo中包含了经纬度、城市、地址信息、poi名称、uid、邮编、电话等等信息;
                 有了这些,你是不是可以可以在这里画一个自定义的图层了,然后添加点击事件,做一些操作了呢
               */
               List<PoiInfo> poiInfos = result.getAllPoi();//poi列表
               
               /**
               * PoiAddrInfo:只包含地址、经纬度、名称
               */
               List<PoiAddrInfo> PoiAddrInfos = result.getAllAddr();
          }
    
          @Override
          public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {//获取某个Poi详细信息
               /**
               * 当执行以下请求时,此方法回调
               * PoiDetailSearchOption detailSearchOption = new PoiDetailSearchOption();
                 detailSearchOption.poiUid(poiInfo.uid);//设置要查询的poi的uid
                 mPoiSearch.searchPoiDetail(detailSearchOption);//查询poi详细信息
               */
               //poiDetailResult里面包含poi的巨多信息,你想要的都有,这里不列举了
          }
    
          @Override
          public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { //查询室内poi检索结果回调
               /**
               * 当执行以下请求时,此方法回调
               * PoiIndoorOption indoorOption = new PoiIndoorOption();
                 indoorOption.poiFloor(floor);//楼层
                 mPoiSearch.searchPoiDetail(indoorOption);
               */
          }
    }
    
    //再介绍一个推荐查询,应用场景:百度地图搜索输入:银行,百度会给你推荐各大银行供你选择,点击后显示具体位置及POI信息
    SuggestionSearch mSuggestionSearch = SuggestionSearch.newInstance();//初始化
    mSuggestionSearch.setOnGetSuggestionResultListener(this);//设置监听
    
    SuggestionSearchOption sSption = new SuggestionSearchOption();
    sSption.city(cityStr);//指定城市
    sSption.keyword(keyword);//关键字
    sSption.location(loction);//指定位置,选填,设置位置之后,返回结果按距离该位置的远近进行排序
    sSption.citylimit(true);//设置限制城市范围,仅返回指定城市检索结果,默认为false
    mSuggestionSearch.requestSuggestion(sSption);
    
    OnGetSuggestionResultListener suggestionlistener = new OnGetSuggestionResultListener() {
                
          @Override
          public void onGetSuggestionResult(SuggestionResult result) {//获取推荐POI列表
               /*
               * SuggestionInfo中包含的信息有限,只包含:联想词,坐标点,POI的uid等
                 如果想要POI的详细信息,还得利用uid通过mPoiSearch.searchPoiDetail获取
               */
               List<SuggestionResult.SuggestionInfo> suggestionInfos = result.getAllSuggestions();
          }
    };
    

    效果图


    银行poi
    建议查询

    二 地理编码

    1.地理编码简介
    地理编码分:正向地图编码、反向地图编码
    正向地理编码:将地址信息转换为坐标点
    反向地理编码:将坐标点转换为地址信息

    2.地理编码api详解

    GeoCoder mSearch = GeoCoder.newInstance();//初始化地理编码
    mSearch.setOnGetGeoCodeResultListener(listener);//设置回调监听
    
    ReverseGeoCodeOption reverseGeoCodeOption = new ReverseGeoCodeOption();
    reverseGeoCodeOption.location(new LatLng(36.897,127.9897));//设置坐标点
    mSearch.reverseGeoCode(reverseGeoCodeOption);//将坐标点转换为地址信息
    
    GeoCodeOption geoCodeOption = new GeoCodeOption();
    geoCodeOption.address(addressStr);//设置地址
    geoCodeOption.city(cityStr);//设置城市
    mSearch.geocode(geoCodeOption);//将地址信息转换为坐标点
    
    OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() {
            
        @Override
        public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
            //正向地理编码回调,注意geoCodeResult中错误码的处理
            geoCodeResult.getLocation();//坐标点
            geoCodeResult.getAddress();//地址信息
        }
    
        @Override
        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
            //反向地理编码回调
            reverseGeoCodeResult.getAddress();//简要地址信息
            reverseGeoCodeResult.getAddressDetail();//层次化地址信息
            reverseGeoCodeResult.getBusinessCircle();//所属商圈名称
            reverseGeoCodeResult.getPoiList();//周边POI信息集合
            reverseGeoCodeResult.getSematicDescription();//描述信息
            reverseGeoCodeResult.getLocation();//坐标点
        }
    });
    

    三 行政区边界数据检索

    根据省、市、县(区)级行政区划名称,查询行政区划的详细边界信息。

    DistrictSearch mDistrictSearch = DistrictSearch.newInstance();//初始化行政区检索
    mDistrictSearch.setOnDistrictSearchListener(listener );//设置回调监听
    
    DistrictSearchOption districtSearchOption = new DistrictSearchOption();
    districtSearchOption.cityName(cityStr);//检索城市名称
    districtSearchOption.districtName(districtStr);//检索的区县名称
    mDistrictSearch.searchDistrict(districtSearchOption);//请求行政区数据
    
    OnGetDistricSearchResultListener listener = new OnGetDistricSearchResultListener() {
                
        @Override
        public void onGetDistrictResult(DistrictResult districtResult) {
            districtResult.getCenterPt();//获取行政区中心坐标点
            districtResult.getCityName();//获取行政区域名称
            List<List<LatLng>> polyLines = districtResult.getPolylines();//获取行政区域边界坐标点
            //边界就是坐标点的集合,在地图上画出来就是多边形图层。有的行政区可能有多个区域,所以会有多个点集合。
        }
    
    };
    

    效果图


    西城区边界

    四 公交线路查询

    /**
    * 公交线路查询分两步
    * 1.根据关键字查询出公交类型的poi
    * 2.根据公交poi的uid查询公交线路详情
    */
    PoiSearch mSearch = PoiSearch.newInstance();//初始化poi查询
    mSearch.setOnGetPoiSearchResultListener(poiSearchResultListener );
    BusLineSearch mBusLineSearch = = BusLineSearch.newInstance();//初始化公交线路查询
    mBusLineSearch.setOnGetBusLineSearchResultListener(busLineSearchResultListener );
    
    PoiCitySearchOption citySearchOption = new PoiCitySearchOption();
    citySearchOption.city(cityStr);//城市,北京
    citySearchOption.keyword(numStr);//公交路号,例:地铁2号线
    mSearch.searchInCity(citySearchOption);//查询POI,过滤出公交类型poi
    
    //POI回调
    OnGetPoiSearchResultListener poiSearchResultListener = new OnGetPoiSearchResultListener() {
                
        @Override
        public void onGetPoiResult(PoiResult result) {
            //遍历所有poi,找到类型为公交线路的poi
            for (PoiInfo poi : result.getAllPoi()) {
                if (poi.type == PoiInfo.POITYPE.BUS_LINE
                        || poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
                    //注意:这里的查到公交poi都是起点
                    busLineIDList.add(poi.uid);//size=2,两个方向
                }
            }        
        }
        //...省略其他方法
    };
    
    BusLineSearchOption busLineSearchOption = new BusLineSearchOption();
    busLineSearchOption.city(cityStr);//城市
    busLineSearchOption.uid(uid);//公交poi的uid
    mBusLineSearch.searchBusLine(busLineSearchOption);//查询公交路线
    
    //公交路线回调
    OnGetBusLineSearchResultListener busLineSearchResultListener = new OnGetBusLineSearchResultListener() {
    
        @Override
        public void onGetBusLineResult(BusLineResult result) {
            //BusLineResult包含公交:起步价、末班车时间、公交名、上行下行称等信息
            List<BusLineResult.BusStation> busStations = result.getStations();//公交所有站点
            for (BusLineResult.BusStation busStation : busStations){
                busStation.getTitle();//站点名称
                busStation.getLocation();//站点坐标点
            }
            List<BusLineResult.BusStep> busSteps = result.getSteps();
            //注意:这里并不是公交路线分段信息,而是:公交从起点到终点为一个busStep 
            for (BusLineResult.BusStep busStep : busSteps){//size=1
                busStep.getDistance();//距离,公交线路的总距离
                busStep.getDuration();//总时长
            }
        }
    };
    

    效果图


    地铁2号线

    五 两点线路规划

    线路规划:公交换乘、驾车、骑行和步行四种类型

    RoutePlanSearch mSearch = RoutePlanSearch.newInstance();//初始化搜索模块
    mSearch.setOnGetRoutePlanResultListener(planResultListener);//注册事件监听
    
    PlanNode stNode = PlanNode.withCityNameAndPlaceName("北京", "北京西站");//起始点
    PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", "北京南站");//终点,PlanNode也支持输入坐标点
    
    /**驾车路线规划**/
    DrivingRoutePlanOption drivingRoutePlanOption = new DrivingRoutePlanOption();//参数设置类
    drivingRoutePlanOption.from(stNode);//设置起点
    drivingRoutePlanOption.to(enNode);//设置终点
    drivingRoutePlanOption.currentCity("北京");//当前城市,注意:这里设置城市,那么PlanNode中的城市将会被覆盖
    /**
    * 路线规划策略,枚举类型:躲避拥堵、最短距离、较少费用、时间优先
    * ECAR_TIME_FIRST:时间优先
    * ECAR_AVOID_JAM:躲避拥堵
    * ECAR_DIS_FIRST:最短距离
    * ECAR_FEE_FIRST:较少费用
    */
    drivingRoutePlanOption.policy(DrivingRoutePlanOption.DrivingPolicy.ECAR_TIME_FIRST);
    mSearch.drivingSearch(drivingRoutePlanOption);//查询
    
    /**公交线路规划**/
    TransitRoutePlanOption transitRoutePlanOption = new TransitRoutePlanOption();
    transitRoutePlanOption.from(stNode);
    transitRoutePlanOption.to(enNode);
    transitRoutePlanOption.city("北京");
    /**
    * EBUS_NO_SUBWAY:不含地铁
    * EBUS_TIME_FIRST:时间优先
    * EBUS_TRANSFER_FIRST:最少换乘
    * EBUS_WALK_FIRST:最少步行距离
    */
    transitRoutePlanOption.policy(TransitRoutePlanOption.TransitPolicy.EBUS_TIME_FIRST);//线路规划策略:
    mSearch.transitSearch(transitRoutePlanOption);//查询
    
    /**步行线路规划**/
    WalkingRoutePlanOption walkingRoutePlanOption = new WalkingRoutePlanOption();
    walkingRoutePlanOption.from(stNode);
    walkingRoutePlanOption.to(enNode);
    mSearch.walkingSearch(walkingRoutePlanOption);
    
    /**骑行线路规划**/
    BikingRoutePlanOption bikingRoutePlanOption = new BikingRoutePlanOption();
    bikingRoutePlanOption.from(stNode);
    bikingRoutePlanOption.to(enNode);
    mSearch.bikingSearch(bikingRoutePlanOption);
    
    /**跨城市线路规划**/
    MassTransitRoutePlanOption massTransitRoutePlanOption = new MassTransitRoutePlanOption();
    massTransitRoutePlanOption.from(stNode);
    massTransitRoutePlanOption.to(enNode);
    massTransitRoutePlanOption.pageIndex(0);//设置返回第几页 从0开始
    massTransitRoutePlanOption.pageSize(5);//设置每页返回几条路线,1~10条
    //市内公交换乘策略:最短时间......等
    massTransitRoutePlanOption.tacticsIncity(MassTransitRoutePlanOption.TacticsIncity.ETRANS_LEAST_TIME);        
    //设置跨城交通方式策略:火车优先......等
    massTransitRoutePlanOption.transtypeintercity(MassTransitRoutePlanOption.TransTypeIntercity.ETRANS_TRAIN_FIRST);
    //设置跨城换乘策略:出发最早......等
    massTransitRoutePlanOption.tacticsIntercity(MassTransitRoutePlanOption.TacticsIntercity.ETRANS_START_EARLY);
    mSearch.masstransitSearch(massTransitRoutePlanOption);//查询
    
    //规划路线回调监听器
    OnGetRoutePlanResultListener planResultListener = new OnGetRoutePlanResultListener() {
    
        @Override
        public void onGetWalkingRouteResult(WalkingRouteResult result) {//步行规划路线回调
            if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
                return;
            }
            if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
                // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
                // result.getSuggestAddrInfo()
                return;
            }
    
            List<WalkingRouteLine> walkingRouteLines = result.getRouteLines();//获取规划路线列表
            for (WalkingRouteLine walkingRouteLine : walkingRouteLines) {//多条规划路线
                walkingRouteLine.getDistance();//该路线距离
                walkingRouteLine.getDuration();//时长
                walkingRouteLine.getStarting();//获取起点
                walkingRouteLine.getTerminal();//获取终点
                List<WalkingRouteLine.WalkingStep> walkingSteps = walkingRouteLine.getAllStep();//每条规划路线含多个路段
                for (WalkingRouteLine.WalkingStep walkingStep : walkingSteps) {
                    walkingStep.getEntrance();//该步段起点
                    walkingStep.getExit();//终点
                    walkingStep.getWayPoints();//该步段起点与终点中间的点,步段有可能不是直线,折线的话有多个点
                    ...
                }
            }
        }
    
        @Override
        public void onGetTransitRouteResult(TransitRouteResult result) {//公交路线规划回调
            ...省略,同上
            List<TransitRouteLine> transitRouteLines = result.getRouteLines();//获取规划路线列表
            for (TransitRouteLine transitRouteLine : transitRouteLines){
                /**
               * 每条规划路线含多个TransitStep,这里要注意的是:比如从北京西站到南站,一共有3个路段
               * 乘坐地铁7号线(焦化厂方向),经过4站,到达菜市口站:第一个步段,乘坐7号线
               * 站内换乘地铁4号线大兴线(天宫院方向):第二个步段,步行到4号线
               * 乘坐地铁4号线大兴线(天宫院方向),经过2站,到达北京南站:第三个步段,乘坐4号线
               * 所以每换一个线路就是一个路段,步行不论距离长短也算一个路段
               */
                List<TransitRouteLine.TransitStep> transitSteps = transitRouteLine.getAllStep();();
                transitStep.getInstructions();//每段路线的乘坐信息
                transitStep.getVehicleInfo();//每段路线站点、票价等信息
                transitStep.getWayPoints();//该路段起点与终点中间的点,路段有可能不是直线,折线的话有多个点
    
                ...省略,同上
            }
        }
    
        @Override
        public void onGetMassTransitRouteResult(MassTransitRouteResult result) {//跨城市路线规划回调
            ...
            result.getOrigin();//起点,含:坐标,城市信息等
            result.getDestination();//终点
            List<MassTransitRouteLine> massTransitRouteLines = result.getRouteLines();
            for (MassTransitRouteLine massTransitRouteLine : massTransitRouteLines){//多条规划路线
                //massTransitRouteLine包含本线路的票价、到达时间等信息
                List<MassTransitRouteLine.TransitStep> transitSteps = massTransitRouteLine.getAllStep();//多个路段
                //TransitStep包含:本路段始终点、交通方式等信息
                ...
            }
        }
    
        @Override
        public void onGetDrivingRouteResult(DrivingRouteResult result) {//驾车线规划回调
            ...
            List<DrivingRouteLine> drivingRouteLines = result.getRouteLines();
            for (DrivingRouteLine drivingRouteLine : drivingRouteLines){
                ...
                drivingRouteLine.getLightNum();//本线路红绿灯数
                drivingRouteLine.getCongestionDistance();//本线路拥堵距离
                List<DrivingRouteLine.DrivingStep> drivingStep = drivingRouteLine.getAllStep();
                ...
            }
        }
    
        @Override
        public void onGetBikingRouteResult(BikingRouteResult result) {//骑行线规划回调
            ...
            List<BikingRouteLine> bikingRouteLines = result.getRouteLines();
            for (BikingRouteLine bikingRouteLine : bikingRouteLines){
                ...
                List<BikingRouteLine.BikingStep> bikingStep = bikingRouteLine.getAllStep();
                ...
            }
        }
    
        @Override
        public void onGetIndoorRouteResult(IndoorRouteResult result) {
             //室内路线规划回调
        }
    };
    

    效果图

    公交路径规划
    好啦,本篇到这里就讲完了。如果只是查询的话,就不用百度地图sdk了。如果需要将poi、线路、公交、边界画在地图上显示的话,也是很简单的,只要你拿到了坐标点,就可以在地图上增加图层了,包括:圆形、多边形、线性等等,不清楚的阅读文章片头相关文章。这里推荐com.baidu.mapapi.overlayutil里面的api,可以方便的绘制上述图层
    //例1:画公交线路图层
    BusLineOverlay overlay = new BusLineOverlay(mBaiduMap);
    mBaiduMap.setOnMarkerClickListener(overlay);//添加marker点击监听
    overlay.setData(result);//设置数据,BusLineResult:result,公交回调监听返回的公交线路结果
    overlay.addToMap();//将公交线路画在地图上
    overlay.zoomToSpan();//缩放操作,显示整个线路
    
    //例2:画规步行划路线图层
    WalkingRouteOverlay overlay = new WalkingRouteOverlay(mBaidumap);
    overlay.setData(result.getRouteLines().get(0));//设置步行路线,result步行回调监听返回结果
    overlay.addToMap();
    overlay.zoomToSpan();
    
    ......
    

    com.baidu.mapapi.overlayutil里面的api把画图层的操作都封装好了,比较简单,poi、行政区边界、其他规划路径都有相应的化图层工具类。

    如果各位看官觉得文章不错,别忘了点个喜欢。
    源码下载地址 https://github.com/zhuhaoHappig/BaiduMapSearch

    以上文章内容,是本人工作中的总结,供大家参考,有误的地方还请指正。

    相关文章

      网友评论

      • 24a2a620daa6:楼主,想问一下,如果我想查询城市的经纬度(包括省份、城市、区县),用POI检索貌似也是可以查询出结果,1、那这个结果和地理编码接口返回的经纬度一致吗?2、城市经纬度是地理几何中心的位置经纬度还是政府所在地址的经纬度呢?
      • opkcloud:你好,怎么给一个点设置百度地图自带的终点图片
        zhh_happig:@opkcloud https://www.jianshu.com/p/2ad4c2077dfd看这篇文章
      • Bert夏伤:楼主,请问下我想搜索任意地理位置,应该用哪一种检索方式呢,范围检索吗?但是那个bounds我不知道怎么传
        zhh_happig:@Bert夏伤 LatLngBounds searchbound = new LatLngBounds.Builder().include(southwest).include(northeast).build();
        去http://api.map.baidu.com/lbsapi/getpoint/index.html取southwest、northeast这两个点,构成一个把全中国包起来的矩形,试试。或者城市搜索citySearchOption.city(citystr);citystr设置为中国试试。
        Bert夏伤: @zhh_happig 检索全国范围内旅游景点之类的
        zhh_happig:你要检索什么?
      • 气球鼓鼓:如果是公司梭巴,只在厂区内行驶,并且百度地图上没有厂区内部的位置信息,是不是只能自己去建数据库,做经纬度和厂区内站点地址的匹配?有没有其他的解决方法呢?
        zhh_happig:@失重少女 百度地图上没有道路信息,路劲规划、算路好像都做不了,你自己测量匹配的数据如何跟百度的数据库联系呢,感觉有点难度
        气球鼓鼓: @zhh_happig 导航和路径规划都做,因为厂区内的道路信息和我们自己设的梭巴站点,百度现在是看不到的,目前想的是自己去测量匹配,但是感觉不好把控,您有什么好的建议吗?
        zhh_happig:@失重少女 你要在厂区内部做路径规划还是导航?
      • 那落_:谢谢!!
      • bf86c828bef1:楼主我想问一下地理编码onGetGeoCodeResult方法里面,如果我想把地址转换成的经纬度拿出来,例如显示在textview上,这样应该怎么写,昨天试了好久没写出来
        zhh_happig:@一个很OK的男人_7edf 注意geoCodeResult和getLocation()判空处理,以及geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR,错误码的处理,输入地址不正确,或查不到结果,返回空。
        zhh_happig:@一个很OK的男人_7edf 有什么Exception抛出来吗
        bf86c828bef1:我在onGetGeoCodeResult方法里面用这样的写法
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(geoCodeResult.getLocation().latitude);
        stringBuilder.append(geoCodeResult.getLocation().longitude);
        Message msg = new Message();
        msg.what=1;
        msg.obj=stringBuilder;
        handler.sendMessage(msg);


        在oncreat()外这样写
        private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
        switch (msg.what){
        case 1:
        StringBuilder str = (StringBuilder)msg.obj;
        textView.setText(str);
        break;
        }
        }
        };






        结果一到查询页面就好像程序重启了一样回到主页面

      本文标题:Android百度地图(六):百度地图POI检索,行政区边界、公

      本文链接:https://www.haomeiwen.com/subject/dsmnhxtx.html