我想大家可能都有过这样的经历:兜里揣着一张银行卡,在街上到处找自动取款机(ATM)。在这个场景中,ATM就是的兴趣点,我们想做的事情就是找到离自己较近的一些ATM然后取款,此时我们并不关心附近有哪些超市、酒吧,因为这些地方没办法取钱!

说了这么多,一方面是加深大家对POI这个词的认识,另一方面也是为了让大家明白我们接下来要做的事情。理论性的东西就不再多讲了,直接来看例子。

先给大家展示下效果图:

详细界面:

该示例主要介绍关键词查询、suggestion查询和查看餐饮类Place详情页功能,尤其搜索某个地方的餐厅、理发店等等比较有实际意义,百度Demo代码如下:

Activity:

package com.home;

import android.app.Activity;

import android.os.Bundle;

import android.text.Editable;

import android.text.TextWatcher;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.AutoCompleteTextView;

import android.widget.EditText;

import android.widget.Toast;

import com.baidu.mapapi.BMapManager;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.search.MKAddrInfo;

import com.baidu.mapapi.search.MKBusLineResult;

import com.baidu.mapapi.search.MKDrivingRouteResult;

import com.baidu.mapapi.search.MKPoiInfo;

import com.baidu.mapapi.search.MKPoiResult;

import com.baidu.mapapi.search.MKSearch;

import com.baidu.mapapi.search.MKSearchListener;

import com.baidu.mapapi.search.MKShareUrlResult;

import com.baidu.mapapi.search.MKSuggestionInfo;

import com.baidu.mapapi.search.MKSuggestionResult;

import com.baidu.mapapi.search.MKTransitRouteResult;

import com.baidu.mapapi.search.MKWalkingRouteResult;

/**

* 演示poi搜索功能

*/

public class PoiSearchActivity extends Activity {

private MapView mMapView = null;

private MKSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用

/**

* 搜索关键字输入窗口

*/

private AutoCompleteTextView keyWorldsView = null;

private ArrayAdapter sugAdapter = null;

private int load_Index;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

DemoApplication app = (DemoApplication) this.getApplication();

if (app.mBMapManager == null) {

app.mBMapManager = new BMapManager(this);

app.mBMapManager.init(DemoApplication.strKey,

new DemoApplication.MyGeneralListener());

}

setContentView(R.layout.activity_poisearch);

mMapView = (MapView) findViewById(R.id.bmapView);

mMapView.getController().enableClick(true);

mMapView.getController().setZoom(12);

// 初始化搜索模块,注册搜索事件监听

mSearch = new MKSearch();

mSearch.init(app.mBMapManager, new MKSearchListener() {

// 在此处理详情页结果

@Override

public void onGetPoiDetailSearchResult(int type, int error) {

if (error != 0) {

Toast.makeText(PoiSearchActivity.this, "抱歉,未找到结果",

Toast.LENGTH_SHORT).show();

} else {

Toast.makeText(PoiSearchActivity.this, "成功,查看详情页面",

Toast.LENGTH_SHORT).show();

}

}

/**

* 在此处理poi搜索结果

*/

public void onGetPoiResult(MKPoiResult res, int type, int error) {

// 错误号可参考MKEvent中的定义

if (error != 0 || res == null) {

Toast.makeText(PoiSearchActivity.this, "抱歉,未找到结果",

Toast.LENGTH_LONG).show();

return;

}

// 将地图移动到第一个POI中心点

if (res.getCurrentNumPois() > 0) {

// 将poi结果显示到地图上

MyPoiOverlay poiOverlay = new MyPoiOverlay(

PoiSearchActivity.this, mMapView, mSearch);

poiOverlay.setData(res.getAllPoi());

mMapView.getOverlays().clear();

mMapView.getOverlays().add(poiOverlay);

mMapView.refresh();

// 当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空

for (MKPoiInfo info : res.getAllPoi()) {

if (info.pt != null) {

mMapView.getController().animateTo(info.pt);

break;

}

}

} else if (res.getCityListNum() > 0) {

// 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表

String strInfo = "在";

for (int i = 0; i < res.getCityListNum(); i++) {

strInfo += res.getCityListInfo(i).city;

strInfo += ",";

}

strInfo += "找到结果";

Toast.makeText(PoiSearchActivity.this, strInfo,

Toast.LENGTH_LONG).show();

}

}

public void onGetDrivingRouteResult(MKDrivingRouteResult res,

int error) {

}

public void onGetTransitRouteResult(MKTransitRouteResult res,

int error) {

}

public void onGetWalkingRouteResult(MKWalkingRouteResult res,

int error) {

}

public void onGetAddrResult(MKAddrInfo res, int error) {

}

public void onGetBusDetailResult(MKBusLineResult result, int iError) {

}

/**

* 更新建议列表

*/

@Override

public void onGetSuggestionResult(MKSuggestionResult res, int arg1) {

if (res == null || res.getAllSuggestions() == null) {

return;

}

sugAdapter.clear();

for (MKSuggestionInfo info : res.getAllSuggestions()) {

if (info.key != null)

sugAdapter.add(info.key);

}

sugAdapter.notifyDataSetChanged();

}

@Override

public void onGetShareUrlResult(MKShareUrlResult result, int type,

int error) {

}

});

keyWorldsView = (AutoCompleteTextView) findViewById(R.id.searchkey);

sugAdapter = new ArrayAdapter(this,

android.R.layout.simple_dropdown_item_1line);

keyWorldsView.setAdapter(sugAdapter);

/**

* 当输入关键字变化时,动态更新建议列表

*/

keyWorldsView.addTextChangedListener(new TextWatcher() {

@Override

public void afterTextChanged(Editable arg0) {

}

@Override

public void beforeTextChanged(CharSequence arg0, int arg1,

int arg2, int arg3) {

}

@Override

public void onTextChanged(CharSequence cs, int arg1, int arg2,

int arg3) {

if (cs.length() <= 0) {

return;

}

String city = ((EditText) findViewById(R.id.city)).getText()

.toString();

/**

* 使用建议搜索服务获取建议列表,结果在onSuggestionResult()中更新

*/

mSearch.suggestionSearch(cs.toString(), city);

}

});

}

