package baidumapsdk.demo.search;

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

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.map.BaiduMap;

import com.baidu.mapapi.map.BitmapDescriptor;

import com.baidu.mapapi.map.BitmapDescriptorFactory;

import com.baidu.mapapi.map.CircleOptions;

import com.baidu.mapapi.map.GroundOverlayOptions;

import com.baidu.mapapi.map.MapStatusUpdate;

import com.baidu.mapapi.map.MapStatusUpdateFactory;

import com.baidu.mapapi.map.MarkerOptions;

import com.baidu.mapapi.map.OverlayOptions;

import com.baidu.mapapi.map.Stroke;

import com.baidu.mapapi.map.SupportMapFragment;

import com.baidu.mapapi.model.LatLng;

import com.baidu.mapapi.model.LatLngBounds;

import com.baidu.mapapi.overlayutil.PoiOverlay;

import com.baidu.mapapi.search.core.CityInfo;

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.PoiCitySearchOption;

import com.baidu.mapapi.search.poi.PoiDetailResult;

import com.baidu.mapapi.search.poi.PoiDetailSearchOption;

import com.baidu.mapapi.search.poi.PoiIndoorResult;

import com.baidu.mapapi.search.poi.PoiNearbySearchOption;

import com.baidu.mapapi.search.poi.PoiResult;

import com.baidu.mapapi.search.poi.PoiSearch;

import com.baidu.mapapi.search.poi.PoiSortType;

import com.baidu.mapapi.search.sug.OnGetSuggestionResultListener;

import com.baidu.mapapi.search.sug.SuggestionResult;

import com.baidu.mapapi.search.sug.SuggestionSearch;

import com.baidu.mapapi.search.sug.SuggestionSearchOption;

import java.util.ArrayList;

import java.util.List;

import baidumapsdk.demo.R;

