官方文档 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key

先去官方文档申请秘钥下载压缩文件等操作,参考

公交,步行,驾车路线查询,附近POI查询

参考文档导入所需jar包和so文件

标注点,覆盖物的实现见官方文档

poi检索:

1.首先获取地图,创建poi检索实例:

private voidinitView() {//输入框

etPoi =(EditText) inflate.findViewById(R.id.fragment_detailpage_search_et_poi);//检索图标

ivSearch =(ImageView) inflate.findViewById(R.id.fragment_detailpage_search_iv_search);//设置点击监听

ivSearch.setOnClickListener(this);//获取地图控件引用

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

mBaiduMap=mMapView.getMap();//普通地图

mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);//创建POI检索实例

mPoiSearch =PoiSearch.newInstance();

//详细信息布局

mMarkerInfoLayout=(RelativeLayout)inflate. findViewById(R.id.layout_map_rl_layout);

}

2.为poi检索设置监听,监听回调了两个方法,第一个是poi检索结果的监听,当用户进行poi检索后,会回调该方法,第二个方法,是对检索后显示的标注点(marker)进行点击后回调的方法,会传入该点的详情结果对象,我们可以通过该对象得到名字,地址,url地址等

//设置监听

mPoiSearch.setOnGetPoiSearchResultListener(newOnGetPoiSearchResultListener() {/*1.获得poi检索结果的监听*/@Overridepublic voidonGetPoiResult(PoiResult poiResult) {

//创建覆盖物对象

myPoiOverlay= newMyPoiOverlay(mBaiduMap);

myPoiOverlay.setData(poiResult);

myPoiOverlay.addToMap();

myPoiOverlay.zoomToSpan();//给poi的结果设置点击事件,点击marker后弹出详情页

mBaiduMap.setOnMarkerClickListener(myPoiOverlay);

Log.i("tag", "获得poi检索结果的监听 ");

}/*3. poi的详情页结果*/@Overridepublic voidonGetPoiDetailResult(PoiDetailResult poiDetailResult) {if (poiDetailResult.error !=SearchResult.ERRORNO.NO_ERROR) {

Toast.makeText(getActivity(),"抱歉,未找到结果",

Toast.LENGTH_SHORT).show();

etPoi.setText("");

}else {//正常返回结果的时候,此处可以获得很多相关信息//获取详情页的请求结果

String detailUrl =poiDetailResult.getDetailUrl();//得到当前经纬度

Log.i("tag", "获取详情页的请求结果: detailUrl -" + poiDetailResult.getName() + ": "

+poiDetailResult.getAddress());

Toast.makeText(getActivity(), detailUrl, Toast.LENGTH_SHORT).show();//弹出窗体//设置详细信息布局为可见

mMarkerInfoLayout.setVisibility(View.VISIBLE);//根据商家信息为详细信息布局设置信息

popupInfo(mMarkerInfoLayout, poiDetailResult);

}}

@Overridepublic voidonGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

}

});

上面创建的MyPoiOverlay是继承了PoiOverLay的,需要重写onPoiClick,当poi检索的结果被点击的时候回调该方法,然后通过获得该标注点的uid得到详情结果然后将详情结果,传入检索监听中的onGetPoiDetailResult(PoiDetailResult poiDetailResult),

注意:需要为marker设置点击监听,

mBaiduMap.setOnMarkerClickListener(myPoiOverlay);

class MyPoiOverlay extendsPoiOverlay {/*** 构造函数

*

*@parambaiduMap 该 PoiOverlay 引用的 BaiduMap 对象*/

publicMyPoiOverlay(BaiduMap baiduMap) {super(baiduMap);

}/*2.当poi的结果点被点击的时候调用*/@Overridepublic boolean onPoiClick(inti) {//获取i对应的点的uid

String uid =getPoiResult().getAllPoi().get(i).uid;

Log.i("tag", "当poi的结果点被点击的时候调用: "+uid);//uid是POI检索中获取的POI ID信息

mPoiSearch.searchPoiDetail((newPoiDetailSearchOption()).poiUid(uid));return super.onPoiClick(i);

}

}

popInfo:使用viewHolder复用布局

private void popupInfo(RelativeLayout mMarkerInfoLayout,finalPoiDetailResult poiDetailResult) {

ViewHolder viewHolder= null;if(mMarkerInfoLayout.getTag() == null){

viewHolder= newViewHolder();

viewHolder.poiName=(TextView) inflate.findViewById(R.id.layout_map_poiname);

viewHolder.poiAddress=(TextView)inflate.findViewById(R.id.layout_map_poiaddress);

viewHolder.poiSearch=(TextView) inflate.findViewById(R.id.layout_map_button);

mMarkerInfoLayout.setTag(viewHolder);

}else{

viewHolder=(ViewHolder) mMarkerInfoLayout.getTag();

viewHolder.poiName.setText(poiDetailResult.getName());

viewHolder.poiAddress.setText(poiDetailResult.getAddress());

viewHolder.poiSearch.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {//弹出新的页面展示poi详情

Intent intent = new Intent(getActivity(), PoiDetailActivity.class);

intent.putExtra("POI_DETAIL_URL",poiDetailResult.getDetailUrl());

startActivity(intent);

}

});

}

}classViewHolder{

TextView poiName;

TextView poiSearch;

TextView poiAddress;

}

