Android 百度地图-实现POI的搜索(搜索周边)附源码

首先贴出主要代码

Activity

 

package cn.yhsh.maptest;

import java.util.ArrayList;
import utils.PoiOverlay;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MapViewLayoutParams;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.TextOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiBoundSearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;

public class MainActivity extends Activity implements OnMarkerClickListener,
		OnClickListener, OnLongClickListener {

	double weidu = 39.6184470000;
	double jindu = 116.4252280000;// 这个是百度地图公司的经纬度坐标点
	LatLng point = new LatLng(weidu, jindu);
	private IntentFilter filter;
	private MapView mv_maptest;
	private BaiduMap map;
	private View dialog_tv;
	private TextView tv_dialog;
	private EditText et_serach;
	private Button bt_search;
	private String et_result;
	private PoiInfo poiInfo;
	private LinearLayout ll_suofang;
	private LinearLayout llweixing;
	private LinearLayout ll_search;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		initsdk();
		setContentView(R.layout.activity_main);
		// 拿到mapview控件设置默认缩放比例
		mv_maptest = (MapView) findViewById(R.id.mv_maptest);
		et_serach = (EditText) findViewById(R.id.et_serach);
		bt_search = (Button) findViewById(R.id.bt_search);
		Button bt_putong = (Button) findViewById(R.id.bt_putong);
		Button bt_weixing = (Button) findViewById(R.id.bt_weixing);
		Button bt_jiaotong = (Button) findViewById(R.id.bt_jiaotong);
		ImageButton ib_da = (ImageButton) findViewById(R.id.ib_da);
		ImageButton ib_xiao = (ImageButton) findViewById(R.id.ib_xiao);
		ll_suofang = (LinearLayout) findViewById(R.id.ll_suofang);
		llweixing = (LinearLayout) findViewById(R.id.llweixing);

		ll_search = (LinearLayout) findViewById(R.id.ll_serach);
		map = mv_maptest.getMap();
		MapStatusUpdate zoom = MapStatusUpdateFactory.zoomTo(14);// 设置地图默认缩放比例为10(默认为12)
		map.setMapStatus(zoom);
		MapStatusUpdate center = MapStatusUpdateFactory.newLatLng(point);
		// 设置默认中心店
		map.setMapStatus(center);
		// 去掉标尺
		mv_maptest.showZoomControls(false);
		// 去掉缩放按钮
		mv_maptest.showScaleControl(false);
		boolean menu = mv_maptest.showContextMenu();
		Log.e("测试", menu + "");

		// 写文字
		drawtext();
		// 画对话框在地图上面通过点击图片后
		dialogpic();
		// ❀图片字啊地图上面
		drawpictuer();

		bt_search.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 拿到输入框的内容
				et_result = et_serach.getText().toString().trim();
				if (!et_result.equals("") && !et_result.equals(null)) {
					Toast.makeText(MainActivity.this, et_result,
							Toast.LENGTH_LONG).show();
					// 搜索资源
					serachrescours();
				} else {
					Toast.makeText(MainActivity.this, "请输入数据再点击查询按钮",
							Toast.LENGTH_LONG).show();
				}
			}
		});
		// 设置三个按钮点击事件
		tv_dialog.setOnClickListener(this);
		bt_putong.setOnClickListener(this);
		bt_weixing.setOnClickListener(this);
		bt_jiaotong.setOnClickListener(this);
		ib_da.setOnClickListener(this);
		ib_xiao.setOnClickListener(this);
		/**
		 * 长按放大按钮隐藏缩放按钮
		 */
		ib_da.setOnLongClickListener(this);
		bt_putong.setOnLongClickListener(this);
		tv_dialog.setOnLongClickListener(this);
		bt_search.setOnLongClickListener(this);
	}

	/**
	 * 在范围内搜索的方法
	 */
	private void serachrescours() {
		PoiSearch poiS = PoiSearch.newInstance();// 创建对象
		poiS.setOnGetPoiSearchResultListener(new Mypoisearch());
		PoiBoundSearchOption fanwei = new PoiBoundSearchOption();
		LatLngBounds llbs = new LatLngBounds.Builder()
				.include(new LatLng(40.7460400000, 114.9219870000))
				.include(new LatLng(38.9954100000, 117.7206750000)).build();
		fanwei.bound(llbs).keyword(et_result);// 搜索的内容

		// 发起范围内搜索
		poiS.searchInBound(fanwei);
	}

	class Mypoisearch implements OnGetPoiSearchResultListener {

		@Override
		public void onGetPoiDetailResult(PoiDetailResult arg0) {

		}

		@Override
		public void onGetPoiResult(PoiResult result) {
			if (result == null
					|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
				Toast.makeText(MainActivity.this, "未找到结果", Toast.LENGTH_LONG)
						.show();
				return;
			}
			// 返回搜索结果
			PoiOverlay pioo = new MyPoiOverlay(map);
			// 设置覆盖物marker点击事件
			map.setOnMarkerClickListener(pioo);
			// 设置数据
			pioo.setData(result);
			// 添加地图
			pioo.addToMap();
		}

		// 写一类继承PoiOverlay
		class MyPoiOverlay extends PoiOverlay {

			public MyPoiOverlay(BaiduMap baiduMap) {
				super(baiduMap);
			}

			/*
			 * 重写onPoiClick点击事件方法
			 */
			@Override
			public boolean onPoiClick(int i) {
				// 拿到结果
				PoiResult poiResult = getPoiResult();
				poiInfo = poiResult.getAllPoi().get(i);
				// 弹出吐司显示点中的点击事件
				Toast.makeText(getApplicationContext(), poiInfo.address,
						Toast.LENGTH_LONG).show();
				// 弹出populowindow
				showPopupWindow(getCurrentFocus());
				// showPopupWindow(mv_maptest);
				return super.onPoiClick(i);
			}
		}

	}

	/**
	 * 显示popupwindow的方法
	 */

	private void showPopupWindow(View view) {

		// 一个自定义的布局,作为显示的内容
		View contentView = View.inflate(getApplicationContext(),
				R.layout.activity_popupwindow, null);
		// 设置按钮的点击事件
		TextView button_popuowindow = (TextView) contentView
				.findViewById(R.id.tv_popuowindow);
		button_popuowindow.setText(poiInfo.address);
		button_popuowindow.setTextColor(Color.BLUE);
		button_popuowindow.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Toast.makeText(getApplicationContext(), "按钮已被点击",
						Toast.LENGTH_SHORT).show();
			}
		});

		final PopupWindow popupWindow = new PopupWindow(contentView,
				LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, true);

		popupWindow.setTouchable(true);

		popupWindow.setTouchInterceptor(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {

				return false;
				// 这里如果返回true的话,touch事件将被拦截
				// 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
			}
		});

		// 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
		// 我觉得这里是API的一个bug
		// popupWindow.setBackgroundDrawable(getResources().getDrawable(
		// R.drawable.toum));
		popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// 设置背景颜色为透明色
		// getResources().getDrawable(R.drawable.toum).setAlpha(0);// 设置图片透明度为0
		// 设置好参数之后再show
		// int[] location = new int [2];
		// view.getLocationInWindow(location);
		// int x = location[0];
		// int y = location[1];
		// popupWindow.showAtLocation(view, Gravity.CENTER_HORIZONTAL, x, y);
		popupWindow.showAsDropDown(view);// 此方法也可以
		// 缩放动画
		ScaleAnimation scanim = new ScaleAnimation(0, 1, 0, 1,
				Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1.0f);
		scanim.setDuration(4000);// 四秒钟

		// 渐变动画
		AlphaAnimation apap = new AlphaAnimation(0.1f, 1.0f);
		apap.setDuration(4000);

		// 旋转动画
		RotateAnimation ra = new RotateAnimation(0, 360,
				Animation.RELATIVE_TO_SELF, 0.1f, Animation.RELATIVE_TO_SELF,
				0.1f);
		ra.setDuration(4000);
		ra.setFillAfter(true);// 动画执行完后是否停留在执行完的状态
		// 组合动画
		AnimationSet ams = new AnimationSet(true);// 共享动画插入器
		// 添加组合动画
		ams.addAnimation(ra);
		ams.addAnimation(scanim);
		ams.addAnimation(apap);
		// 开启动画效果
		contentView.startAnimation(ams);
	}

	private void dialogpic() {
		dialog_tv = View.inflate(getApplicationContext(),
				R.layout.activity_dialogpic, null);
		MapViewLayoutParams params = new MapViewLayoutParams.Builder()
				.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)
				.position(point).width(MapViewLayoutParams.WRAP_CONTENT)
				.height(MapViewLayoutParams.WRAP_CONTENT).build();
		mv_maptest.addView(dialog_tv, params);
		dialog_tv.setVisibility(View.INVISIBLE);// 首先隐藏
		tv_dialog = (TextView) dialog_tv.findViewById(R.id.tv_dialog);
		map.setOnMarkerClickListener(this);// 设置点击事件
	}

	// 打开之前先检验key的正确与否
	private void initsdk() {
		// 注册广播
		filter = new IntentFilter();
		filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);// 网络连接错误
		filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);// 校验失败
		registerReceiver(new Mybraodcast(), filter);
		SDKInitializer.initialize(getApplicationContext());
	}

	class Mybraodcast extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			// 判断是否成功

			if (isNetworkAvailable(MainActivity.this)) {
				if (action
						.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
					Toast.makeText(getApplicationContext(), "校验错误。请检查校验码是否正确。",
							Toast.LENGTH_LONG).show();
				} else {
					if (action
							.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
						Toast.makeText(getApplicationContext(),
								"网络错误。请检查网络是否在正常。", Toast.LENGTH_LONG).show();
					}
				}
			}
		}

	}

	// 设置地图图层
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		switch (keyCode) {
		case KeyEvent.KEYCODE_1:
			map.setMapType(BaiduMap.MAP_TYPE_NORMAL);// 底图
			map.setTrafficEnabled(false);// 关闭交通图
			break;
		case KeyEvent.KEYCODE_2:
			map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);// 卫星地图
			map.setTrafficEnabled(false);// 关闭交通图
			break;
		case KeyEvent.KEYCODE_3:
			map.setTrafficEnabled(true);// 打开交通图
			break;
		case KeyEvent.KEYCODE_4:
			MapStatusUpdate zoomin = MapStatusUpdateFactory.zoomIn();// 一级一级缩放
			// 放大
			map.setMapStatus(zoomin);
			break;
		case KeyEvent.KEYCODE_5:
			MapStatusUpdate zoomout = MapStatusUpdateFactory.zoomOut();// 一级一级缩放
			// 缩小
			map.setMapStatus(zoomout);
			break;
		case KeyEvent.KEYCODE_6:
			float jiaodu = map.getMapStatus().rotate;
			MapStatus roates = new MapStatus.Builder().rotate(jiaodu + 15)
					.build();
			MapStatusUpdate roate = MapStatusUpdateFactory.newMapStatus(roates);
			// 旋转
			map.setMapStatus(roate);
			break;
		case KeyEvent.KEYCODE_7:
			float jiaodus = map.getMapStatus().overlook;
			MapStatus roatelines = new MapStatus.Builder()
					.overlook(jiaodus - 5).build();
			MapStatusUpdate roateline = MapStatusUpdateFactory
					.newMapStatus(roatelines);
			// 一条线旋转
			map.setMapStatus(roateline);
			break;
		case KeyEvent.KEYCODE_8:
			MapStatusUpdate move = MapStatusUpdateFactory.newLatLng(new LatLng(
					39.9899560000, 116.3230660000));// 中关村地铁经纬度坐标
			// 移动
			map.animateMapStatus(move);
			break;
		case KeyEvent.KEYCODE_9:
			MapStatusUpdate center = MapStatusUpdateFactory.newLatLng(point);
			// 设置默认中心店
			map.setMapStatus(center);
			break;
		}
		return super.onKeyDown(keyCode, event);
	}

	/**
	 * 检测网络是否可用
	 * 
	 * @return
	 */
	// public boolean isNetworkConnected() {
	// ConnectivityManager cm = (ConnectivityManager)
	// getSystemService(Context.CONNECTIVITY_SERVICE);
	// NetworkInfo ni = cm.getActiveNetworkInfo();
	// return ni != null && ni.isConnectedOrConnecting();
	// }

	public static boolean isNetworkAvailable(Activity activity) {
		Context context = activity.getApplicationContext();
		// 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
		ConnectivityManager connectivityManager = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);

		if (connectivityManager == null) {
			return false;
		} else {
			// 获取NetworkInfo对象
			NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();

			if (networkInfo != null && networkInfo.length > 0) {
				for (int i = 0; i < networkInfo.length; i++) {
					// 判断当前网络状态是否为连接状态
					if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
						return true;
					}
				}
			}
		}
		return false;
	}

	// 在中心点地图位置写文字标注信息
	private void drawtext() {
		TextOptions text = new TextOptions();
		text.position(point).// 需要标注的点的经纬度
				bgColor(0x01ffffff).// 文字背景色
				fontColor(0x99ff0000).// 文字颜色
				fontSize(24).// 字体大小
				text("北京技术股份有限公司").// 文字信息
				typeface(Typeface.MONOSPACE).// 安卓字体
				rotate(0);// .visible(false);//旋转45°,隐藏文字信息
		map.addOverlay(text);// 将文字信息添加到地图上面
	}

	/**
	 * 画图片在地图上面
	 */
	private void drawpictuer() {
		MarkerOptions pictuer = new MarkerOptions();
		// 设置坐标位置
		pictuer.position(new LatLng(weidu + 0.005, jindu - 0.0005))
				.title("扬宏豕慧官方店铺(长按此处可以搜索全局\n点击此处可隐藏搜索框)")
				.icon(BitmapDescriptorFactory.fromResource(R.drawable.caiguan));
		map.addOverlay(pictuer);

		pictuer.position(new LatLng(weidu + 0.02, jindu + 0.005))
				.title("扬宏豕慧店铺(长按此处可以搜索全局\n点击此处可隐藏搜索框)")
				.icon(BitmapDescriptorFactory.fromResource(R.drawable.caiguan))
				.draggable(true);// 可以被拖拽
		map.addOverlay(pictuer);

		ArrayList<BitmapDescriptor> pic = new ArrayList<BitmapDescriptor>();
		pic.add(BitmapDescriptorFactory.fromResource(R.drawable.caiguan));
		pic.add(BitmapDescriptorFactory.fromResource(R.drawable.ya));
		pic.add(BitmapDescriptorFactory.fromResource(R.drawable.wifi));
		pic.add(BitmapDescriptorFactory.fromResource(R.drawable.jia));
		pictuer.position(new LatLng(weidu + 0.002, jindu - 0.0085))
				.title("扬宏豕慧周黑鸭(长按此处可以搜索全局\n点击此处可隐藏搜索框)").icons(pic)
				.draggable(true);// 可以被拖拽
		map.addOverlay(pictuer);

	}

	/**
	 * 设置覆盖物的点击事件
	 */

	@Override
	public boolean onMarkerClick(Marker marker) {
		MapViewLayoutParams params = new MapViewLayoutParams.Builder()
				.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)
				.position(marker.getPosition())
				.width(MapViewLayoutParams.WRAP_CONTENT)
				.height(MapViewLayoutParams.WRAP_CONTENT).yOffset(-40).// 标示在点中的物体上面10距离
				build();
		mv_maptest.updateViewLayout(dialog_tv, params);
		tv_dialog.setText(marker.getTitle());
		dialog_tv.setVisibility(View.VISIBLE);// 点击后显示对话框
		return true;// 标示消费
	}

	// 卫星图切换功能
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.bt_putong:
			map.setMapType(BaiduMap.MAP_TYPE_NORMAL);// 底图
			map.setTrafficEnabled(false);// 关闭交通图
			break;
		case R.id.bt_weixing:
			map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);// 卫星地图
			map.setTrafficEnabled(false);// 关闭交通图
			break;
		case R.id.bt_jiaotong:
			map.setTrafficEnabled(true);// 打开交通图
			break;
		case R.id.ib_da:
			MapStatusUpdate zoomin = MapStatusUpdateFactory.zoomIn();// 一级一级缩放
			// 放大
			map.setMapStatus(zoomin);// 放大地图
			break;
		case R.id.ib_xiao:
			MapStatusUpdate zoomout = MapStatusUpdateFactory.zoomOut();// 一级一级缩放
			// 缩小
			map.setMapStatus(zoomout);// 缩小地图
			break;
		case R.id.tv_dialog:
			ll_search.setVisibility(View.GONE);// 隐藏搜索框
			break;
		}
	}

	@Override
	public boolean onLongClick(View v) {
		switch (v.getId()) {
		case R.id.ib_da:
			ll_suofang.setVisibility(View.GONE);// 隐藏缩放按钮
			break;
		case R.id.bt_putong:
			llweixing.setVisibility(View.GONE);// 隐藏卫星地图切换
			break;
		case R.id.tv_dialog:
			ll_search.setVisibility(View.VISIBLE);// 显示搜索框
			llweixing.setVisibility(View.VISIBLE);// 显示维修地图按钮
			ll_suofang.setVisibility(View.VISIBLE);// 显示缩放按钮
			break;
		case R.id.bt_search:
			ll_search.setVisibility(View.GONE);// 隐藏搜索框
			break;
		}
		return true;
	}
}

 

 

 

