在Eclipse上开发百度地图的教程比较多,最近用的比较多的是Android Studio平台开发,本文主要是学习如何在Android Studio上进行百度地图的开发。

1.准备工作

这第一步网上说的很多了,就是关于百度地图的SDK下载以及Key的申请。具体教程可参考这篇博文:http://blog.csdn.net/chentravelling/article/details/50995524

2.功能实现

首先讲讲百度地图路线规划如何实现的。路线规划主要用到WalkingRouteOverlay,TransitRouteOverlay 以及DrivingRouteOverlay这三个功能类,通过类获得起点与终点的路线信息进行规划并在地图上显示。用以下代码获得起点与终点信息,即移动端输入text文本信息:

startBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

String start = startEt.getText().toString();

String end = endEt.getText().toString();

String city = cityEt.getText().toString();

if (city == null || city.equals("")) {

city = GuideActivity.this.city;

}

routePlan(start, end, city);

}

});

然后发起路线规划:

/**

* 发起路线规划

*/

public void routePlan(String start, String end, String city) {

mSearch = RoutePlanSearch.newInstance();

mSearch.setOnGetRoutePlanResultListener(listener);

// 起点与终点

PlanNode stNode = PlanNode.withCityNameAndPlaceName(city, start);

PlanNode enNode = PlanNode.withCityNameAndPlaceName(city, end);

// 步行路线规划

boolean res = mSearch.walkingSearch(new WalkingRoutePlanOption().from(

stNode).to(enNode));

//boolean res = mSearch.transitSearch(new TransitRoutePlanOption().from(

// stNode).city("杭州").to(enNode)); // 驾车路线规划 // mSearch.drivingSearch(new // DrivingRoutePlanOption().from(stNode).to(enNode)); }

最后获取结果:

/**

* 步行

*/

public void onGetWalkingRouteResult(WalkingRouteResult result) {

// 获取步行线路规划结果

if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {

Toast.makeText(GuideActivity.this, "抱歉,未找到结果",

Toast.LENGTH_SHORT).show();

}

if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {

// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息

// result.getSuggestAddrInfo()

return;

}

if (result.error == SearchResult.ERRORNO.NO_ERROR) {

WalkingRouteOverlay overlay = new MyWalkingRouteOverlay(

mBaiduMap);

mBaiduMap.setOnMarkerClickListener(overlay);

overlay.setData(result.getRouteLines().get(0));

overlay.addToMap();

overlay.zoomToSpan();

//Toast.makeText(GuideActivity.this,"点击图标会有指示哦~",

// Toast.LENGTH_SHORT).show();

}

}

public void onGetTransitRouteResult(TransitRouteResult result) {

// 获取公交换乘路径规划结果

if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {

Toast.makeText(GuideActivity.this, "抱歉,未找到结果",

Toast.LENGTH_SHORT).show();

}

if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {

//起终点或途经点地址有岐义,通过以下接口获取建议查询信息

//result.getSuggestAddrInfo()

return;

}

if (result.error == SearchResult.ERRORNO.NO_ERROR) {

TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaiduMap);

mBaiduMap.setOnMarkerClickListener(overlay);

overlay.setData(result.getRouteLines().get(0));

overlay.addToMap();

overlay.zoomToSpan();

//Toast.makeText(GuideActivity.this,"点击图标会有指示哦~",

// Toast.LENGTH_SHORT).show();

}

}

实现效果图:

接着讲讲POI搜索功能的实现。百度地图的POI点可以分有两种:地图中已经标记的点和通过关键词搜索得到的POI点。本文主要讲讲关键词搜索的实现,百度提供了一个POI

点击事件的接口 BaiduMap.OnMapClickListener,有关模块如下:

//增加监听:长按地图

baiduMap.setOnMapLongClickListener(new OnMapLongClickListener());

//增加监听:map click listener ,主要监听poi点击

baiduMap.setOnMapClickListener(new OnMapClickListener());

//地理编码模块

mSearch = GeoCoder.newInstance();

//增加监听:地理编码查询结果

mSearch.setOnGetGeoCodeResultListener(this);

//POI搜索模块

poiSearch = PoiSearch.newInstance();