@Override

protected void onPause() {

mMapView.onPause();

super.onPause();

}

@Override

protected void onResume() {

mMapView.onResume();

super.onResume();

}

@Override

protected void onDestroy() {

mMapView.destroy();

super.onDestroy();

}

@Override

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

mMapView.onSaveInstanceState(outState);

}

@Override

protected void onRestoreInstanceState(Bundle savedInstanceState) {

super.onRestoreInstanceState(savedInstanceState);

mMapView.onRestoreInstanceState(savedInstanceState);

}

/**

* 影响搜索按钮点击事件

*

* @param v

*/

public void searchButtonProcess(View v) {

EditText editCity = (EditText) findViewById(R.id.city);

EditText editSearchKey = (EditText) findViewById(R.id.searchkey);

mSearch.poiSearchInCity(editCity.getText().toString(), editSearchKey

.getText().toString());

}

public void goToNextPage(View v) {

// 搜索下一组poi

int flag = mSearch.goToPoiPage(++load_Index);

if (flag != 0) {

Toast.makeText(PoiSearchActivity.this, "先搜索开始,然后再搜索下一组数据",

Toast.LENGTH_SHORT).show();

}

}

}

布局XML(activity_poisearch):

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="50dip"

android:orientation="horizontal" >

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="在" >

android:id="@+id/city"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:text="北京" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="市内找" >

android:id="@+id/searchkey"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="0.88"

android:text="餐厅" />

android:layout_width="fill_parent"

android:layout_height="50dip"

android:orientation="horizontal" >

android:id="@+id/search"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="12"

android:background="@drawable/button_style"

android:onClick="searchButtonProcess"

android:padding="10dip"

android:text="开始" />

android:id="@+id/map_next_data"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="12"

android:background="@drawable/button_style"

android:onClick="goToNextPage"

android:padding="10dip"

android:text="下一组数据" />

android:id="@+id/bmapView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:clickable="true" />

MyPoiOverlay类

package com.home;

import android.app.Activity;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.PoiOverlay;

import com.baidu.mapapi.search.MKPoiInfo;

import com.baidu.mapapi.search.MKSearch;

public class MyPoiOverlay extends PoiOverlay {

MKSearch mSearch;

public MyPoiOverlay(Activity activity, MapView mapView, MKSearch search) {

super(activity, mapView);

mSearch = search;

}

@Override

protected boolean onTap(int i) {

super.onTap(i);

MKPoiInfo info = getPoi(i);

if (info.hasCaterDetails) {

mSearch.poiDetailSearch(info.uid);

}

return true;

}

}

在配置文件中要比之前多配置一个activity,不然没法查看详细界面,这是百度SDK jar中提供的类:

android:name="com.baidu.mapapi.search.PlaceCaterActivity"

android:configChanges="orientation|keyboardHidden"

android:theme="@android:style/Theme.NoTitleBar" >

Application类同之前。