/**

  • 演示poi搜索功能

    */

    public class PoiSearchDemo extends FragmentActivity implements

    OnGetPoiSearchResultListener, OnGetSuggestionResultListener {

    private PoiSearch mPoiSearch = null;

    private SuggestionSearch mSuggestionSearch = null;

    private BaiduMap mBaiduMap = null;

    private List suggest;

    /**

    • 搜索关键字输入窗口

      */

      private EditText editCity = null;

      private AutoCompleteTextView keyWorldsView = null;

      private ArrayAdapter sugAdapter = null;

      private int loadIndex = 0;

    LatLng center = new LatLng(39.92235, 116.380338);

    int radius = 100;

    LatLng southwest = new LatLng( 39.92235, 116.380338 );

    LatLng northeast = new LatLng( 39.947246, 116.414977);

    LatLngBounds searchbound = new LatLngBounds.Builder().include(southwest).include(northeast).build();

    int searchType = 0; // 搜索的类型,在显示时区分

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_poisearch);

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

    mPoiSearch = PoiSearch.newInstance();

    mPoiSearch.setOnGetPoiSearchResultListener(this);

     // 初始化建议搜索模块,注册建议搜索事件监听
    mSuggestionSearch = SuggestionSearch.newInstance();
    mSuggestionSearch.setOnGetSuggestionResultListener(this); editCity = (EditText) findViewById(R.id.city);
    keyWorldsView = (AutoCompleteTextView) findViewById(R.id.searchkey);
    sugAdapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line);
    keyWorldsView.setAdapter(sugAdapter);
    keyWorldsView.setThreshold(1);
    mBaiduMap = ((SupportMapFragment) (getSupportFragmentManager()
    .findFragmentById(R.id.map))).getBaiduMap();
    /**
    * 当输入关键字变化时,动态更新建议列表
    */
    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;
    } /**
    * 使用建议搜索服务获取建议列表,结果在onSuggestionResult()中更新
    */
    mSuggestionSearch
    .requestSuggestion((new SuggestionSearchOption())
    .keyword(cs.toString()).city(editCity.getText().toString()));
    }
    });

    }

    @Override

    protected void onPause() {

    super.onPause();

    }

    @Override

    protected void onResume() {

    super.onResume();

    }

    @Override

    protected void onDestroy() {

    mPoiSearch.destroy();

    mSuggestionSearch.destroy();

    super.onDestroy();

    }

    @Override

    protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    }

    @Override

    protected void onRestoreInstanceState(Bundle savedInstanceState) {

    super.onRestoreInstanceState(savedInstanceState);

    }

    /**

    • 响应城市内搜索按钮点击事件
    • @param v

      */

      public void searchButtonProcess(View v) {

      searchType = 1;

      String citystr = editCity.getText().toString();

      String keystr = keyWorldsView.getText().toString();

      mPoiSearch.searchInCity((new PoiCitySearchOption())

      .city(citystr).keyword(keystr).pageNum(loadIndex));

      }

    /**

    • 响应周边搜索按钮点击事件
    • @param v

      */

      public void searchNearbyProcess(View v) {

      searchType = 2;

      PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption().keyword(keyWorldsView.getText()

      .toString()).sortType(PoiSortType.distance_from_near_to_far).location(center)

      .radius(radius).pageNum(loadIndex);

      mPoiSearch.searchNearby(nearbySearchOption);

      }

    public void goToNextPage(View v) {

    loadIndex++;

    searchButtonProcess(null);

    }

    /**

    • 响应区域搜索按钮点击事件
    • @param v

      */

      public void searchBoundProcess(View v) {

      searchType = 3;

      mPoiSearch.searchInBound(new PoiBoundSearchOption().bound(searchbound)

      .keyword(keyWorldsView.getText().toString()));

    }

    /**

    • 获取POI搜索结果,包括searchInCity,searchNearby,searchInBound返回的搜索结果

    • @param result

      */

      public void onGetPoiResult(PoiResult result) {

      if (result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {

      Toast.makeText(PoiSearchDemo.this, "未找到结果", Toast.LENGTH_LONG)

      .show();

      return;

      }

      if (result.error == SearchResult.ERRORNO.NO_ERROR) {

      mBaiduMap.clear();

      PoiOverlay overlay = new MyPoiOverlay(mBaiduMap);

      mBaiduMap.setOnMarkerClickListener(overlay);

      overlay.setData(result);

      overlay.addToMap();

      overlay.zoomToSpan();

       switch( searchType ) {
      case 2:
      showNearbyArea(center, radius);
      break;
      case 3:
      showBound(searchbound);
      break;
      default:
      break;
      } return;

      }

      if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {

       // 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表
      String strInfo = "在";
      for (CityInfo cityInfo : result.getSuggestCityList()) {
      strInfo += cityInfo.city;
      strInfo += ",";
      }
      strInfo += "找到结果";
      Toast.makeText(PoiSearchDemo.this, strInfo, Toast.LENGTH_LONG)
      .show();

      }

      }

    /**

    • 获取POI详情搜索结果,得到searchPoiDetail返回的搜索结果
    • @param result

      */

      public void onGetPoiDetailResult(PoiDetailResult result) {

      if (result.error != SearchResult.ERRORNO.NO_ERROR) {

      Toast.makeText(PoiSearchDemo.this, "抱歉,未找到结果", Toast.LENGTH_SHORT)

      .show();

      } else {

      Toast.makeText(PoiSearchDemo.this, result.getName() + ": " + result.getAddress(), Toast.LENGTH_SHORT)

      .show();

      }

      }

    @Override

    public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

    }

    /**

    • 获取在线建议搜索结果,得到requestSuggestion返回的搜索结果
    • @param res

      */

      @Override

      public void onGetSuggestionResult(SuggestionResult res) {

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

      return;

      }

      suggest = new ArrayList();

      for (SuggestionResult.SuggestionInfo info : res.getAllSuggestions()) {

      if (info.key != null) {

      suggest.add(info.key);

      }

      }

      sugAdapter = new ArrayAdapter(PoiSearchDemo.this, android.R.layout.simple_dropdown_item_1line, suggest);

      keyWorldsView.setAdapter(sugAdapter);

      sugAdapter.notifyDataSetChanged();

      }

    private class MyPoiOverlay extends PoiOverlay {

     public MyPoiOverlay(BaiduMap baiduMap) {
    super(baiduMap);
    } @Override
    public boolean onPoiClick(int index) {
    super.onPoiClick(index);
    PoiInfo poi = getPoiResult().getAllPoi().get(index);
    // if (poi.hasCaterDetails) {
    mPoiSearch.searchPoiDetail((new PoiDetailSearchOption())
    .poiUid(poi.uid));
    // }
    return true;
    }

    }

    /**

    • 对周边检索的范围进行绘制

    • @param center

    • @param radius

      */

      public void showNearbyArea( LatLng center, int radius) {

      BitmapDescriptor centerBitmap = BitmapDescriptorFactory

      .fromResource(R.drawable.icon_geo);

      MarkerOptions ooMarker = new MarkerOptions().position(center).icon(centerBitmap);

      mBaiduMap.addOverlay(ooMarker);

      OverlayOptions ooCircle = new CircleOptions().fillColor( 0xCCCCCC00 )

      .center(center).stroke(new Stroke(5, 0xFFFF00FF ))

      .radius(radius);

      mBaiduMap.addOverlay(ooCircle);

      }

    /**

    • 对区域检索的范围进行绘制

    • @param bounds

      */

      public void showBound( LatLngBounds bounds) {

      BitmapDescriptor bdGround = BitmapDescriptorFactory

      .fromResource(R.drawable.ground_overlay);

      OverlayOptions ooGround = new GroundOverlayOptions()

      .positionFromBounds(bounds).image(bdGround).transparency(0.8f);

      mBaiduMap.addOverlay(ooGround);

      MapStatusUpdate u = MapStatusUpdateFactory

      .newLatLng(bounds.getCenter());

      mBaiduMap.setMapStatus(u);

      bdGround.recycle();

      }

      }