再贴出activity_main   xml布局文件

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.baidu.mapapi.map.MapView
        android:id="@+id/mv_maptest"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.baidu.mapapi.map.MapView>

    <LinearLayout
        android:id="@+id/ll_serach"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <!-- ##e0ffffff半透明背景色颜色   android:alpha="0.5"透明方法 -->

        <EditText
            android:id="@+id/et_serach"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:alpha="0.5"
            android:gravity="center"
            android:hint="请输入搜索内容(长按搜索按钮可隐藏)" />

        <Button
            android:id="@+id/bt_search"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:alpha="0.5"
            android:text="点击搜索" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/llweixing"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:alpha="0.5" >

        <Button
            android:id="@+id/bt_putong"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="普通地图" />

        <Button
            android:id="@+id/bt_weixing"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="卫星地图" />

        <Button
            android:id="@+id/bt_jiaotong"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="交通地图" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_suofang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerInParent="true"
        android:layout_marginRight="5dp"
        android:orientation="vertical" >

        <ImageButton
            android:id="@+id/ib_da"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:alpha="0.5"
            android:src="@drawable/da" />

        <ImageButton
            android:id="@+id/ib_xiao"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:alpha="0.5"
            android:src="@drawable/xiao" />
    </LinearLayout>

</RelativeLayout>

 