为地图设置点击事件,点击隐藏布局

mBaiduMap.setOnMapClickListener(newBaiduMap.OnMapClickListener()

{

@Overridepublic booleanonMapPoiClick(MapPoi arg0)

{return false;

}

@Overridepublic voidonMapClick(LatLng arg0)

{

mMarkerInfoLayout.setVisibility(View.GONE);

mBaiduMap.hideInfoWindow();

}

});

开始搜索poi:按城市内搜索

public voidonStartSearch(View view){//String keyword = etKeyword.getText().toString().trim();

/*if (TextUtils.isEmpty(keyword)){

return;

}*/Log.i("tag", "onStartSearch: ");

mPoiSearch.searchInCity(new PoiCitySearchOption().city("杭州").keyword("美食").pageNum(10));/*** 附近检索*/

/*PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption();

nearbySearchOption.location(new LatLng(latitude, longitude));

nearbySearchOption.keyword(editSearchKeyEt.getText().toString());

nearbySearchOption.radius(1000);// 检索半径,单位是米

nearbySearchOption.pageNum(10);

mPoiSearch.searchNearby(nearbySearchOption);// 发起附近检索请求*/}

DetailPoiActivity

public class PoiDetailActivity extendsActivity {privateWebView wbPoiDetail;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_poidetail);

wbPoiDetail=(WebView) findViewById(R.id.wv_poidetail);

Intent intent=getIntent();

String url= intent.getStringExtra("POI_DETAIL_URL");

Log.i("MainActivity", "url-" +url);//webview加载数据

wbPoiDetail.loadUrl(url);

wbPoiDetail.setWebViewClient(new WebViewClient(){//解决办法

public booleanshouldOverrideUrlLoading(WebView view, String url) {//返回true的时候网页在webView中去打开,如果为false则是调用系统浏览器打开

view.loadUrl(url);return true;

}

});

}

}

效果如下:

线路规划基本步骤:

分析:

1.创建路规划检索实例

设置点击事件

2.准备检索起、终点信息

3.发起线路规划的检索

1.公交检索

2.驾车检索

3.步行

4.设置检索结果监听器

5.实现监听器

根据不同的结果展示不同的路线

1.公交检索

2.驾车检索

3.步行

public class RoutePlanActivity extendsActivity {privateMapView mMapView;privateRoutePlanSearch mSearch;privateEditText etStartName;privateEditText etEndName;privateBaiduMap mBaiduMap;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_routeplan);

etStartName=(EditText) findViewById(R.id.et_startname);

etEndName=(EditText) findViewById(R.id.et_endname);//获取地图控件引用

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

mBaiduMap=mMapView.getMap();//1.创建路规划检索实例;

mSearch =RoutePlanSearch.newInstance();//设置检索结果监听器

