`
johnnycmj
  • 浏览: 36896 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Android百度地图定位收索取周边在列表中展示并选择

阅读更多

具体内容如下效果图:


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

 

[html] view plain copy
 
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="fill_parent"  
  4.     android:orientation="vertical" >  
  5.   
  6.     <RelativeLayout  
  7.         android:id="@+id/plugin_camera_image_folder_headview"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="45dp"  
  10.         android:layout_marginBottom="3dp"  
  11.         android:background="#2B4058"  
  12.         android:gravity="center_vertical" >  
  13.   
  14.         <TextView  
  15.             android:id="@+id/chat_publish_complete_cancle"  
  16.             android:layout_width="wrap_content"  
  17.             android:layout_height="wrap_content"  
  18.             android:layout_alignParentLeft="true"  
  19.             android:layout_centerVertical="true"  
  20.             android:layout_marginLeft="10dp"  
  21.             android:text="取消"  
  22.             android:textColor="#ffffff"  
  23.             android:textSize="16sp" />  
  24.   
  25.         <TextView  
  26.             android:id="@+id/chat_publish_complete_title"  
  27.             android:layout_width="wrap_content"  
  28.             android:layout_height="wrap_content"  
  29.             android:layout_centerInParent="true"  
  30.             android:text="选择当前位置"  
  31.             android:textColor="#ffffff"  
  32.             android:textSize="20sp" />  
  33.   
  34.         <Button  
  35.             android:id="@+id/chat_publish_complete_publish"  
  36.             android:layout_width="55dp"  
  37.             android:layout_height="27dp"  
  38.             android:layout_alignParentRight="true"  
  39.             android:layout_centerVertical="true"  
  40.             android:layout_marginRight="10dp"  
  41.             android:background="@drawable/chat_publish_bg"  
  42.             android:text="完成"  
  43.             android:textColor="#fff"  
  44.             android:textSize="16sp" />  
  45.     </RelativeLayout>  
  46.   
  47.     <RelativeLayout  
  48.         android:layout_width="fill_parent"  
  49.         android:layout_height="fill_parent"  
  50.         android:layout_weight="2" >  
  51.   
  52.         <com.baidu.mapapi.map.MapView  
  53.             android:id="@+id/bmapView"  
  54.             android:layout_width="fill_parent"  
  55.             android:layout_height="fill_parent"  
  56.             android:clickable="true" />  
  57.   
  58.         <Button  
  59.             android:id="@+id/request"  
  60.             android:layout_width="40dp"  
  61.             android:layout_height="40dp"  
  62.             android:layout_alignParentBottom="true"  
  63.             android:layout_alignParentLeft="true"  
  64.             android:layout_marginBottom="40dp"  
  65.             android:layout_marginLeft="10dp"  
  66.             android:background="@drawable/custom_loc" />  
  67.     </RelativeLayout>  
  68.   
  69.     <ListView  
  70.         android:id="@+id/lv_location_nearby"  
  71.         android:layout_width="match_parent"  
  72.         android:layout_height="match_parent"  
  73.         android:layout_weight="3" />  
  74.   
  75. </LinearLayout>  

2、初始化控件

 

 

[java] view plain copy
 
  1. <span style="white-space:pre">        </span>dataList = new ArrayList<PoiInfo>();  
  2.         mMapView = (MapView) findViewById(R.id.bmapView);  
  3.         mCompleteButton = (Button) findViewById(R.id.chat_publish_complete_publish);  
  4.         mRequestLocation = (Button) findViewById(R.id.request);  
  5.         mListView = (ListView) findViewById(R.id.lv_location_nearby);  
  6.         checkPosition=0;  
  7.         adapter = new ListAdapter(0);  
  8.         mListView.setAdapter(adapter);  


3、 定位

 

 

[java] view plain copy
 
  1. <span style="white-space:pre">        </span>//重新设置  
  2.         checkPosition = 0;  
  3.         adapter.setCheckposition(0);  
  4.           
  5.         mBaiduMap = mMapView.getMap();  
  6.         mBaiduMap.clear();  
  7.         // 开启定位图层  
  8.         mBaiduMap.setMyLocationEnabled(true);  
  9.         mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(17).build()));   // 设置级别  
  10.           
  11.         // 定位初始化  
  12.         mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类  
  13.         mLocationClient.registerLocationListener(myListener);// 注册定位监听接口  
  14.           
  15.         /** 
  16.          * 设置定位参数 
  17.          */  
  18.         LocationClientOption option = new LocationClientOption();  
  19.         option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式  
  20. //      option.setScanSpan(5000);// 设置发起定位请求的间隔时间,ms  
  21.         option.setNeedDeviceDirect(true);// 设置返回结果包含手机的方向  
  22.         option.setOpenGps(true);  
  23.         option.setAddrType("all");// 返回的定位结果包含地址信息  
  24.         option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02  
  25.         option.setIsNeedAddress(true);// 返回的定位结果包含地址信息  
  26.         mLocationClient.setLocOption(option);  
  27.         mLocationClient.start(); // 调用此方法开始定位  

4、定位SDK监听函数

 

 

[java] view plain copy
 
  1. public class MyLocationListener implements BDLocationListener {  
  2.         @Override  
  3.         public void onReceiveLocation(BDLocation location) {  
  4.             if (location == null || mMapView == null) {  
  5.                 return;  
  6.             }  
  7.               
  8.             locType = location.getLocType();  
  9.             Log.i("mybaidumap""当前定位的返回值是:"+locType);  
  10.               
  11.             longitude = location.getLongitude();  
  12.             latitude = location.getLatitude();  
  13.             if (location.hasRadius()) {// 判断是否有定位精度半径  
  14.                 radius = location.getRadius();  
  15.             }  
  16.               
  17.             if (locType == BDLocation.TypeNetWorkLocation) {  
  18.                 addrStr = location.getAddrStr();// 获取反地理编码(文字描述的地址)  
  19.                 Log.i("mybaidumap""当前定位的地址是:"+addrStr);  
  20.             }  
  21.               
  22.             direction = location.getDirection();// 获取手机方向,【0~360°】,手机上面正面朝北为0°  
  23.             province = location.getProvince();// 省份  
  24.             city = location.getCity();// 城市  
  25.             district = location.getDistrict();// 区县  
  26.               
  27.             LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());  
  28.               
  29.             //将当前位置加入List里面  
  30.             PoiInfo info = new PoiInfo();  
  31.             info.address = location.getAddrStr();  
  32.             info.city = location.getCity();  
  33.             info.location = ll;  
  34.             info.name = location.getAddrStr();  
  35.             dataList.add(info);  
  36.             adapter.notifyDataSetChanged();  
  37.             Log.i("mybaidumap""province是:"+province +" city是"+city +" 区县是: "+district);  
  38.   
  39.               
  40.             // 构造定位数据  
  41.             MyLocationData locData = new MyLocationData.Builder()  
  42.                     .accuracy(location.getRadius())  
  43.                     // 此处设置开发者获取到的方向信息,顺时针0-360  
  44.                     .direction(100).latitude(location.getLatitude())  
  45.                     .longitude(location.getLongitude()).build();  
  46.             mBaiduMap.setMyLocationData(locData);  
  47.               
  48.             //画标志  
  49.             CoordinateConverter converter = new CoordinateConverter();  
  50.             converter.coord(ll);  
  51.             converter.from(CoordinateConverter.CoordType.COMMON);  
  52.             LatLng convertLatLng = converter.convert();  
  53.               
  54.             OverlayOptions ooA = new MarkerOptions().position(ll).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_marka));  
  55.             mCurrentMarker = (Marker) mBaiduMap.addOverlay(ooA);  
  56.                
  57.               
  58.              MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(convertLatLng, 17.0f);  
  59.              mBaiduMap.animateMapStatus(u);  
  60.                
  61.              //画当前定位标志  
  62.              MapStatusUpdate uc = MapStatusUpdateFactory.newLatLng(ll);  
  63.              mBaiduMap.animateMapStatus(uc);  
  64.               
  65.              mMapView.showZoomControls(false);  
  66.              //poi 搜索周边  
  67.              new Thread(new Runnable() {  
  68.                 @Override  
  69.                 public void run() {  
  70.                     // TODO Auto-generated method stub  
  71.                     Looper.prepare();   
  72.                     searchNeayBy();  
  73.                     Looper.loop();  
  74.                 }  
  75.             }).start();  
  76.                
  77.   
  78.         }  


5、搜索周边:

 

 

[java] view plain copy
 
  1. private void searchNeayBy(){  
  2.         // POI初始化搜索模块,注册搜索事件监听  
  3.         mPoiSearch = PoiSearch.newInstance();  
  4.         mPoiSearch.setOnGetPoiSearchResultListener(this);  
  5.         PoiNearbySearchOption poiNearbySearchOption = new PoiNearbySearchOption();  
  6.   
  7.         poiNearbySearchOption.keyword("公司");  
  8.         poiNearbySearchOption.location(new LatLng(latitude, longitude));  
  9.         poiNearbySearchOption.radius(100);  // 检索半径,单位是米  
  10.         poiNearbySearchOption.pageCapacity(20);  // 默认每页10条  
  11.         mPoiSearch.searchNearby(poiNearbySearchOption);  // 发起附近检索请求  
  12.     }  

7、周边地理位置结果返回

 

 

[java] view plain copy
 
  1. @Override  
  2.     public void onGetPoiResult(PoiResult result) {  
  3.         // 获取POI检索结果  
  4.         if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 没有找到检索结果  
  5.             Toast.makeText(MainActivity.this"未找到结果",Toast.LENGTH_LONG).show();  
  6.             return;  
  7.         }  
  8.   
  9.         if (result.error == SearchResult.ERRORNO.NO_ERROR) {// 检索结果正常返回  
  10. //          mBaiduMap.clear();  
  11.             if(result != null){  
  12.                 if(result.getAllPoi()!= null && result.getAllPoi().size()>0){  
  13.                     dataList.addAll(result.getAllPoi());  
  14. //                  adapter.notifyDataSetChanged();  
  15.                     Message msg = new Message();  
  16.                     msg.what = 0;  
  17.                     handler.sendMessage(msg);  
  18.                 }  
  19.             }  
  20.         }  
  21.     }  


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


9、源代码

分享到:
评论

相关推荐

    Android百度地图定位后获取周边位置在列表中展示并选择

    通过以上步骤,我们可以在Android应用中实现百度地图定位、搜索周边位置并在列表中展示,以及让用户选择具体的位置。这个过程涵盖了地图API的集成、定位服务的使用、搜索功能的实现和UI交互等多个技术点,是移动开发...

    android百度地图定位加周边搜索

    在Android平台上,集成百度地图API实现定位功能以及周边兴趣点搜索是常见的应用场景,这涉及到地理信息系统(GIS)和移动开发的结合。以下将详细介绍如何在Android应用中利用百度地图API来实现这些功能。 首先,...

    android 百度地图定位自己位置

    7. **显示定位图标**:在地图上显示用户的位置,可以调用MapView的`setMyLocationEnabled(true)`方法开启定位图层。默认的定位图标可能不符合所有需求,通过自定义Overlay可以更改图标样式。 8. **处理定位异常**:...

    百度地图定位及周边信息

    百度地图作为国内主流的地图应用之一,提供了一系列强大的定位和服务功能,帮助用户准确找到自己的位置并获取周边信息。以下将详细讲解如何利用百度地图进行定位、查看周边信息以及如何拖拽地图进行交互。 1. **...

    Android 百度地图API-定位周边搜索POI源码.rar

    5. **显示定位标记**:在地图上显示用户的位置,可以通过创建MyLocationData对象并传递给MapView的setMyLocationData方法,或者使用MyLocationOverlay类。 6. **周边搜索POI**:百度地图API提供了搜索周围兴趣点的...

    Android 百度地图 定位Demo

    通过这个"Android 百度地图 定位Demo",开发者可以学习到如何在Android应用中集成百度地图,实现定位功能,为用户提供基于位置的服务。此外,还可以在此基础上扩展功能,如路线导航、地理围栏、兴趣点检索等。

    Android开发之百度地图定位打卡

    在Android开发中,集成百度地图并实现定位打卡功能是一项常见的需求。这涉及到多个技术点,包括Android SDK的使用、百度地图API的集成、位置服务的开启与管理、地图的显示与交互、以及自定义打卡逻辑等。下面我们将...

    Android应用源码之百度地图API 之 定位周边搜索POI.zip

    在Android开发中,百度地图API是一个非常重要的工具,它提供了丰富的功能,如定位、地图展示、路线规划、周边搜索等。本源码示例主要关注的是如何利用百度地图API进行定位以及查找周边的兴趣点(Points of Interest,...

    Android版百度地图定位自己位置

    本文将深入探讨如何在Android版百度地图中定位自己的位置,并切换卫星图和普通地图图层。 首先,要实现定位功能,我们需要集成百度地图SDK。这个SDK为开发者提供了API接口,用于获取用户的位置信息。集成过程包括在...

    android 百度地图附近位置列表显示

    在地图上显示位置列表,我们需要调用百度地图的逆地理编码服务,将经纬度转换为具体地址,再通过搜索接口获取附近的兴趣点。以下是一个简单的示例: ```java PoiSearch poiSearch = new PoiSearch(mapView....

    老罗android 百度地图开发源码

    在Android开发中,百度地图API是一个非常常用的工具,它提供了丰富的地图展示、定位、路径规划等功能,极大地便利了开发者在构建地理位置相关应用时的工作。"老罗android 百度地图开发源码"是一个示例项目,它展示了...

    安卓GPS地图导航定位指南相关-Android百度地图API-定位周边搜索POI源码.zip

    在实际应用中,可以将这些信息展示在地图上,或者在列表中供用户选择。 4. **源码实践**:在提供的压缩包中,"Search"文件可能是实现搜索功能的相关代码,可能包含请求POI数据、解析返回结果、在地图上标记POI等...

    Android-BDLocationUtil百度地图定位工具类

    首先,BDLocationUtil类库主要依赖于百度地图SDK,这是一个由百度提供的服务,包含了丰富的定位、地图展示、路线规划等功能。开发者需要在项目中引入百度地图SDK的依赖,才能使用BDLocationUtil。这通常通过在build....

    百度地图定位和搜索周边demo

    返回的结果会包含一系列PoiItem对象,每个对象包含了地点的名称、地址、坐标等信息,可以展示在地图上或者列表中。 在集成百度地图时,开发者还需要设置API密钥(AK),这是验证应用身份的关键。创建AK需要在百度...

    Android百度地图demo

    在Android开发中,集成百度地图API是一个常见的需求,主要用于实现位置定位、路线规划、地图展示等功能。本项目“Android百度地图demo”是一个示例工程,它利用了百度官方提供的SDK,帮助开发者快速理解和掌握如何在...

    Android 百度地图个人开发demo 源码程序.zip

    而定位功能则涉及实时获取用户的位置信息,百度地图提供了内置的定位SDK,可以轻松地在地图上显示用户的位置图标,并监听位置更新。 此外,**POI(Point of Interest,兴趣点)检索**让应用能够搜索地图上的特定...

    安卓GPS地图导航定位指南相关-Android百度地图API-定位周边搜索POI源码.rar

    3. 地图展示与操作:源码中还会涉及到如何在Android应用中初始化并显示百度地图,以及如何添加自定义的Marker、InfoWindow等地图元素。同时,可能包括地图的缩放、平移、旋转等交互操作的实现。 4. 路径规划:百度...

    Android百度地图画运动轨迹和GPS定位

    在Android开发中,使用百度地图API来实现运动轨迹和GPS定位是一项常见的功能。这个实训项目主要涉及以下几个核心知识点: 1. **百度地图API**:首先,你需要集成百度地图SDK到你的Android项目中。这通常包括在项目...

    android 百度地图开发

    通过输入关键字或坐标,可以获取到餐馆、酒店等POI(Point of Interest)信息,并在地图上展示。 **驾驶导航**是更高级的功能,它涉及到路径规划和导航指引。百度地图API提供了 DrivingRouteRequest 类,用于设置...

Global site tag (gtag.js) - Google Analytics