百度地图搜索

author author     2022-08-03     120

关键词:

搜索的核心类:

MKSearchMKSearchListener

MKSearch:用于位置检索、周边检索、范围检索、公交检索、驾乘检索、

MKSearchListener:查出的结果由MKSearchListener处理

 

***使用百度地图必须进行的准备工作:

1、初始化:

1)、到百度的服务器端检验KEY

创建initManager()方法进行检验的操作:

①、创建百度地图的管理器对象:

②、对管理器对象进行初始化,调用init方法

init(String strKey, MKGeneralListener listener)

参数:

strKey:申请的授权验证码

listener:注册回调事件——需要在监听中校验key300)和网络状态(2

关于状态码信息我们可以在MKEvent查询

创建监听,实现其中的方法:

@onGetNetworkState:网络的判断——判断iError是否为2,是则无网络(此处可以提示用户)

@onGetPermissionState:授权验证的状态——判断iError是否为300,是则验证失败(此处可以提示用户)

2)加载布局文件:用于显示地图【mapView

【调用父类的onCreate方法,进行初始化】

创建布局,调用setContentView方法进行解析加载:

<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"

    tools:context=".MainActivity" >

 

    <com.baidu.mapapi.map.MapView

        android:id="@+id/mapview"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        />

</RelativeLayout>

 

3)初始化控件

①、初始化地图控件mapView

mapView = (MapView) findViewById(R.id.mapview);

②、添加缩放按钮:

mapView.setBuiltInZoomControls(true);// 显示放大和缩小的控件

③、注册监听:

mapView.regMapViewListener(manager, new MKMapViewListener()

onClickMapPoi(MapPoi poi)方法中可以设置点击某个兴趣点时显示的名称

 

4)实现生命周期的方法:

实现Activity中的onResume()onPause()onDestroy()三个方法,并在其中调用

@Override

protected void onResume() {

mapView.onResume();

super.onResume();

}

 

@Override

protected void onPause() {

mapView.onPause();

super.onPause();

}

 

@Override

protected void onDestroy() {

mapView.destroy();

super.onDestroy();

}

 

一、范围内的检索

需要结合PoiOverlay【本地搜索覆盖物】进行显示

【在poi的信息类中的字段中:uid:指的是poiid,是poi的唯一标识】

一)在矩形范围内检索[poiSearchInbounds]-----à PoiSearchInboundsDemo

1、创建类继承BaseActivity

相关的初始化方法都在上面的准备工作中

定义相关的变量:

private MKSearch search;

private MKSearchListener listener;

2、在初始化onCreate方法中定义search方法,对搜索相关类进行初始化

search方法中:

①、创建MKSearch,并进行初始化

listener = new MyListener();

search = new MKSearch();

search.init(manager, listener);

需要在之前创建好监听器

②、在矩形范围内搜索:

@需要先设置搜索的两个点的坐标:左下角和右上角的坐标

GeoPoint ptLB = new GeoPoint((int) (40.035 * 1E6), (int) (116.296 * 1E6));

GeoPoint ptRT = new GeoPoint((int) (40.051 * 1E6), (int) (116.303 * 1E6));

@调用poiSearchInbounds方法,在矩形范围内搜索:

search.poiSearchInbounds("加油站", ptLB, ptRT);

 

3、自定义监听器:

Tips

由于MKSearchListener中的方法较多,需要自定义适配器,对监听器进行改造

使得自定义的监听器继承自定义的适配器即可

①、在BaseActivity中自定义MKSearchListener的适配器,实现相应的方法

②、实现onGetPoiResult方法:

@判断返回的结果不为空,且错误码等于0【请求成功】

*创建PoiOverlay对象,传入的参数为当前的ActivitymapView

*将服务器回复的结果与覆盖物关联在一起;只有这样做了,才能将其展示在地图上

*将覆盖物添加到mapView

*刷新mapView,展示在地图上

@否则,进行提示用户

 

 

二)周边检索:[poiSearchNearBy] -----à PoiSearchNearByDemo

使用周边检索的覆盖物poiSearchNearBy可以进行圆形区域内进行检索

相关的初始化方法都在准备工作中:

初始化引擎,初始化管理器,初始化控件mapView

1、定义搜索的变量:

private MKSearch search;

private MKSearchListener listener;

2、初始化:

创建search方法,初始化搜索的相关对象和参数:

Search方法中:

①、创建MKSearch对象,并进行初始化:

@创建监听器listener

@进行初始化:指定管理对象,并设置监听

@进行周边范围的搜索,调用指定的方法:

