zoukankan      html  css  js  c++  java
  • [代码片段] 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里面去,刷新控件即可。

  • 相关阅读:
    如何防止源码被盗
    C# WebBrowser 获得选中部分的html源码
    特殊字符和空格
    MySQL性能优化
    mysql5.7新特性探究
    【九】MongoDB管理之安全性
    【八】MongoDB管理之分片集群实践
    【七】MongoDB管理之分片集群介绍
    【六】MongoDB管理之副本集
    【五】MongoDB管理之生产环境说明
  • 原文地址:https://www.cnblogs.com/miaozhenzhong/p/5930956.html
Copyright © 2011-2022 走看看