//增加监听:POI搜索结果

poiSearch.setOnGetPoiSearchResultListener(new PoiSearchListener());

//模糊搜索

suggestionSearch = SuggestionSearch.newInstance();

//增加监听:模糊搜索查询结果

suggestionSearch.setOnGetSuggestionResultListener(new SuggestionResultListener());

接口 BaiduMap.OnMapClickListener的实现:

private class OnMarkerClickListener implements BaiduMap.OnMarkerClickListener {

@Override

public boolean onMarkerClick(Marker marker) {

BDLocation bdLocation = new BDLocation();

bdLocation.setAddrStr(marker.getTitle());

bdLocation.setLatitude(marker.getPosition().latitude);

bdLocation.setLongitude(marker.getPosition().longitude);

//弹出信息

//poputInfo(bdLocation, marker.getTitle());

return false;

}

}

获得搜索结果:

@Override

public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {

if (poiDetailResult == null

|| poiDetailResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {

Toast.makeText(PoiActivity.this, "未找到结果", Toast.LENGTH_LONG)

.show();

return;

}

if (poiDetailResult.error == SearchResult.ERRORNO.NO_ERROR) {

//搜索到POI

baiduMap.clear();

baiduMap.addOverlay(

new MarkerOptions()

.position(poiDetailResult.location) //坐标位置

.icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding))

.title(poiDetailResult.getAddress()) //标题

);

//将该POI点设置为地图中心

baiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(poiDetailResult.location));

Toast.makeText(PoiActivity.this, "搜索中...", Toast.LENGTH_LONG).show();

return;

}

if (poiDetailResult.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {

}

}

@Override

public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

}

}

获得联想搜索结果:

private class SuggestionResultListener implements OnGetSuggestionResultListener {

@Override

public void onGetSuggestionResult(final SuggestionResult suggestionResult) {

if (suggestionResult == null || suggestionResult.getAllSuggestions() == null) {

return;

}

Listsuggest = new ArrayList<>();

for (SuggestionResult.SuggestionInfo suggestionInfo : suggestionResult.getAllSuggestions()) {

if (suggestionInfo.key != null) {

suggest.add(suggestionInfo.key);

}

}

adapter = new ArrayAdapter(PoiActivity.this, android.R.layout.simple_dropdown_item_1line, suggest);

autoCompleteTextView.setAdapter(adapter);

autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

SuggestionResult.SuggestionInfo info = suggestionResult.getAllSuggestions().get(position);

poiSearch.searchPoiDetail(new PoiDetailSearchOption().poiUid(info.uid));

}

});

adapter.notifyDataSetChanged();

}

}

实现的效果如下:

点击其中一个词条即可跳出地图位置:

3.问题的解决

开发过程中遇到的问题比较多,这里讲讲两个主要问题。

第一个问题:验证出错,错误码:230,请AndroidManifest.xml文件中检查 kye 设置。解决方法:在检查sha1值和包名,都无误,依然不能解决问题时,请:查看app

module目录下的有没有debug.keystore,如果有,用自己电脑里的debug.keystore来将其替换掉,然后rebuild,运行即可。

第二个问题:百度地图SDK v3.6.0以上版本找不到PoiOverlay类。解决方法:将官方样例代码BaiduMap_AndroidMapSDK_v4.4.0_Sample\BaiduMapsApiDemo\src下的com.baidu.mapapi

(类PoiOverlay在com.baidu.mapapi.overlayutil包中)直接复制粘贴到自己项目相应的位置中,有时需要删除clusterutil这个包。