周边检索:poiSearchNearBy(String key, GeoPoint pt, int radius)

参数:

key:搜索的名称,如“加油站”

pt:搜索的位置坐标,此对象包含指定位置的经纬度,如黑马坐标:GeoPoint hmPos=new GeoPoint(latitude, longitude);//黑马坐标

int latitude = (int) (40.051 * 1E6);// 纬度

int longitude = (int) (116.303 * 1E6);// 经度

radius:搜索的圆形区域的范围,即半径

 

private void search() {

listener=new MyListener();

search=new MKSearch();

search.init(manager, listener);

search.poiSearchNearBy("加油站", hmPos, 1000);

}

3、自定义监听器:

Tips

由于MKSearchListener中的方法较多,需要自定义适配器,对监听器进行改造

使得自定义的监听器继承自定义的适配器即可

1)实现监听中检索对应的方法

①、对周边范围内检索,实现onGetPoiResult

当获取到结果时,且请求成功(iError0),进行位置的显示:

@创建PoiOverlay覆盖物对象:指定参数——上下文,地图控件mapView

@设置参数:将服务器返回数据添加到poi覆盖物中

@添加覆盖物到MapView

@刷新MapView

PoiOverlay overlay=new PoiOverlay(PoiSearchNearByDemo.this, mapView);

overlay.setData(result.getAllPoi());

 

mapView.getOverlays().add(overlay);

mapView.refresh();

 

二)全程内范围检索:[poiSearchInCity] -----à PoiSearchInCityDemo

使用全程内范围检索的覆盖物poiSearchInCity

相关的初始化方法都在准备工作中:

初始化引擎,初始化管理器,初始化控件mapView

1、定义搜索的变量:

private MKSearch search;

private MKSearchListener listener;

2、初始化:

创建search方法,初始化搜索的相关对象和参数:

Search方法中:

①、创建MKSearch对象,并进行初始化:

@创建监听器listener

@进行初始化:指定管理对象,并设置监听

@进行全程内范围的搜索,调用指定的方法:

全程内范围的搜索:poiSearchInCity(String city, String key)

参数:

city:指定搜索的城市,如:“背景”

key:搜索的名称,如“加油站”、

3、自定义监听器:

Tips

由于MKSearchListener中的方法较多,需要自定义适配器,对监听器进行改造

使得自定义的监听器继承自定义的适配器即可

1)实现监听中检索对应的方法

对周边范围内检索,实现onGetPoiResult

①、在result中获得分页信息

*获取“第几页”:result.getPageIndex()

*获取“总页数”:result.getNumPages()

*获取本次poi搜索的总结果数:result.getNumPois()

测试:可以通过打印吐司,查看显示的页数:

String info=""+pageIndex+"页共"+numPages+"页总记录数:"+numPois;

Toast.makeText(getApplicationContext(), info, 1).show();

②、创建覆盖物,进行显示位置:

当获取到结果时,且请求成功(iError0),进行位置的显示:

@创建PoiOverlay覆盖物对象:指定参数——上下文,地图控件mapView

@设置参数:将服务器返回数据添加到poi覆盖物中

@添加覆盖物到MapView:注意,在添加覆盖物之前,需要先清除上一页显示的内容

mapView.getOverlays().clear();//清除上一页的显示内容

mapView.getOverlays().add(overlay);

@刷新MapView

 

4、测试:

通过重写按键按下的动作,进行测试:

通过搜索对象search,获取下一页的信息:search.goToPoiPage(currentPage);//获取下一页信息

 

Tips

1、在初始化布局之前,一定要初始化引擎,校验key

2POI检索结果每页容量默认情况下为10,可以通过setPoiPageCapacity设置,支持1-50(10)

3、翻页功能通过MKSearch类的goToPoiPage实现,该方法是异步函数,搜索成功后会调用注册的事件处理函数onGetPoiResult 返回查询页的结果。

4、本地搜索支持分类搜索,例如mSearch.poiSearchInCity("北京", "娱乐")

 

 

 

/**

 * 在矩形范围内搜索

 * @author Administrator

 */

public class PoiSearchInboundsDemo extends BaseActivity {

private MKSearch search;

private MKSearchListener listener;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

search();

}

 

private void search() {

listener = new MyListener();

search = new MKSearch();

search.init(manager, listener);

 

GeoPoint ptLB = new GeoPoint((int) (40.035 * 1E6), (int) (116.296 * 1E6));

GeoPoint ptRT = new GeoPoint((int) (40.051 * 1E6), (int) (116.303 * 1E6));

 

// 在矩形范围内搜索

search.poiSearchInbounds("加油站", ptLB, ptRT);

}

 