android百度地图附近的poi,Android百度地图poi范围搜索相关推荐

  1. android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...

    目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...

  2. android百度地图定位文字表述,Android studio 百度地图开发(8)地图已标记POI点和搜索POI点的获取和利用...

    一.简要描述 百度地图的POI点可以分有两种:地图中已经标记的点和通过关键词搜索得到的POI点.对于这两种POI点,百度封装成了不同的类和接口来实现监听,下面简单讲一点. 二.地图中已标记POI点 首 ...

  3. [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题

        最近做android百度地图,但是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--只显示网格而没有显示地图,网络 ...

  4. 百度android地图开发文档,简介-百度地图开发文档

    目录1 JavaScript API功能介绍 2 面向的读者 3 坐标转换 4 版本说明及申请API ak 5 获取JavaScript API服务方法 6 开发移动平台上的地图应用 7 Https ...

  5. Android中级篇之百度地图SDK v3.5.0-基础地图[图解百度地图基础教程]

    基础地图[比官方更详细] 简介 开发者可利用SDK提供的接口,使用百度为您提供的基础地图数据.目前百度地图SDK所提供的地图等级为3-19级,所包含的信息有建筑物.道路.河流.学校.公园等内容.所有叠 ...

  6. android百度地图更换定位图标,android百度地图定位,改变MyLocationOverlay默认图标(原始为蓝色点)(两种方法)...

    开放地图API无外乎google ,百度,高德等.其它的还有很多,不过比较好用的就这三种了,如果不需要出国(台湾例外),则最好使用百度地图,性能比高德好的多,无聊的时候自己可以测试测试.. 下面我简单 ...

  7. 【Android】3.0 第3章 百度地图及其应用--预备知识

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.概述 这一章先来点有意思的百度地图应用示例,然后再分章详细介绍用C#开发Android App的各种基本技 ...

  8. Android获取当前位置,推荐使用百度地图SDK获取位置

    这里直接引用了百度V2.6出给出的DEMO实例,经过测试,在手机客户端可以获取到当前所在的位置 首先先看一下MainActivity.java package com.example.location ...

  9. android 支付宝 地图,利用百度地图实现支付宝“到位”功能(地图模式)

    Hello,大家好,郭老司机又来话痨啦((/- -)/.作为一个芝麻信用分762的穷苦青年,本想着,终于可以在支付宝上,光明正大的勾搭坦诚相见的妹子们,谁知道被和谐了,互联网套路啊(ノಠ益ಠ)ノ彡┻━ ...

  10. android app调用第三方地图路线规划导航(百度,高德,腾讯)

    android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...

最新文章

  1. iOS 图片处理-图片旋转和裁剪
  2. 【若依(ruoyi)】表格图片预览功能图片超宽、超高问题
  3. [SpringBoot2]web场景_SpringBoot2_SpringMVC自动配置概览
  4. isfull mysql_MySQL数据库之MySQL 出现 The table is full 的解决方法
  5. c语言程序设计的几种循环,C语言程序设计教案 第六章 循环程序设计.doc
  6. 【今日CV 视觉论文速览】21 Nov 2018
  7. Java:基于LinkedList实现栈和队列
  8. mysql 重置表索引_MySQL管理表和索引
  9. 在Mac OS X中使用VIM开发STM32(3)
  10. 彻底搞懂git rebase命令
  11. 【自动控制原理】渐进稳定与临界稳定的区别与联系
  12. foxmail连接163邮箱服务器,消除Foxmail无法登录163邮箱顽疾
  13. Quartus II 13.1 出现 ‘‘can‘t find design entity <Filename>‘‘ 问题的解决方法
  14. vue+draggable +jsPlumb 表格数据连线
  15. 六个参数帮你全面了解固态硬盘
  16. MacTex字体缺失 Error: The font “TeX Gyre Termes Math“ cannot be found.
  17. 《程序员的自我修养》阅读笔记(一)
  18. 前端学习之HTML第二天
  19. MessageBox和::MessageBox的使用
  20. kube-scheduler源码分析(一)之 NewSchedulerCommand

热门文章

  1. 企业电子招投标系统之首页设计
  2. Java购买飞机票1.头等舱2.经济舱
  3. MFC添加gif动画
  4. 毕业论文问卷数据怎样分析才正确?
  5. 缓冲区设计--环形队列
  6. 喜剧悲剧:《Friends》(六人行/老友记)纪念
  7. 锂电材料浆料匀浆搅拌设备轴承经常故障如何处理?
  8. 华为鸿蒙系统下载猫薄荷,华为鸿蒙系统官网下载_华为鸿蒙系统官网2.0系统安装包免费分享 v1.0-安族软件网...
  9. linux开通80端口命令,Linux iptables开启80端口
  10. 医用额温枪测温仪生产厂家