mSearch.setOnGetRoutePlanResultListener(newOnGetRoutePlanResultListener() {/*步行结果监听*/@Overridepublic voidonGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {if(walkingRouteResult == null || walkingRouteResult.error !=SearchResult.ERRORNO.NO_ERROR){

Toast.makeText(RoutePlanActivity.this, "请求结果有误", Toast.LENGTH_SHORT).show();

}if (walkingRouteResult.error ==SearchResult.ERRORNO.NO_ERROR) {//构造公交线路的图层对象

WalkingRouteOverlay walkingRouteOverlay = newWalkingRouteOverlay(mBaiduMap);//给覆盖物设置数据

walkingRouteOverlay.setData(walkingRouteResult.getRouteLines().get(0));//添加到map

walkingRouteOverlay.addToMap();//设置自适应缩放

walkingRouteOverlay.zoomToSpan();

}

}/*公交线路监听*/@Overridepublic voidonGetTransitRouteResult(TransitRouteResult transitRouteResult) {if(transitRouteResult == null || transitRouteResult.error !=SearchResult.ERRORNO.NO_ERROR){

Toast.makeText(RoutePlanActivity.this, "请求结果有误", Toast.LENGTH_SHORT).show();

}if (transitRouteResult.error ==SearchResult.ERRORNO.NO_ERROR) {//构造公交线路的图层对象

TransitRouteOverlay transitRouteOverlay = newTransitRouteOverlay(mBaiduMap);//给覆盖物设置数据

transitRouteOverlay.setData(transitRouteResult.getRouteLines().get(0));//添加到map

transitRouteOverlay.addToMap();//设置自适应缩放

transitRouteOverlay.zoomToSpan();

}

}/*驾车线路监听*/@Overridepublic voidonGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {if(drivingRouteResult == null || drivingRouteResult.error !=SearchResult.ERRORNO.NO_ERROR){

Toast.makeText(RoutePlanActivity.this, "请求结果有误", Toast.LENGTH_SHORT).show();

}if (drivingRouteResult.error ==SearchResult.ERRORNO.NO_ERROR) {//构造公交线路的图层对象

DrivingRouteOverlay drivingRouteOverlay = newDrivingRouteOverlay(mBaiduMap);//给覆盖物设置数据

drivingRouteOverlay.setData(drivingRouteResult.getRouteLines().get(0));//添加到map

drivingRouteOverlay.addToMap();//设置自适应缩放

drivingRouteOverlay.zoomToSpan();

}

}

@Overridepublic voidonGetBikingRouteResult(BikingRouteResult bikingRouteResult) {

}

});

}public voidonSearchRuote(View view) {//检查数据是否合法

String startName =etStartName.getText().toString().trim();

String endName=etEndName.getText().toString().trim();if (TextUtils.isEmpty(startName) ||TextUtils.isEmpty(endName)) {return;

}

PlanNode stNode= PlanNode.withCityNameAndPlaceName("北京", startName);

PlanNode enNode= PlanNode.withCityNameAndPlaceName("北京", endName);switch(view.getId()) {caseR.id.btn_transit:

mSearch.transitSearch(new TransitRoutePlanOption().from(stNode).to(enNode).city("北京"));break;caseR.id.btn_driving:

mSearch.drivingSearch(newDrivingRoutePlanOption().from(stNode).to(enNode));break;caseR.id.btn_walking:

mSearch.walkingSearch(newWalkingRoutePlanOption().from(stNode).to(enNode));break;default:break;

}

}

@Overrideprotected voidonDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

mMapView.onDestroy();

}

@Overrideprotected voidonResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

mMapView.onResume();

}

@Overrideprotected voidonPause() {super.onPause();//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

mMapView.onPause();

}

}

公交线路规划:

public class BusLineSearchActivity extendsActivity {privateMapView mMapView;privateBaiduMap mBaiduMap;privateEditText etKeyword;privatePoiSearch mPoiSearch;privateBusLineSearch mBusLineSearch;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_buslinesearch);//获取地图控件引用

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

mBaiduMap=mMapView.getMap();

etKeyword=(EditText) findViewById(R.id.et_keyword);//创建POI检索实例

mPoiSearch =PoiSearch.newInstance();//创建buslineserarch的实例

mBusLineSearch =BusLineSearch.newInstance();//设置监听

mBusLineSearch.setOnGetBusLineSearchResultListener(newOnGetBusLineSearchResultListener() {

@Overridepublic voidonGetBusLineResult(BusLineResult busLineResult) {//展示公交线路信息

BusLineOverlay busLineOverlay = newBusLineOverlay(mBaiduMap);

busLineOverlay.setData(busLineResult);

busLineOverlay.addToMap();

busLineOverlay.zoomToSpan();

}

});

mPoiSearch.setOnGetPoiSearchResultListener(newOnGetPoiSearchResultListener() {

@Overridepublic voidonGetPoiResult(PoiResult poiResult) {//获得公交信息的poi检索结果

if (poiResult == null || poiResult.error !=SearchResult.ERRORNO.NO_ERROR) {return;

}//只展示第一条公交信息

PoiInfo poiInfo = poiResult.getAllPoi().get(0);//重新请求//如下代码为发起检索代码,定义监听者和设置监听器的方法与POI中的类似

mBusLineSearch.searchBusLine((newBusLineSearchOption()

.city("北京")

.uid(poiInfo.uid)));

}

@Overridepublic voidonGetPoiDetailResult(PoiDetailResult poiDetailResult) {

}

@Overridepublic voidonGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

}

});

}public voidonStartSearch(View view){

String keyword=etKeyword.getText().toString().trim();if(TextUtils.isEmpty(keyword)){return;

}

mPoiSearch.searchInCity(new PoiCitySearchOption().city("北京").keyword(keyword));

}

@Overrideprotected voidonDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

mMapView.onDestroy();

}

@Overrideprotected voidonResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

mMapView.onResume();

}

@Overrideprotected voidonPause() {super.onPause();//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

mMapView.onPause();

}

}