private class MyListener extends BaseSearchListener {

@Override

public void onGetPoiResult(MKPoiResult result, int type, int iError) {

if (result != null && iError == 0) {

PoiOverlay overlay=new PoiOverlay(PoiSearchInboundsDemo.this, mapView);

overlay.setData(result.getAllPoi());//将服务器回复的结果与覆盖物关联在一起


mapView.getOverlays().add(overlay);

mapView.refresh();


} else {

Toast.makeText(getApplicationContext(), "未查询到结果", 0).show();

}

}

}

}

 

 

/**

 * 圆形区域内进行检索

 * @author Administrator

 *

 */

public class PoiSearchNearByDemo extends BaseActivity {

private MKSearch search;

private MKSearchListener listener;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

search();

}

 

private void search() {

listener=new MyListener();

search=new MKSearch();

search.init(manager, listener);


search.poiSearchNearBy("加油站", hmPos, 1000);

}


private class MyListener extends BaseSearchListener{

@Override

public void onGetPoiResult(MKPoiResult result, int type, int iError) {

if (result != null && iError == 0) {

PoiOverlay overlay=new PoiOverlay(PoiSearchNearByDemo.this, mapView);

overlay.setData(result.getAllPoi());


mapView.getOverlays().add(overlay);

mapView.refresh();


} else {

Toast.makeText(getApplicationContext(), "未查询到结果", 0).show();

}

}

}

}

 

 

/**

 * 全城搜索

 * @author Administrator

 */

public class PoiSearchInCityDemo extends BaseActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

searchInCity();

}

 

private void searchInCity() {

listener = new MyListener();

search.init(manager, listener);

search.poiSearchInCity("北京", "加油站");

}

 

private class MyListener extends BaseSearchListener {

@Override

public void onGetPoiResult(MKPoiResult result, int type, int iError) {

if (result != null && iError == 0) {

// int getNumPages()

// 获取本次poi搜索的总页数

// int getNumPois()

// 获取本次poi搜索的总结果数

// int getPageIndex()

// 返回当前页的索引

int pageIndex = result.getPageIndex();

int numPages = result.getNumPages();

int numPois = result.getNumPois();

String info=""+pageIndex+"页共"+numPages+"页总记录数:"+numPois;

Toast.makeText(getApplicationContext(), info, 1).show();

 

PoiOverlay overlay = new PoiOverlay(PoiSearchInCityDemo.this, mapView);

overlay.setData(result.getAllPoi());

 

mapView.getOverlays().clear();//清除上一页的显示内容

mapView.getOverlays().add(overlay);

mapView.refresh();

} else {

Toast.makeText(getApplicationContext(), "未查询到结果", 0).show();

}

}

}


private int currentPage=0;

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// 下一页显示

if(keyCode==KeyEvent.KEYCODE_1){

currentPage++;

search.goToPoiPage(currentPage);//获取下一页信息

}

return super.onKeyDown(keyCode, event);

}

}

 

 

 

 

 

 


本文出自 “苗振忠” 博客,请务必保留此出处http://miaozhenzhong.blog.51cto.com/11277456/1847076

如何在手机app软件制作中加入百度地图?

在手机上安装百度地图的方法,以IOS手机为例:1.在IOS上找到用于下载软件的“AppStore”。2.打开“AppStore”,找到搜索栏,在搜索栏输入“百度地图”,输入完成后,点击键盘的“搜索”按钮。3.找到对应app,点击下载。4.下载完... 查看详情

百度地图实现普通地图定位周边搜索功能

...一下是普通地图的实现-----------------------------------1:打开百度地图APi进去,如果没有注册过的需要注册,注册过的登录进入2:点击开发——Android地图SDk——点击获取密钥——点击创建应用——然后你就创建一个新的项目3:打开... 查看详情

百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司电话地址等数据导出excel里?

好多人在问:如何将百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司电话地址等数据导出excel里?现在,很多人都在网络上找商家,联系业务。百度地图里有很多的商家联系方式地址等数据,... 查看详情

在百度地图里面怎么获取线路的经纬度

打开百度地图:打开百度首页——点击地图。2.在百度地图的右上角,点击“地图API”,如图。3.在地图API页面,把鼠标移动到“工具”菜单项,在下拉菜单中选择“坐标拾取工具”,如图所示。4.下图就是地图拾取系统了,相信... 查看详情

如何使用百度地图查询出行路线