activity_popuwindows xml文件

 

 

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:gravity="center"
        android:id="@+id/tv_popuowindow"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="气泡" />

</RelativeLayout>

 


activity_dialogpic  xml布局文件

 

 

 

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

    <TextView
        android:textColor="#EE6AA7"
        android:id="@+id/tv_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

 

 

 

 

 

效果图

 

点击下载源码下载

没有积分的可以到github下载:AS版本源码  Eclipse版本源码

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
您好,以下是Kotlin实现百度地图城市POI搜索的示例代码: ```kotlin // 导入必要的类 import com.baidu.mapapi.map.BaiduMap import com.baidu.mapapi.map.MapView import com.baidu.mapapi.search.poi.* import com.baidu.mapapi.model.LatLng // 在Activity中声明相关变量 private var mBaiduMap: BaiduMap? = null private var mMapView: MapView? = null private var mPoiSearch: PoiSearch? = null // 在onCreate()方法中初始化 mMapView = findViewById(R.id.mapView) mBaiduMap = mMapView!!.map mPoiSearch = PoiSearch.newInstance() // 在需要搜索的地方调用以下方法 val city = "北京" // 城市名 val keyword = "餐厅" // 关键词 val center = LatLng(39.915, 116.404) // 搜索中心点坐标 val radius = 1000 // 搜索半径,单位:米 // 设置搜索参数 val poiSearchOption = PoiCitySearchOption() .city(city) .keyword(keyword) .location(center) .radius(radius) mPoiSearch?.search(poiSearchOption) // 监听搜索结果 mPoiSearch?.setOnGetPoiSearchResultListener(object : OnGetPoiSearchResultListener { override fun onGetPoiResult(poiResult: PoiResult?) { if (poiResult == null || poiResult.error != SearchResult.ERRORNO.NO_ERROR) { // 搜索失败处理 return } // 处理搜索结果 val poiList = poiResult.allPoi for (poiInfo in poiList) { // 获取POI的经纬度、名称、地址等信息 val poiLatLng = poiInfo.location val poiName = poiInfo.name val poiAddress = poiInfo.address // 在地图上添加标记 val markerOptions = MarkerOptions() .position(poiLatLng) .title(poiName) .snippet(poiAddress) mBaiduMap?.addOverlay(markerOptions) } } override fun onGetPoiDetailResult(poiDetailResult: PoiDetailResult?) { // 不处理 } override fun onGetPoiIndoorResult(poiIndoorResult: PoiIndoorResult?) { // 不处理 } override fun onGetPoiDetailResult(poiDetailSearchResult: PoiDetailSearchResult?) { // 不处理 } }) // 在onDestroy()方法中释放资源 mPoiSearch?.destroy() ``` 以上代码中,我们先在Activity中声明了`mBaiduMap`、`mMapView`和`mPoiSearch`三个变量。在`onCreate()`方法中,我们初始化了`mMapView`和`mBaiduMap`,并通过`PoiSearch.newInstance()`方法创建了一个`mPoiSearch`实例。 在需要搜索的地方,我们设置了搜索参数,然后调用`mPoiSearch?.search(poiSearchOption)`方法开始搜索。在搜索结果回调中,我们可以通过`PoiResult`对象获取搜索结果,然后处理结果并在地图上添加标记。 最后,在`onDestroy()`方法中,我们释放了`mPoiSearch`实例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值