BaiduMap---百度地图官方Demo之LBS.云检索功能(介绍如何使用LBS.云检索用户自有数据)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/regionSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="本地搜索" />

        <Button
            android:id="@+id/nearbySearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="周边搜索" />

        <Button
            android:id="@+id/boundsSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="矩形搜索" />

        <Button
            android:id="@+id/detailsSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="详情搜索" />
    </LinearLayout>

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

</LinearLayout>




package baidumapsdk.demo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

import com.baidu.mapapi.cloud.BoundSearchInfo;
import com.baidu.mapapi.cloud.CloudListener;
import com.baidu.mapapi.cloud.CloudManager;
import com.baidu.mapapi.cloud.CloudPoiInfo;
import com.baidu.mapapi.cloud.CloudSearchResult;
import com.baidu.mapapi.cloud.DetailSearchInfo;
import com.baidu.mapapi.cloud.DetailSearchResult;
import com.baidu.mapapi.cloud.LocalSearchInfo;
import com.baidu.mapapi.cloud.NearbySearchInfo;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
import com.baidu.mapapi.model.LatLngBounds.Builder;
/**
 * 介绍如何使用LBS云检索用于自有数据
 * 
 * */
public class CloudSearchActivity extends Activity implements CloudListener {
	private static final String LTAG = CloudSearchActivity.class.getSimpleName();
	private MapView mMapView;
	private BaiduMap mBaiduMap;

	@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		setContentView(R.layout.activity_lbssearch);
		
		/**
		 * CloudManager:LBS云检索管理类
		 * getInstance():获取唯一可用实例
		 * init(CloudListener listener):初始化
		 * 需要实现CloudListener接口的onGetDetailSearchResult和onGetSearchResult方法
		 * */
		CloudManager.getInstance().init(CloudSearchActivity.this);
		