首先,打开百度首页,点击首页导航上边的地图,即可进入百度地图首页进入百度地图的首页后,可以看到搜索栏底下有三个功能:搜索、公交、驾车;左侧则是一些常见的餐饮等搜索目的地,查看周围环境和交通状况搜索“钟... 查看详情

地图上查看距离范围(百度地图)

...500米以内的加油站,那么就要设置一个距离范围了,那么百度地图如何设置这个距离呢?我们首先直接搜索百度地图或者打开百度首页,使用百度账号登录之后,即可在页面右上角看到“地图”选项了;进入到百度地图,然后我... 查看详情

百度地图地点搜索和鼠标点击地点获取经纬度

百度地图地点搜索和鼠标点击地点获取经纬度,这些都是地图比较基本效果图:如下 代码部分:<!DOCTYPEhtml><html>  <head>   <metacharset="utf-8">   <metaname="viewport"content="i 查看详情

vue+antd搭配百度地图实现搜索定位等功能(代码片段)

...vue项目的时候有做到选择地址功能,而原项目中又引入了百度地图,所以我就打算通过使用百度地图来实现地址搜索功能啦。本次教程可能过于啰嗦,所以这里先放上预览地址供大家预览——点我预览,也可到文末直接下载代码... 查看详情

百度地图怎么获取城市的编码citycode

参考技术A百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScriptAPI、Web服务API、AndroidSDK、iOSSDK、定位SDK、车联网API、LBS云等多种开发工具与服务,提供基本地图展现、搜索、定位、逆/地理编码、路... 查看详情

百度地图集成_poi搜索和正反地理编码

参考技术APOI搜索分好多种,主要以城市内搜索为例讲解:BMKMapView:地图类BMKPoiSearch:搜索服务类BMKCitySearchOption:搜索包装的参数类1.city,所在的城市2.keyword,搜索的关键字(如美食,酒店等)3.pageCapacity,搜索的分页数量(默... 查看详情

获取百度地图poi数据三(模拟关键词搜索)

...称等。有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜索地点,从而获取其返回的POI数据。下面直接上代码~   一、准备好用于存储数据的数据库表    查看详情

vue项目引用百度地图并实现搜索定位等功能(代码片段)

...以篇幅较长,认真阅览的你一定会学到很多知识。前言:百度地图开放平台给开发者们提供了丰富的地图功能与服务,使我们的项目中可以轻松地实现地图定位、地址搜索、路线导航等功能。本文给大家介绍如何在vue项目中引用... 查看详情

如何把百度地图上搜索结果导出来

很多销售推广人员问,怎么样能够快速的把BAIDU地图左边的搜索列表里的商家地图,电话,导出到EXCEL里。我就开发了一个小软件,专门为快速的实现导出数据到EXCEL。  为了使用方便,已经将全国的所又省份,每个省份里... 查看详情

百度地图api怎样实现拖动标注实时更新位置数据

在百度地图的右上角,点击“地图API”。在地图API页面,把鼠标移动到“工具”菜单项,在下拉菜单中选择“坐标拾取工具”。比如在搜索栏输入“百度大厦”点击搜索,就会在地图上出现相应的标记,点击你要找的某一个,就... 查看详情

在网页中插入百度地图(实例)

步骤123 如何在网页中插入百度地图呢?2.切换城市,搜索需标注位置。(如下图方法/步骤1.进入:http://api.map.baidu.com/lbsapi/creatmap/(创建地图-百度地图API所见即所得工具,百度官方地址,大家放心使用)切换城市,搜索需标注... 查看详情

用百度地图api,怎么获取当前我的位置

参考技术A在百度地图的右上角,点击“地图API”。在地图API页面,把鼠标移动到“工具”菜单项,在下拉菜单中选择“坐标拾取工具”。比如在搜索栏输入“百度大厦”点击搜索,就会在地图上出现相应的标记,点击你要找的... 查看详情

百度地图怎么设置起点和终点

准备工具:百度搜素网页,电脑1.打开百度网页,在百度页面中找到输入框,在输入框中输入百度地图字符,敲击回车进行搜索。2.在新弹出的搜索结果页面找到带有官网字样的网页,点击选择该网页进入到下一页面中。3.在新弹... 查看详情

调用百度地图api怎么根据多个经纬度显示点位

参考技术A在百度地图的右上角,点击“地图API”。在地图API页面,把鼠标移动到“工具”菜单项,在下拉菜单中选择“坐标拾取工具”。比如在搜索栏输入“百度大厦”点击搜索,就会在地图上出现相应的标记,点击你要找的... 查看详情