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主要说一些关于地图控制方面的内容和定位功能. 百度地图提供的关于地图的操作主要有: ...
随机推荐
- Page 16 Exercises 1.2.3 -------Introduction to Software Testing (Paul Ammann and Jeff Offutt)
Below are four faulty programs. Each includes a test case that results in failure. Answer the follow ...
- 关于C++虚函数的一些东西
先上概念,C++的多态性:系统在运行时根据对象类型,来确定调用哪个重载的成员函数的能力. 多态性是通过虚函数实现的.成员函数之前加了virtual,即成为虚函数. 有虚成员函数的类,编译器在其每个对象 ...
- ref 参数
当使用ref 作为参数赋值时,ref 得需要初始化,就是在从新定义一下 参数的值,下面有列子: 在控制台中运行如下: //定义一个方法,两个参数 i和a . public static void ge ...
- 【转】GUID学习
概念 GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算 ...
- IOS 异步加载图片
#import <Foundation/Foundation.h> #import "StringUtils.h" @interface ImageManager : ...
- CUDA ---- Hello World From GPU
本篇博文仅实现hello world,先看到效果,具体细节将在后续博文解释. 准备 如果你是第一次使用CUDA,在Linux下可以使用下面的命令来检查CUDA编译器是否安装正确: $ which nv ...
- koa redis 链接
koa 是新一代框架 npm install koa-redis 代码如下 var koa = require('koa'); var http = require('http'); var sess ...
- 如何用 redis 造一把分布式锁
基本概念 锁 wiki:In computer science, a lock or mutex (from mutual exclusion) is a synchronization mechan ...
- 【转】大数据以及Hadoop相关概念介绍
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4230220.html 感谢! 一.大数据的基本概念 1.1.什么是大数据 大数据指的就是要处理的数据是TB级别以 ...
- 自定义元素 – 在 HTML 中定义新元素
本文翻译自 Custom Elements: defining new elements in HTML,在保证技术要点表达准确的前提下,行文风格有少量改编和瞎搞. 原译文地址 本文目录 引言 用时髦 ...