		mMapView = (MapView) findViewById(R.id.bmapView);
		mBaiduMap = mMapView.getMap();
		//本地搜索
		findViewById(R.id.regionSearch).setOnClickListener(
				new OnClickListener() {
					@Override
					public void onClick(View v) {
						/**
						 * LocalSearchInfo:设置云检索中本地检索的参数,继承自 BaseCloudSearchInfo
						 * */
						LocalSearchInfo info = new LocalSearchInfo();
						
						//access_key(必须),最大长度50
						info.ak = "B266f735e43ab207ec152deff44fec8b";
						
						//geo table 表主键(必须)
						info.geoTableId = 31869;
						
						//标签,可选,空格分隔的多字符串,最长45个字符,样例:美食 小吃
						info.tags = "";
						
						//检索关键字,可选。最长45个字符。
						info.q = "天安门";
						
						//检索区域名称,必选。市或区的名字,如北京市,海淀区。最长25个字符。
						info.region = "北京市";
						
						/**
						 * localSearch(LocalSearchInfo info)
						 * 区域检索,如果所有参数都合法,返回true,否则返回 fasle,
						 * 检索的结果在 CloudListener 中的 onGetSearchResult() 函数中。
						 * */
						CloudManager.getInstance().localSearch(info);
					}
				});
		//周边搜索
		findViewById(R.id.nearbySearch).setOnClickListener(
				new OnClickListener() {
					public void onClick(View v) {
						/**
						 * NearbySearchInfo:周边检索设置参数类,继承自 BaseCloudSearchInfo
						 * */
						NearbySearchInfo info = new NearbySearchInfo();
						
						//access_key(必须),最大长度50
						info.ak = "D9ace96891048231e8777291cda45ca0";
						
						geo table 表主键(必须)
						info.geoTableId = 32038;
						
						//检索半径,可选;单位为米,默认为1000米。样例:500
						info.radius = 30000;
						
						//检索中心点坐标(经纬度),必选;样例:116.4321,38.76623
						info.location = "116.403689,39.914957";
						
						/**
						 * nearbySearch(NearbySearchInfo info)
						 * 周边检索,如果所有参数都合法,返回true,否则返回 fasle,
						 * 检索的结果在 CloudListener 中的 onGetSearchResult() 函数中。
						 * */
						CloudManager.getInstance().nearbySearch(info);
					}
				});
		//矩形搜索
		findViewById(R.id.boundsSearch).setOnClickListener(
				new OnClickListener() {
					public void onClick(View v) {
						/**
						 *BoundSearchInfo:设置矩形检索条件类,继承自 BaseCloudSearchInfo
						 * */
						BoundSearchInfo info = new BoundSearchInfo();
						info.ak = "B266f735e43ab207ec152deff44fec8b";
						info.geoTableId = 31869;
						info.q = "天安门";
						
						//矩形区域,必须。左下角和右上角的经纬度坐标点。2个坐标点用;号分隔 
						//样例:116.30,36.20;117.30,37.20
						info.bound = "116.401663,39.913961;116.406529,39.917396";
						
						/**
						 * boundSearch(BoundSearchInfo info)
						 * 矩形检索,如果所有参数都合法,返回true,否则返回 fasle,
						 * 检索的结果在 CloudListener 中的 onGetSearchResult() 函数中。
						 * */
						CloudManager.getInstance().boundSearch(info);
					}
				});
		//详情搜索
		findViewById(R.id.detailsSearch).setOnClickListener(
				new OnClickListener() {
					public void onClick(View v) {
						/**
						 *DetailSearchInfo:详细信息检索条件类,继承自 BaseSearchInfo
						 * */
						DetailSearchInfo info = new DetailSearchInfo();
						info.ak = "B266f735e43ab207ec152deff44fec8b";
						info.geoTableId = 31869;
						
						//poi数据id
						info.uid = 18622266;
						
						/**
						 * detailSearch(DetailSearchInfo info)
						 * 详细信息检索,如果所有参数都合法,返回true,否则返回 fasle。
						 * */
						CloudManager.getInstance().detailSearch(info);
					}
				});
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		mMapView.onDestroy();
		CloudManager.getInstance().destroy();
	}

	@Override
	protected void onPause() {
		super.onPause();
		mMapView.onPause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		mMapView.onResume();
	}
	
	/**
	 * void onGetSearchResult(CloudSearchResult result,int error)
	 * 当详情检索完成时回调此函数
	 * @param 
	 * result -搜索的结果,如果发生网络错误为null
	 * error - 错误号,0表示正确返回,-1表示网络错误
	 * */
	/**
	 * DetailSearchResult:详细信息检索结果类
	 * 字段: 	poiInfo 详细信息结果数据
	 * */
	public void onGetDetailSearchResult(DetailSearchResult result, int error) {
		if (result != null) {
			if (result.poiInfo != null) {
				Toast.makeText(CloudSearchActivity.this, result.poiInfo.title,Toast.LENGTH_SHORT).show();
			} else {
				Toast.makeText(CloudSearchActivity.this,"status:" + result.status, Toast.LENGTH_SHORT).show();
			}
		}
	}
	
	/**
	 * void onGetDetailSearchResult(DetailSearchResult result,int error)
	 * 当检索完成时回调此函数
	 * @param
	 * result - 详情搜索结果,如果发生网络错误为null
	 * error - 错误号,0表示正确返回,-1表示网络错误
	 * */
	
	/**
	 * CloudSearchResult:
	 * java.util.List<CloudPoiInfo> 	
	 * poiList 
	 * poi结果列表
	 * */
	public void onGetSearchResult(CloudSearchResult result, int error) {
		if (result != null && result.poiList != null && result.poiList.size() > 0) {
			Log.d(LTAG, "onGetSearchResult, result length: " + result.poiList.size());
			
			//清空地图所有的 Overlay 覆盖物以及 InfoWindow
			mBaiduMap.clear();
			
			/**
			 * public static BitmapDescriptor fromResource(int resourceId)
			 * 根据资源 Id 创建 bitmap 描述信息
			 * */
			BitmapDescriptor bd = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
			
			LatLng ll;
			LatLngBounds.Builder builder = new Builder();
			
			for (CloudPoiInfo info : result.poiList) {
				ll = new LatLng(info.latitude, info.longitude);
				/**
				 * OverlayOptions:地图覆盖物选型基类
				 * 
				 * public MarkerOptions icon(BitmapDescriptor icon):
				 * 设置 Marker 覆盖物的图标,相同图案的 icon 的 marker 
				 * 最好使用同一个 BitmapDescriptor 对象以节省内存空间。
				 * @param icon - Marker 覆盖物的图标
				 * @return 该 Marker 选项对象
				 * 
				 * public MarkerOptions position(LatLng position):
				 * 设置 marker 覆盖物的位置坐标
				 * @param position - marker 覆盖物的位置坐标
				 * @param 该 Marker 选项对象
				 * */
				OverlayOptions oo = new MarkerOptions()
									.icon(bd)
									.position(ll);
				/**
				 * addOverlay(OverlayOptions options):
				 * 向地图添加一个 Overlay
				 * */
				mBaiduMap.addOverlay(oo);
				
				/**
				 * public LatLngBounds.Builder include(LatLng point)
				 * 让该地理范围包含一个地理位置坐标
				 * @param point - 地理位置坐标
				 * @return 该构造器对象
				 * */
				builder.include(ll);
			}
			/**
			 * public LatLngBounds build()
			 * 创建地理范围对象
			 * @return 创建出的地理范围对象
			 * */
			LatLngBounds bounds = builder.build();
			
			/**
			 * MapStatusUpdateFactory:生成地图状态将要发生的变化
			 * 
			 * public static MapStatusUpdate newLatLngBounds(LatLngBounds bounds)
			 * 设置显示在屏幕中的地图地理范围
			 * @param bounds - 地图显示地理范围,不能为 null
			 * @return 返回构造的 MapStatusUpdate, 如果 bounds 为 null 则返回空。
			 * */
			MapStatusUpdate u = MapStatusUpdateFactory.newLatLngBounds(bounds);
			mBaiduMap.animateMapStatus(u);
		}
	}
}





  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值