android百度地图poi路线规划,百度地图开发之poi检索,线路规划(示例代码)
官方文档 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检索,线路规划(示例代码)相关推荐
- android设置背景图片不填充整个_Android应用开发之android解决背景图片平铺拉伸问题...
本文将带你了解Android应用开发之android解决背景图片平铺拉伸问题,希望本文对大家学Android有所帮助 最近开发时遇到一个问题: 使用一条图片(1200x128)平铺作为背景,测试机型是 ...
- android代码apkxiazai1,Android基础新手教程——1.10 反编译APK获代替码amp;资源(示例代码)...
Android基础新手教程--1.10 反编译APK获代替码&资源 标签(空格分隔): Android基础新手教程 本节引言: "反编译Apk".看上去好像好像非常高端的样 ...
- android togglebutton 动画,Android开发之ToggleButton实现开关效果示例
本文实例讲述了Android使用ToggleButton实现开关效果的方法.分享给大家供大家参考,具体如下: activity_main.xml android:layout_width=" ...
- android设置输入数字英文,android 安卓editext默认弹出英文输入法,只能输入英文与数字(示例代码)...
/** * 只能输入字母和数字,默认弹出英文输入法 */ editext.setKeyListener(new DigitsKeyListener() { @Override public int g ...
- java poi word 复制_Java 使用POI填充Word表格内容和复制模板行属性方法示例代码
1、填充Word表格内容/** * 循环填充表格内容 * @param xwpfDocument * @param params * @param tableIndex * @throws Excep ...
- Android 高德地图自定义线路规划选择方案之后按照方案进行导航
Android 高德地图自定义线路规划选择方案之后按照方案进行导航 因为我这边导航需求的问题,导致我这边不能使用高德地图官方的线路规划和导航.所以我这边线路规划和导航界面都是根据高德地图那边给的api ...
- 高德地图之反地理编码、线路规划、天气查询
地理编码和反地理编码 /*** 地理编码和反地理编码*/private void geoSearch() {//地理编码GeocodeSearch geocoderSearch = new Geoco ...
- Android开发之高德API篇:2、高德API线路规划
TIME:2020年7月6日 2.高德API线路规划----步行线路规划 前言: step1 工程配置 step2 整体实现过程 step3 具体实现过程 总结 附上源码 前言: 该篇博客主要是介绍高 ...
- 微信小程序 - 接入腾讯地图 SDK 及详细使用教程,结合小程序 mpa 地图组件展示腾讯地图(基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆地址解析 / 坐标系的转化)
介绍 网上的教程都太乱了,代码根本没办法拿到自己的项目中去. 本文实现了 微信小程序中接入使用腾讯地图插件详细教程,并提供了 基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆 ...
- 2019-详细Android Studio开发百度地图(4)—百度地图_路线规划的实现
百度地图_路线规划的实现 前言 从小白一步步开始,很多资源是很久以前的,而且没有操作配套截图和资源分享.现在本踩过了很多坑,现在开发完成后决定重新写一份教程,希望能借此帮助到许多其他有这方面需求的人. ...
最新文章
- SonarQube代码质量管理平台安装与配置
- 未来的数据中心(三)
- 技术思维解决“现金贷”危机——如何让互联网金融更加“互联网”?
- /etc/group 很好很强大
- 宿迁学院的计算机系怎么样,宿迁学院是几本 学生评价怎么样好不好(10条)
- Ubuntu20.04 更新后黑屏无法加载驱动
- 如何在 Ubuntu 12.04 Server 中安装图形用户界面
- SQL基础知识:DDL、DML、DQL
- 【Clickhouse】Clickhouse Live View
- sql 2000 无法连接远程数据库 sqlserver不存在或访问被拒绝、不能打开到主机的连接,在端口1433:连接失败等 解决方案
- 如何理解静态库与动态库
- Win8系统108个运行命令
- iKuai软路由模拟环境搭建
- 如何在linux系统上添加网口打印机
- 1.初识elasticsearch
- charles抓包https证书下载
- 计算机组成原理 CPU 结构和功能
- self-attention
- for update
- SciDAVis:替代Origin的免费绘图软件之一