[代码片段] Android百度地图定位收索取周边在列表中展示并选择

具体内容如下效果图:

1、布局文件,就是一个MapView和ListView,布局文件就是上面是一个百度地图的mapview,下面是一个显示周边位置的ListView

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <RelativeLayout
            android:id="@+id/plugin_camera_image_folder_headview"
            android:layout_width="fill_parent"
            android:layout_height="45dp"
            android:layout_marginBottom="3dp"
            android:background="#2B4058"
            android:gravity="center_vertical" >

            <TextView
                android:id="@+id/chat_publish_complete_cancle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:text="取消"
                android:textColor="#ffffff"
                android:textSize="16sp" />

            <TextView
                android:id="@+id/chat_publish_complete_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="选择当前位置"
                android:textColor="#ffffff"
                android:textSize="20sp" />

            <Button
                android:id="@+id/chat_publish_complete_publish"
                android:layout_width="55dp"
                android:layout_height="27dp"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:background="@drawable/chat_publish_bg"
                android:text="完成"
                android:textColor="#fff"
                android:textSize="16sp" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="2" >

            <com.baidu.mapapi.map.MapView
                android:id="@+id/bmapView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:clickable="true" />

            <Button
                android:id="@+id/request"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true"
                android:layout_marginBottom="40dp"
                android:layout_marginLeft="10dp"
                android:background="@drawable/custom_loc" />
        </RelativeLayout>

        <ListView
            android:id="@+id/lv_location_nearby"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="3" />

    </LinearLayout>

复制代码

2、初始化控件

    dataList = new ArrayList<PoiInfo>();  
            mMapView = (MapView) findViewById(R.id.bmapView);  
            mCompleteButton = (Button) findViewById(R.id.chat_publish_complete_publish);  
            mRequestLocation = (Button) findViewById(R.id.request);  
            mListView = (ListView) findViewById(R.id.lv_location_nearby);  
            checkPosition=0;  
            adapter = new ListAdapter(0);  
            mListView.setAdapter(adapter);  

复制代码

3、 定位

    //重新设置  
            checkPosition = 0;  
            adapter.setCheckposition(0);  
             
            mBaiduMap = mMapView.getMap();  
            mBaiduMap.clear();  
            // 开启定位图层  
            mBaiduMap.setMyLocationEnabled(true);  
            mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(17).build()));   // 设置级别  
             
            // 定位初始化  
            mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类  
            mLocationClient.registerLocationListener(myListener);// 注册定位监听接口  
             
            /**
             * 设置定位参数
             */  
            LocationClientOption option = new LocationClientOption();  
            option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式  
    //      option.setScanSpan(5000);// 设置发起定位请求的间隔时间,ms  
            option.setNeedDeviceDirect(true);// 设置返回结果包含手机的方向  
            option.setOpenGps(true);  
            option.setAddrType("all");// 返回的定位结果包含地址信息  
            option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02  
            option.setIsNeedAddress(true);// 返回的定位结果包含地址信息  
            mLocationClient.setLocOption(option);  
            mLocationClient.start(); // 调用此方法开始定位  

复制代码

4、定位SDK监听函数

    public class MyLocationListener implements BDLocationListener {
                    @Override
                    public void onReceiveLocation(BDLocation location) {
                            if (location == null || mMapView == null) {
                                    return;
                            }
                            
                            locType = location.getLocType();
                            Log.i("mybaidumap", "当前定位的返回值是:"+locType);
                            
                            longitude = location.getLongitude();
                            latitude = location.getLatitude();
                            if (location.hasRadius()) {// 判断是否有定位精度半径
                                    radius = location.getRadius();
                            }
                            
                            if (locType == BDLocation.TypeNetWorkLocation) {
                                    addrStr = location.getAddrStr();// 获取反地理编码(文字描述的地址)
                                    Log.i("mybaidumap", "当前定位的地址是:"+addrStr);
                            }
                            
                            direction = location.getDirection();// 获取手机方向,【0~360°】,手机上面正面朝北为0°
                            province = location.getProvince();// 省份
                            city = location.getCity();// 城市
                            district = location.getDistrict();// 区县
                            
                            LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
                            
                            //将当前位置加入List里面
                            PoiInfo info = new PoiInfo();
                            info.address = location.getAddrStr();
                            info.city = location.getCity();
                            info.location = ll;
                            info.name = location.getAddrStr();
                            dataList.add(info);
                            adapter.notifyDataSetChanged();
                            Log.i("mybaidumap", "province是:"+province +" city是"+city +" 区县是: "+district);

                            
                            // 构造定位数据
                            MyLocationData locData = new MyLocationData.Builder()
                                            .accuracy(location.getRadius())
                                            // 此处设置开发者获取到的方向信息,顺时针0-360
                                            .direction(100).latitude(location.getLatitude())
                                            .longitude(location.getLongitude()).build();
                            mBaiduMap.setMyLocationData(locData);
                            
                            //画标志
                            CoordinateConverter converter = new CoordinateConverter();
                        converter.coord(ll);
                        converter.from(CoordinateConverter.CoordType.COMMON);
                        LatLng convertLatLng = converter.convert();
                        
                        OverlayOptions ooA = new MarkerOptions().position(ll).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_marka));
                        mCurrentMarker = (Marker) mBaiduMap.addOverlay(ooA);
                         
                        
                         MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(convertLatLng, 17.0f);
                         mBaiduMap.animateMapStatus(u);
                         
                         //画当前定位标志
                         MapStatusUpdate uc = MapStatusUpdateFactory.newLatLng(ll);
                             mBaiduMap.animateMapStatus(uc);
                            
                             mMapView.showZoomControls(false);
                             //poi 搜索周边
                             new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                            // TODO Auto-generated method stub
                                            Looper.prepare();
                                            searchNeayBy();
                                            Looper.loop();
                                    }
                            }).start();
                            

                    }

复制代码
5、搜索周边:

    private void searchNeayBy(){
                    // POI初始化搜索模块,注册搜索事件监听
                    mPoiSearch = PoiSearch.newInstance();
                    mPoiSearch.setOnGetPoiSearchResultListener(this);
                    PoiNearbySearchOption poiNearbySearchOption = new PoiNearbySearchOption();

                    poiNearbySearchOption.keyword("公司");
                    poiNearbySearchOption.location(new LatLng(latitude, longitude));
                    poiNearbySearchOption.radius(100);  // 检索半径,单位是米
                    poiNearbySearchOption.pageCapacity(20);  // 默认每页10条
                    mPoiSearch.searchNearby(poiNearbySearchOption);  // 发起附近检索请求
            }

复制代码<span id="transmark"></span>
6、周边地理位置结果返回

    @Override
            public void onGetPoiResult(PoiResult result) {
                    // 获取POI检索结果
                    if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 没有找到检索结果
                            Toast.makeText(MainActivity.this, "未找到结果",Toast.LENGTH_LONG).show();
                            return;
                    }

                    if (result.error == SearchResult.ERRORNO.NO_ERROR) {// 检索结果正常返回
    //                        mBaiduMap.clear();
                            if(result != null){
                                    if(result.getAllPoi()!= null && result.getAllPoi().size()>0){
                                            dataList.addAll(result.getAllPoi());
    //                                        adapter.notifyDataSetChanged();
                                            Message msg = new Message();
                                    msg.what = 0;
                                    handler.sendMessage(msg);
                                    }
                            }
                    }
            }

复制代码
7、返回结果result.getAllPoi() 设到ListView的Adapter里面去,刷新控件即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值