android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车、公交、步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两者合起来先自动获取自己所在位置的经纬度然后与固定地点进行路径搜索时却弄不出来了,因为刚开始 写的两者在两个类中总是取不到经纬度值,后来将两者写到同一个类中去了,终于取到经纬度值了,也运行出来了。需要 在 BDLocationListener的onReceiveLocation里获取到经纬度值,因为已经能直接拿经纬度值了,所以就可以在里面进行路 径搜索了。萝莉啰嗦说了一些估计只有我自己能看懂。。。。
总结一下自己实现的过程(只说主要的):
1.初始化变量
2.在setContentView的前面初始化BMapManager.
3.得到MapController,确定一个点将mapview的中心设在那,(此步不可少),若缺少mapview会显示到默认的地址(貌似是北京那块地)影响后面起始位置路径的搜索。
4.生成LoctionClient,使用LocationClientOption对其进行简单的设置。调用locationClient.start();
locationClient.requestLocation();进行定位获取位置,使用回调给LocatiopnClient注册监听器,在回调方 法onReceiveLocation获得经纬度,使用MKPlanNode设置起始位置点(已经获取到的经纬度)与终点,就可以初始化 MKSearch,复写其参数监听器中的回调方法onGetWalkingRouteResult、onGetTransitRouteResult、 onGetDrivingRouteResult,最后mkSearch.walkingSearch(null, satrt, null, end);
//mkSearch.drivingSearch(null, satrt, null, end);
//mkSearch.transitSearch("上海", satrt, end);(运行不出,待学习)
就可以进行路线搜索了。
代码如下
package com.example.lockposi;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TextView textView;
LocationClient locationClient;
double latitude,longitude;
private MapView mapview;
BMapManager bMapManager;
static final String API_KEY="07418AEC69BAAB7104C6230A6120C580DFFAEEBB";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bMapManager=new BMapManager(getApplicationContext());
bMapManager.init(API_KEY,new MKGeneralListener() {
@Override
public void onGetPermissionState(int arg0) {
// TODO Auto-generated method stub
if(arg0==MKEvent.ERROR_PERMISSION_DENIED){
Toast.makeText(getApplicationContext(), "请输入正确的key",1000).show();
}
}
@Override
public void onGetNetworkState(int arg0) {
// TODO Auto-generated method stub
if (arg0==MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(getApplicationContext(), "您的网络出错了",1000).show();
}
}
});
setContentView(R.layout.activity_main);
mapview = (MapView) this.findViewById(R.id.bmapView);
mapview.setBuiltInZoomControls(true);
MapController mMapController = mapview.getController();
GeoPoint geoPoint = new GeoPoint((int) (31.243319 * 1E6),
(int) (121.509075 * 1E6));
mMapController.setCenter(geoPoint);
mMapController.setZoom(12);
textView=(TextView) findViewById(R.id.textView1);
locationClient=new LocationClient(getApplicationContext());
LocationClientOption locationClientOption=new LocationClientOption();
locationClientOption.setOpenGps(true);
locationClientOption.setCoorType("bd09ll");
locationClientOption.setPriority(LocationClientOption.NetWorkFirst);
locationClientOption.setScanSpan(5000);
locationClient.setLocOption(locationClientOption);
locationClient.start();
locationClient.requestLocation();
Toast.makeText(getApplicationContext(), String.valueOf(latitude),1000).show();
locationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceivePoi(BDLocation arg0) {
// TODO Auto-generated method stub
if (arg0==null) {
return;
}
latitude=arg0.getLatitude();
longitude=arg0.getLongitude();
StringBuilder sBuilder=new StringBuilder();
sBuilder.append("latitude:"+String.valueOf(arg0.getLatitude())).append("longitude:"+String.valueOf(arg0.getLongitude()));
textView.setText(sBuilder.toString());
}
@Override
public void onReceiveLocation(BDLocation arg0) {
// TODO Auto-generated method stub
if (arg0==null) {
return;
}
latitude=arg0.getLatitude();
longitude=arg0.getLongitude();
StringBuilder sBuilder=new StringBuilder();
sBuilder.append("latitude:"+arg0.getLatitude()).append("longitude:"+arg0.getLongitude());
textView.setText(sBuilder.toString());
MKPlanNode satrt=new MKPlanNode();
satrt.pt=new GeoPoint((int) (31.205889 * 1E6),
(int) (121.637942 * 1E6));
MKPlanNode end=new MKPlanNode();
end.pt=new GeoPoint((int) (31.243319 * 1E6), (int) (121.509075 * 1E6));
final MKSearch mkSearch=new MKSearch();
mkSearch.init(bMapManager, new MKSearchListener() {
private int intidx;
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0==null) {
return;
}
RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
routeOverlay.setData(arg0.getPlan(0).getRoute(0));
mapview.getOverlays().add(routeOverlay);
mapview.refresh();
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0==null) {
return;
}
RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
routeOverlay.setData(arg0.getPlan(0).getRoute(0));
mapview.getOverlays().add(routeOverlay);
mapview.refresh();
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg2 != 0 || arg0 == null) {
Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show();
return;
}
// 找到公交路线poi node
MKPoiInfo curPoi = null;
int totalPoiNum = arg0.getNumPois();
for(intidx = 0; intidx<totalPoiNum; intidx++ ) {
curPoi = arg0.getPoi(intidx);
if ( 2 == curPoi.ePoiType ) {
break;
}
}
mkSearch.busLineSearch("上海", curPoi.uid);
}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0==null) {
return;
}
RouteOverlay routeOverlay=new RouteOverlay(MainActivity.this, mapview);
routeOverlay.setData(arg0.getPlan(0).getRoute(0));
mapview.getOverlays().add(routeOverlay);
mapview.refresh();
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg1 != 0 || arg0 == null) {
Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show();
return;
}
RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this, mapview); // 此处仅展示一个方案作为示例
routeOverlay.setData(arg0.getBusRoute());
mapview.getOverlays().clear();
mapview.getOverlays().add(routeOverlay);
mapview.refresh();
mapview.getController().animateTo(arg0.getBusRoute().getStart());
}
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub
}
});
mkSearch.walkingSearch(null, satrt, null, end);
//mkSearch.drivingSearch(null, satrt, null, end);
//mkSearch.transitSearch("上海", satrt, end);
}
});
}
}
android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索的更多相关文章
- android 百度地图开发实例(转载)
因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索
一个. 百度地图城市位置和POI搜索知识 上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...
- [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
近期做android百度地图,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--仅仅显示网格而没有显示地图,网 ...
- Android 百度地图开发之一(Hello BaiDu Map)
之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图 ...
- 调用百度地图开发平台的JavascriptAPI实现将市县位置转换成坐标
最近的项目要做的地图比较多,有的还比较复杂,而地图用到的坐标,上网找json文件更是良莠不齐的.真是让人伤脑筋,后来突然想到了百度地图开发平台,没想到真的有对应的API哦,谢天谢地!!!下面说一下完整 ...
- Android百度地图开发(一)之初体验
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需 ...
- Android百度地图开发01之初体验
做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一.申请AK(API Key) ...
- Android百度地图开发03之地图控制 + 定位
前两篇关于百度地图的blog写的是,一些基本图层的展示 和 覆盖物的添加+地理编码和反地理编码. 接下来,这篇blog主要说一些关于地图控制方面的内容和定位功能. 百度地图提供的关于地图的操作主要有: ...
随机推荐
- 链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。[手稿]
消息 7302,级别 16,状态 1,第 1 行 无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.JET.OLEDB.4.0&qu ...
- 转——使用Axure制作App原型应该怎样设置尺寸?
想用Axure设计一个 APP原型 放到真实的移动设备中演示,但不知道应该使用什么尺寸?若要解释清楚像素和分辨率需要的篇幅比较长,请大家参考百度百科.这里金乌直接给大家提供一个常用的移动设备尺寸列表, ...
- flappy pig小游戏源码分析(1)——主程序初探
闲逛github发现一个javascript原生实现的小游戏,源码写的很清晰,适合想提高水平的同学观摩学习.读通源码后,我决定写一系列的博客来分析源码,从整体架构到具体实现细节来帮助一些想提高水平的朋 ...
- JQuery发送Put、Delete请求 - 摘自网络
DELETE: $.ajax({ url: '/script.cgi', type: 'DELETE', success: function(result) { // Do something wit ...
- 第二百零七天 how can I坚持
都这么一大把年纪了,还没正事,哎.. mysql ifnull(expr,expr),oracle nvl();去null函数. 每天也没什么事. 哎,每天 也总有那么点事. 刘松.李承杰,都是些什么 ...
- JavaIO(06)文件复制
文件复制一般是采用两种方式进行操作: 1:将源文件中的内容全部读取到内存中,并一次性的写入到目标文件中:(不常用这种方式) 2:不将源文件中的内容全部读取进来,而是采用边读边写的方式: 实例01: ...
- TcxGrid导出EXCEL
function ExportExcel(grid: TcxGrid; const fileName: string = '1.xls'): Boolean;var sd: TSaveDialog; ...
- 购买咏南中间件送客户端C/S和B/S开发框架
购买咏南DATASNAP中间件送CS插件开发框架和BS开发框架,CS.BS开发框架共享同一个中间件.价格从优! 中间件可供DELPHI6~DELPHI XE8开发的客户端调用! CS开发框架截图: B ...
- 【Android框架进阶〖0〗】ThinkAndroid注解机制
由于项目需要,开始研究ThinkAndroid. 个人认为该框架的注解机制十分新颖,所以先研究这个,顺便学习下 Java 的annotation. 粗略的看了看,该机制在BaseActivity中初始 ...
- HIT 2275 Number sequence
点击打开HIT 2275 思路: 树状数组 分析: 1 题目要求的是总共的搭配方式,满足Ai < Aj > Ak.并且i j k不同 2 我们开两个树状数组,第一个在输入的时候就去更新.然 ...