1搜索服务
百度地图SDK集成搜索服务包括:位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索,通过初始化MKSearch类,注册搜索结果的监听对象MKSearchListener,实现异步搜索服务。首先自定义MySearchListener实现MKSearchListener接口,通过不同的回调方法,获得搜索结果:
public class MySearchListener implements MKSearchListener {
@Override
public void onGetAddrResult(MKAddrInfo result, int iError) {
//返回地址信息搜索结果
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
//返回驾乘路线搜索结果
}
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
//返回poi搜索结果
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
//返回公交搜索结果
}
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
//返回步行路线搜索结果
}
@Override
public void onGetBusDetailResult(MKBusLineResult result, int iError) {
//返回公交车详情信息搜索结果
}
@Override
public void onGetSuggestionResult(MKSuggestionResult result, intiError) {
//返回联想词信息搜索结果
}
}
在MyMapActivity中添加成员变量:
MKSearch mMKSearch = null;
然后在onCreate()中初始化:
mMKSearch = new MKSearch();
mMKSearch.init(mBMapMan, new MySearchListener());//注意,MKSearchListener只支持一个,以最后一次设置为准
2兴趣点(poi)搜索
2.1 范围检索
指在给定的一个矩形区域内,根据开发者设定的指定关键字,搜索兴趣点信息,所使用的方法为:poiSearchInbounds(String key, GeoPoint ptLB, GeoPoint ptRT);核心代码如下:
如要检索北京西站与北京北站为顶点所确定的距形区域内的KFC餐厅,使用以下代码发起检索:
// 北京西站
GeoPoint ptLB = new GeoPoint( (int)(39.901375 * 1E6),(int)(116.329099 * 1E6));
// 北京北站
GeoPoint ptRT = new GeoPoint( (int)(39.949404 * 1E6),(int)(116.360719 * 1E6));
mMKSearch.poiSearchInbounds("KFC", ptLB, ptRT);
Tips:想知道某个兴趣点的百度地图坐标吗?
请移步百度地图坐标拾取系统http://api.map.baidu.com/lbsapi/getpoint/index.html
2.2 城市检索
城市检索,即在某一城市内搜索兴趣点信息。所使用的方法是:poiSearchInCity(String city, String key);核心代码如下:
如要检索北京的KFC餐厅,使用以下代码发起检索:
mMKSearch.poiSearchInCity("北京", "KFC");
2.3 周边检索
周边检索指的是以指定坐标点为圆心,根据给定关键字查询一定半径范围内的全部兴趣点。使用方法:poiSearchNearBy(String key, GeoPoint pt, int radius);核心代码如下:
检索周边5000米之内的KFC餐厅:
mMKSearch.poiSearchNearBy("KFC", new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)), 5000);
2.4 展示搜索结果
实现MySearchListener的onGetPoiResult,并展示检索结果:
@Override
public void onGetPoiResult(MKPoiResult res, int type, int error) {
// 错误号可参考MKEvent中的定义
if ( error == MKEvent.ERROR_RESULT_NOT_FOUND){
Toast.makeText(MyMapActivity.this, "抱歉,未找到结果",Toast.LENGTH_LONG).show();
return ;
}
else if (error != 0 || res == null) {
Toast.makeText(MyMapActivity.this, "搜索出错啦..", Toast.LENGTH_LONG).show();
return;
}
// 将poi结果显示到地图上
PoiOverlay poiOverlay = new PoiOverlay(MyMapActivity.this, mMapView);
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;
}
}
}
运行结果如下图所示:
3 地址信息查询
根据地理坐标查询地址信息:
mMKSearch.reverseGeocode(new GeoPoint(40057031, 116307852)); //逆地址解析
mMKSearch.geocode(key, city);//地址解析
reverseGeocode返回结果在MKSearchListener里的onGetAddrResult方法,核心代码如下所示:
public void onGetAddrResult(MKAddrInfo res, int error) {
if (error != 0) {
String str = String.format("错误号:%d", error);
Toast.makeText(MyMapActivity.this, str, Toast.LENGTH_LONG).show();
return;
}
mMapView.getController().animateTo(res.geoPt);
String strInfo = String.format("纬度:%f 经度:%f\r\n", res.geoPt.getLatitudeE6()/1e6,res.geoPt.getLongitudeE6()/1e6);
Toast.makeText(MyMapActivity.this, strInfo, Toast.LENGTH_LONG).show();
}
geocode返回结果在MKSearchListener里的onGetPoiResult方法,核心代码如下:
public void onGetPoiResult(MKPoiResult res, int type, int error) {
if (error != 0 || res == null) {
Toast.makeText(MyMapActivity.this, "解析失败", Toast.LENGTH_LONG).show();
return;
}
if (res != null&&res.getCurrentNumPois() > 0) {
GeoPointptGeo = res.getAllPoi().get(0).pt; // 移动地图到该点:
mMapView.getController().animateTo(ptGeo);
String strInfo = String.format("纬度:%f 经度:%f\r\n", ptGeo.getLatitudeE6()/1e6,ptGeo.getLongitudeE6()/1e6);
strInfo += "\r\n附近有:";
for (int i = 0; i <res.getAllPoi().size(); i++) {
strInfo += (res.getAllPoi().get(i).name + ";");
}
Toast.makeText(MyMapActivity.this, strInfo, Toast.LENGTH_LONG).show();
}
}
4 在线建议查询
根据关键词查询在线建议词,具体使用的方法为:suggestionSearch(String key),参数key为关键字;获取查询结果的方法需要实现MKSearchListener接口中的onGetSuggestionResult方法,核心代码如下所示:
ListView mSuggestionList = (ListView) findViewById(R.id.listView1);
@Override
public void onGetSuggestionResult(MKSuggestionResult res, int iError){
if (iError!= 0 || res == null) {
Toast.makeText(MyMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show();
return;
}
int nSize = res.getSuggestionNum();
String[] mStrSuggestions = new String[nSize];
for (int i = 0; i <nSize; i++){
mStrSuggestions[i] = res.getSuggestion(i).city + res.getSuggestion(i).key;
}
ArrayAdapter<String> suggestionString = new ArrayAdapter<String>(MyMapActivity.this, android.R.layout.simple_list_item_1,mStrSuggestions);
mSuggestionList.setAdapter(suggestionString);
}
更多详细信息请登录百度地图API官方网站:http://developer.baidu.com/map/
百度地图API论坛:http://bbs.lbsyun.baidu.com/
分享到:
相关推荐
android studio集成百度地图SDK显示地图
Android 百度地图最新SDK v3.2.0和Android定位SDK:v5.0应用,博客中有详细介绍
百度地图sdk包,版本5.2.1 5_2_1
ArcGIS 开发 SDK for Android
ArcGIS Runtime SDK for Android开发介绍,来自Esri 中国技术人员的培训材料。
百度地图sdk的包,可以直接引入使用,应用于安卓手机软件开发
该资源是导入了百度地图SDK的Android项目,可正常的使用,作后续的开发
android 百度地图学习SDK案例
百度地图SDK5.0源码,官网下载,需要的直接下载后按自己的需求添加到自己的项目,直接上源码。
ArcGIS Runtime SDK for Android v1.1发布啦,增强和改进如下: API: 1、从ArcGIS.com上搜索和使用content、users和groups; 2、支持要素定义存储在本地设备上的要素的高级符号化渲染; 3、支持单个应用程序中多个...
天地图 Android SDK v3.01,包含jar包和libs
ArcGIS Rutime SDK for Android 1.0.1正式版离线文档
根据百度地图SDK,实现定位当前设备,并显示在地图上。
百度地图Android定位SDK为基于移动客户端开发LBS应用提供基础定位能力,它较百度Android 地图SDK而言,专注满足用户获取当前位置与获得地址信息描述功能,软件包体积小。使用Android定位SDK,需先申请key,若你需要...
包含三个版本: arcgis-android-sdk-v10.2.9 arcgis-runtime-sdk-vandroid-100.0.0 arcgis-runtime-sdk-vandroid-100.1.0
arcgis runtime sdk for android示例程序,包括地图浏览,标注和查询等功能的实现。
ArcGIS Runtime SDK for Android开发基础,分为上下篇。
安卓 android 百度地图 SDK GPS 位置获取 位置地图显示
可以直接运行在真机中测试可运行百度地图SDK DEMO. 附带相关的ak key。
20190213最新安卓SDK下载Android SDK for Windows Version3.0.1