关键词:
搜索的核心类:
MKSearch和MKSearchListener
MKSearch:用于位置检索、周边检索、范围检索、公交检索、驾乘检索、
MKSearchListener:查出的结果由MKSearchListener处理
***使用百度地图必须进行的准备工作:
1、初始化:
1)、到百度的服务器端检验KEY
创建initManager()方法进行检验的操作:
①、创建百度地图的管理器对象:
②、对管理器对象进行初始化,调用init方法
init(String strKey, MKGeneralListener listener)
参数:
strKey:申请的授权验证码
listener:注册回调事件——需要在监听中校验key(300)和网络状态(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:指的是poi的id,是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对象,传入的参数为当前的Activity和mapView
*将服务器回复的结果与覆盖物关联在一起;只有这样做了,才能将其展示在地图上
*将覆盖物添加到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:
当获取到结果时,且请求成功(iError为0),进行位置的显示:
@创建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();
②、创建覆盖物,进行显示位置:
当获取到结果时,且请求成功(iError为0),进行位置的显示:
@创建PoiOverlay覆盖物对象:指定参数——上下文,地图控件mapView
@设置参数:将服务器返回数据添加到poi覆盖物中
@添加覆盖物到MapView:注意,在添加覆盖物之前,需要先清除上一页显示的内容
mapView.getOverlays().clear();//清除上一页的显示内容
mapView.getOverlays().add(overlay);
@刷新MapView
4、测试:
通过重写按键按下的动作,进行测试:
通过搜索对象search,获取下一页的信息:search.goToPoiPage(currentPage);//获取下一页信息
Tips:
1、在初始化布局之前,一定要初始化引擎,校验key
2、POI检索结果每页容量默认情况下为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页面,把鼠标移动到“工具”菜单项,在下拉菜单中选择“坐标拾取工具”。比如在搜索栏输入“百度大厦”点击搜索,就会在地图上出现相应的标记,点击你要找的... 查看详情