android百度地图poi路线规划,百度地图开发之poi检索,线路规划(示例代码)相关推荐

  1. android设置背景图片不填充整个_Android应用开发之android解决背景图片平铺拉伸问题...

    本文将带你了解Android应用开发之android解决背景图片平铺拉伸问题,希望本文对大家学Android有所帮助 最近开发时遇到一个问题: 使用一条图片(1200x128)平铺作为背景,测试机型是 ...

  2. android代码apkxiazai1,Android基础新手教程——1.10 反编译APK获代替码amp;资源(示例代码)...

    Android基础新手教程--1.10 反编译APK获代替码&资源 标签(空格分隔): Android基础新手教程 本节引言: "反编译Apk".看上去好像好像非常高端的样 ...

  3. android togglebutton 动画,Android开发之ToggleButton实现开关效果示例

    本文实例讲述了Android使用ToggleButton实现开关效果的方法.分享给大家供大家参考,具体如下: activity_main.xml android:layout_width=" ...

  4. android设置输入数字英文,android 安卓editext默认弹出英文输入法,只能输入英文与数字(示例代码)...

    /** * 只能输入字母和数字,默认弹出英文输入法 */ editext.setKeyListener(new DigitsKeyListener() { @Override public int g ...

  5. java poi word 复制_Java 使用POI填充Word表格内容和复制模板行属性方法示例代码

    1、填充Word表格内容/** * 循环填充表格内容 * @param xwpfDocument * @param params * @param tableIndex * @throws Excep ...

  6. Android 高德地图自定义线路规划选择方案之后按照方案进行导航

    Android 高德地图自定义线路规划选择方案之后按照方案进行导航 因为我这边导航需求的问题,导致我这边不能使用高德地图官方的线路规划和导航.所以我这边线路规划和导航界面都是根据高德地图那边给的api ...

  7. 高德地图之反地理编码、线路规划、天气查询

    地理编码和反地理编码 /*** 地理编码和反地理编码*/private void geoSearch() {//地理编码GeocodeSearch geocoderSearch = new Geoco ...

  8. Android开发之高德API篇:2、高德API线路规划

    TIME:2020年7月6日 2.高德API线路规划----步行线路规划 前言: step1 工程配置 step2 整体实现过程 step3 具体实现过程 总结 附上源码 前言: 该篇博客主要是介绍高 ...

  9. 微信小程序 - 接入腾讯地图 SDK 及详细使用教程,结合小程序 mpa 地图组件展示腾讯地图(基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆地址解析 / 坐标系的转化)

    介绍 网上的教程都太乱了,代码根本没办法拿到自己的项目中去. 本文实现了 微信小程序中接入使用腾讯地图插件详细教程,并提供了 基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆 ...

  10. 2019-详细Android Studio开发百度地图(4)—百度地图_路线规划的实现

    百度地图_路线规划的实现 前言 从小白一步步开始,很多资源是很久以前的,而且没有操作配套截图和资源分享.现在本踩过了很多坑,现在开发完成后决定重新写一份教程,希望能借此帮助到许多其他有这方面需求的人. ...

最新文章

  1. SonarQube代码质量管理平台安装与配置
  2. 未来的数据中心(三)
  3. 技术思维解决“现金贷”危机——如何让互联网金融更加“互联网”?
  4. /etc/group 很好很强大
  5. 宿迁学院的计算机系怎么样,宿迁学院是几本 学生评价怎么样好不好(10条)
  6. Ubuntu20.04 更新后黑屏无法加载驱动
  7. 如何在 Ubuntu 12.04 Server 中安装图形用户界面
  8. SQL基础知识:DDL、DML、DQL
  9. 【Clickhouse】Clickhouse Live View
  10. sql 2000 无法连接远程数据库 sqlserver不存在或访问被拒绝、不能打开到主机的连接,在端口1433:连接失败等 解决方案
  11. 如何理解静态库与动态库
  12. Win8系统108个运行命令
  13. iKuai软路由模拟环境搭建
  14. 如何在linux系统上添加网口打印机
  15. 1.初识elasticsearch
  16. charles抓包https证书下载
  17. 计算机组成原理 CPU 结构和功能
  18. self-attention
  19. for update
  20. SciDAVis:替代Origin的免费绘图软件之一

热门文章

  1. oracle最小值寒素,新人教版备考2020年浙江中考语文复习专题:基础知识与古诗文专项特训(五十六)D卷...
  2. 静态页面练习(pc和移动端两套)
  3. 建立TCP连接的时候,syn包什么情况下会被对端rst?
  4. 福禄克FLUKE OFP2-100-Q CH与OFP2-Q-ADD技术规格
  5. 强化学习10——迭代学习
  6. 四大开源IaaS软件云中较力
  7. Pyspark 案例实践 假新闻分类
  8. android屏幕投屏QT,QtScrcpy - 安卓手机轻松投屏到电脑
  9. 阿里云域名如何拍卖?
  10. 信息安全:需求进一步升级 行业再上风口