百度poi搜索的更多相关文章

  1. Android学习笔记之使用百度地图实现Poi搜索

    PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询   百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...

  2. [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

    一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...

  3. iOS第三方地图-百度地图常用功能使用(POI搜索,地理正反编码,定位,添加标注)

    百度地图官网: http://developer.baidu.com/map/index.php?title=iossdk 百度地图集成 1.引入相关包

  4. 使用python抓取百度搜索、百度新闻搜索的关键词个数

    由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过pyth ...

  5. 高德地图-搜索服务-POI搜索

    高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...

  6. Selenium2学习-009-WebUI自动化实战实例-007-Selenium 8种元素定位实战实例源代码(百度首页搜索录入框及登录链接)

    此 文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,通过 ID.name.xpath.cssSelector.linkText.className.partialLinkTe ...

  7. 分享一个jquery写的类似于百度的搜索框,(可动态配置,可单列或者table格式,可填充数据)

    需求:类似于百度的搜索框,可配置,可单列可table格式,可填充数据.页面可多次使用,简单,易用. 想法:使用jquery,css,ajax,前台调用,后台返回json数据. jquery代码: va ...

  8. 百度网页搜索部来自Console的招聘信息

    百度网页搜索部来自Console的招聘信息,小伙伴们,你发现了吗?

  9. 百度词典搜索_dress code

    百度词典搜索_dress code dress code n.着装标准

随机推荐

  1. Angular 初体验

    事情起源当初一个简单的截屏然后推流出去的工具,这个工具当初我用winform简单实现了下,然后因公司业余,添加许多程序包,需要自动管理这些程序包,包含下载更新上传等,以及与后台交互,学生老师提醒,自动 ...

  2. Django路由配置之子路由include(URL分发)

    子路由include(URL分发) 在一个项目中可能存在多个应用,为了方便区分和管理,在项目的总路由urls.py中会进行路由分发: (1)项目总路由导入from  django.conf.urls  ...

  3. python3.x 基础七:面向对象进阶

    类的高级方法: 1.静态方法:在类方法前增加关键字@staticmethod,将普通方法变成静态方法,不能再次传值,不能访问实例变量或者类变量,与类的关系仅仅是通过类名进行调用 2.类方法:在类方法前 ...

  4. 201771010128王玉兰《面向对象与程序设计(Java)》第十七周学习总结

    第一部分:理论基础 线程的同步 多线程并发运行不确定性问题解决方案:引入线 程同步机制,使得另一线程要使用该方法,就只 能等待. 在Java中解决多线程同步问题的方法有两种: - Java SE 5. ...

  5. poj1780欧拉回路

    转载 #include<cstdio> #include<cstring> ; bool vis[N]; char ans[N]; int main() { int n; wh ...

  6. hdu5967数学找规律+逆元

    Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  7. vscode环境配置(二)——C Program Debug

    一.任务准备 launch.json { "version": "0.2.0", "configurations": [ { "n ...

  8. 蒲公英 · JELLY技术周刊 Vol.08 -- 技术周刊 · npm install -g typescript@3.9.3

    登高远眺 沧海拾遗,积跬步以至千里 基础技术 官宣: Typescript 3.9 正式发布 TypeScript 3.9 正式发布,这个版本主要聚焦于性能.改进某些特性和提升稳定性.编译器效率在这一 ...

  9. 重磅!阿里P8费心整理Netty实战+指南+项目白皮书PDF,总计1.08G

    前言 Netty是一款用于快速开发高性能的网络应用程序的Java框架.它封装了网络编程的复杂性,使网络编程和Web技术的最新进展能够被比以往更广泛的开发人员接触到. Netty不只是一个接口和类的集合 ...

  10. 8.Hash集合类型操作使用

    数据类型Hash (1)介绍 hash数据类型存储的数据与mysql数据库中存储的一条记录极为相似 Redis本身就类似于Hash的存储结构,分为key-value键值对,实际上它的Hash数据就好像 ...