百度地图的定位和poi搜索


                   最近在做百度地图的一个应用。只能说智商有限,百度的官方demo确实没有看懂。朋友给了一个demo,简单,好用。自己整理了下思路,写出来,免得下次忘记。

                    第一步、正确导入百度的jar。

                   第二步、请在mainactivity里写入SDKInitializer.initialize(getApplicationContext());

                                  一定要写在setContentView(R.layout.activity_main);之前。要不就那个页面用百度地图就在哪个页面写,比较麻烦。

                   第三步、定位。

                                  3、1 获得mapview 对象     mapView=(MapView) findViewById(R.id.mapview_nearby);

                                  3、2     BaiduMap baiduMap=mapView.getMap();

                                  3、3  实例化位置对象:locationClient=new LocationClient(getActivity());

                                  3、4 创建设置定位参数的对象:LocationClientOption locationClientOption=new LocationClientOption();

                                  3、5设置当前定位的模式:

                                                 高精度定位模式:这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果;Hight_Accuracy
                                 低功耗定位模式:这种定位模式下,不会使用GPS,只会使用网络定位(Wi-Fi和基站定位)Battery_Saving
                                 仅用设备定位模式:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位 Device_Sensors
                         locationClientOption.setLocationMode(LocationMode.Battery_Saving);

                                           设置当前定位使用的坐标系 

                                                 返回国测局经纬度坐标系 coor=gcj02
                                 返回百度墨卡托坐标系 coor=bd09
                                 返回百度经纬度坐标系 coor=bd09ll
                            locationClientOption.setCoorType("bd09ll");

                                          //设置两次定位的间隔时间   指定间隔的毫秒值
                          locationClientOption.setScanSpan(1000);
                          //设置定位的超时时间
                          locationClientOption.setTimeOut(3000);
                          locationClientOption.setIsNeedAddress(true);//返回的定位结果包含地址信息
                          locationClientOption.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向

                                  3、6://将当前设置的options定位的设置设置到定位对象中
                         locationClient.setLocOption(locationClientOption);

                                  3、7

                 //位置接收器对象注册位置监听
		locationClient.registerLocationListener(new BDLocationListener() {
			//接收定位获取的位置信息  将位置信息回传
			@Override
			public void onReceiveLocation(BDLocation dbBdLocation) {
				//在定位的结果对象中获取当前位置的经纬度
				latLng=new LatLng(dbBdLocation.getLatitude(), dbBdLocation.getLongitude());
				Log.i(TAG, "当前定位纬度是-------"+latLng.latitude);
				Log.i(TAG, "当前定位经度是--------------"+latLng.longitude);
				//执行搜索
				poiSearch();
				//将当前定位内容添加到地图
				BitmapDescriptor bitmapDescriptor=BitmapDescriptorFactory.fromResource(R.drawable.ico_map_location);
				OverlayOptions overlayOptions=new MarkerOptions().icon(bitmapDescriptor).position(latLng);
				baiduMap.clear();
				baiduMap.addOverlay(overlayOptions);
				
			}
		});
                                 3、8启动定位
            locationClient.start();
		if(locationClient!=null &&locationClient.isStarted()){			
			locationClient.requestLocation();//发送定位请求
		}
                       第四步、搜索

                                4、1实例化poi检索器
                           poiSearch=PoiSearch.newInstance();

                                 4、2

                     //poiSearch绑定poi检索获取结果的监听
		poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
			//表示当poi检索获取到具体的数据结果时会回调该方法 并且将检索的结果PoiResult对象回传
			@Override
			public void onGetPoiResult(PoiResult poiresult) {
				//1.创建显示poi检索结果的图层
				MyPoiOverlay poiOverlay=new MyPoiOverlay(baiduMap);
				//2.将poi检索结果添加到图层
				poiOverlay.setData(poiresult);
				baiduMap.setOnMarkerClickListener(poiOverlay);
				//3.将具有poi检索结果的图层添加到地图中
				poiOverlay.addToMap();
				poiOverlay.zoomToSpan();
	
			}
			//表示当poi检索获取到结果的详情时会回调该方法  并且将检索结果的详情PoiDetailResult回传
			//poiSearch.searchPoiDetail()之后
			@Override
			public void onGetPoiDetailResult(PoiDetailResult poidetailresult) {
//				Intent intent=new Intent(PoiSearchActivity.this, PoiSearchResultActivity.class);
//				//获取当前的详情对应的url地址
//				intent.putExtra("detailUrl", poidetailresult.getDetailUrl());
//				startActivity(intent);
			}
		});
                               4、3
               //调用相应的方法启动poi检索   PoiCitySearchOption 按照城市查询的查询条件对象   city(查询城市名称).keyword(查询的关键字)
		poiSearch.searchInCity(new PoiCitySearchOption().city("北京").keyword("美食"));
		//poiSearch.searchNearby(arg0)  周边查询  PoiNearbySearchOption
		//poiSearch.searchNearby(new PoiNearbySearchOption().location(null).keyword(arg0))
		//poiSearch.searchInBound(arg0)  区域检索  PoiBoundSearchOption
		//poiSearch.searchInBound(new PoiBoundSearchOption().bound(arg0));
                               4、4
	//自定义PoiOverlay 
	public class MyPoiOverlay extends PoiOverlay{

		public MyPoiOverlay(BaiduMap arg0) {
			super(arg0);
		}
		//表示当前的PoiOverlay设置setOnMarkerClickListener监听事件时 当点击PoiOverlay中的marker时就会调用该方法
		@Override
		public boolean onPoiClick(int position) {
			//先通过getPoiResult()方法获取当前的PoiOverlay中的所有的结果 然后调用getAllPoi()获取图层中的所有的PoiInfo
			List<PoiInfo> list=getPoiResult().getAllPoi();
			poiInfo=list.get(position);
			Button button=new Button(PoiSearchActivity.this);
			button.setBackgroundColor(Color.GRAY);
			button.setText(poiInfo.name);
			BitmapDescriptor descriptor=BitmapDescriptorFactory.fromView(button);
			InfoWindow infoWindow=new InfoWindow(descriptor, poiInfo.location, -35, new InfoWindow.OnInfoWindowClickListener() {
				
				@Override
				public void onInfoWindowClick() {
					poiSearch.searchPoiDetail(new PoiDetailSearchOption().
							poiUid(poiInfo.uid));//PoiDetailSearchOption 获取当前点击的InfoWindow所对应的详情
					baiduMap.hideInfoWindow();
				}
			});
			baiduMap.showInfoWindow(infoWindow);
			return true;
		}
		
	}
尾声:因为项目需要,需要删除-+和放大镜的标志。

        标志什么的去除,请移步:http://zhidao.baidu.com/link?url=tFfOcc-Hd-6sK7Pl9QWi7tVeQXYeY_l-xWtopunwta6FCSsNSQMN9nTgCkpmAp6A3XplpwbyqFNJcS-NG7pii_OfT7jmRmfzH7abeA_pi5e

写的比较匆忙,如果发现错误请指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值