百度步行导航加poi搜索android,Android Studio百度地图路线规划以及POI搜索功能的实现...相关推荐

  1. android app调用第三方地图路线规划导航(百度,高德,腾讯)

    android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...

  2. 百度步行导航加poi搜索android,【百度地图】带地图显示控件、导航控件、POI查找控件...

    标题: [完全开源]百度地图Web service API C#.NET版,带地图显示控件.导航控件.POI查找控件 概述: 源代码主要包含三个项目,BMap.NET.BMap.NET.Windows ...

  3. Android API 29 百度步行导航语音tts集成

    Android API 29 百度步行导航语音tts集成 这个参考官方demo修改. 关键来了,步行导航跟驾车导航不一样的是,驾车导航有专门的语音包支持,而步行和骑行导航只支持路线文字播报, 不支持语 ...

  4. android 通过scheme唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能

    import android.content.Context; import android.content.Intent; import android.net.Uri;import java.ut ...

  5. 高德地图小程序步行路线显示_微信小程序 高德地图路线规划实现过程详解

    前言 最近项目中做到相关网约车小程序.需要使用到地图中的路线规划,对3种地图进行了分析.这里稍微做一下总结: 百度地图 百度坐标 (BD-09) 腾讯地图 火星坐标(GCJ-02) 高德地图 火星坐标 ...

  6. android百度地图路线查询,Android百度地图——路线规划搜索

    百度地图提供的路线规划搜索有3种:驾车.公交.步行. 3中方式的使用方法类似,步骤如下: 1.初始化地图 /**初始化百度地图 * */ private void initBaiduMap(){ // ...

  7. Android高德地图路线规划,自定义图层(overlay),所有点和线刚好显示在屏幕中心

    高德百度地图SDK路线规划包含:步行,公交,驾车,骑车. 搜索的结果是经纬度点信息Latlng(lat,lng) 功能 在地图map中将所有的点连线,并让该线能刚好被当前的地图层级包含,并且当前路线所 ...

  8. 关于Android高德地图路线规划的学习

    其实一开始我是懵逼的 后来看了demo的源码才磕磕绊绊的做了出来. 线路规划属于Android地图SDK. 首先是流程,要有一个MainActivity主类,布局里面有MapView.点击规划路线的按 ...

  9. java 高德地图路线规划_公交出行路线规划-出行路线规划-开发指南-Android 地图SDK | 高德地图API...

    公交路径规划可以根据起终点和公交换乘的数据,使用 BusRouteOverlay 画出公交路线图层,包括起终点和换乘点.另外也可以自定义起终点和换乘点的图标. 目前支持跨城公交路线规划,提供不同城市之 ...

最新文章

  1. Centos配置nginx反向代理8080端口到80端口
  2. zTree的调用设使用(跨两个系统,两类技术实现的项目案例SpringMVC+Spring+MyBatis和Struts2+Spring+ibatis框架组合)
  3. 大数据在2017年发展的8个预测
  4. java 域_java四大域总结
  5. 王者荣耀、QQ音乐发声明:异常登录问题已解决
  6. vba判断是否为数字的方法小集
  7. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用36
  8. 程序员进化史|P4到P9,从应届生到双11前端PM
  9. NC5.X系列单点登录
  10. 在Eclipse中使用JUnit5进行单元测试
  11. HMC5883L指南针罗盘模块连接arduino使用的注意事项
  12. Reset、clock、locked和dcm_locked之间的坑
  13. 联系人管理系统 python版
  14. 40.WLAN基础网络规划介绍_WLAN无线网络干扰分析及华为负载均衡技术
  15. 算法—— LeetCode 第一遍
  16. VS2008 LINK : fatal error LNK1104: cannot open file 'atls.lib'错误解决方案
  17. oracle让电脑变卡以及解决方法
  18. a1 抛光等级spi_模具抛光分几个等级呢?
  19. 点云 3D 目标跟踪 - AB3DMOT(IROS 2020, ECCVW 2020)
  20. required属性

热门文章

  1. ubuntu20.04 更新后蓝牙机械键盘不可用
  2. 会计凭证替代BTE增强
  3. 移动端Vin码识别技术发展应用
  4. subscript on non-array or too many dimensions
  5. 北斗终端与计算机传输信息,北斗短报文船载终端,北斗卫星海上通信终端问世,海上作业再也不怕失联...
  6. 试题 算法训练 预测身高
  7. 腾讯WeTest&TesterHome手游测试沙龙
  8. 【安卓USB开发】让手机与物联网设备鹊桥相会
  9. spark ui job和stage的dag图查看过去运行的任务,查不到,分析源码解决问题
  10. 你距离女朋友其实只差一个幽默的句子,python教你如何快速将有趣的句子收归数据库