android 百度地图开发实例(转载)

因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多。

为了加强记忆,写一点android 百度地图开发常用的方法。

1初始化

MapManager mBMapMan = new BMapManager(this);
boolean isSuccess = mBMapMan.init(this.mStrKey, new MyGeneralListener());

isSuccess 的值为true,则地图初始化成功

2定位|设置定位监听器

mBMapMan.getLocationManager().setNotifyInternal(10, 5);
   mBMapMan.start();
   
   mLocationListener = new LocationListener(){

public void onLocationChanged(Location location) 
{
// TODO Auto-generated method stub
// TODO Auto-generated method stub
if(location != null)
{
String strLog = String.format("您当前的位置:\r\n" +
"纬度:%f\r\n" +
"经度:%f",
location.getLatitude(), location.getLongitude());
Log.v("Application-strLog", strLog);
mBMapMan.getLocationManager().removeUpdates( mLocationListener);
}
}

};
       mBMapMan.getLocationManager().requestLocationUpdates(mLocationListener);

3使用实例

duduApp app = (duduApp)this.getApplication();
        // 如果使用地图SDK,请初始化地图Activity
        super.initMapActivity(app.mBMapMan);
        
        mMapView = (MapView)findViewById(R.id.map);
        mMapView.setBuiltInZoomControls(true);  //设置启用内置的缩放控件
        
        mMapController = mMapView.getController();  // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
        GeoPoint point = new GeoPoint(latitudeE6,longitudeE6);  //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
        mMapController.setCenter(point);  //设置地图中心点
        
        mMapController.setZoom(zoomLevel);    //设置地图zoom级别
        mMapView.setDrawOverlayWhenZooming(true);
        Drawable marker = getResources().getDrawable(R.drawable.iconmarka);  //得到需要标在地图上的资源
marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker
.getIntrinsicHeight());   //为maker定义位置和边界

OverItemT overitem = new OverItemT(marker,1);
mMapView.getOverlays().add(overitem); //添加ItemizedO

4覆盖物

class OverItemT extends ItemizedOverlay<OverlayItem> {

public List<OverlayItem> mGeoList = new ArrayList<OverlayItem>();
private Drawable marker;

public OverItemT(Drawable marker,int count) {
super(boundCenterBottom(marker));

this.marker = marker;

// 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)
GeoPoint p1 = new GeoPoint(latitudeE6, longitudeE6);
GeoPoint p2 = new GeoPoint((int)(DuDuBLL.getInstance(getApplicationContext()).model.bLatitude*1E6),
(int)(DuDuBLL.getInstance(getApplicationContext()).model.bLongitude*1E6));

// 构造OverlayItem的三个参数依次为:item的位置,标题文本,文字片段
mGeoList.add(new OverlayItem(p1, "P1", "店家位置"));
mGeoList.add(new OverlayItem(p2, "P2", "我的位置"));

populate();  //createItem(int)方法构造item。一旦有了数据,在调用其它方法前,首先调用这个方法
}

public void updateOverlay()
{
populate();
}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {

// Projection接口用于屏幕像素坐标和经纬度坐标之间的变换
Projection projection = mapView.getProjection(); 
Point p1=null;
Point p2=null;
for (int index = size() - 1; index >= 0; index--) 
{ // 遍历mGeoList
OverlayItem overLayItem = getItem(index); // 得到给定索引的item

String title = overLayItem.getTitle();

Log.v("map_title", title);
Paint paintText = new Paint();
paintText.setColor(Color.BLUE);
paintText.setTextSize(15);
if(title.equals("P1"))
{
// 把经纬度变换到相对于MapView左上角的屏幕像素坐标
p1= projection.toPixels(overLayItem.getPoint(), null);

// 可在此处添加您的绘制代码

canvas.drawText("店家", p1.x-30, p1.y-20, paintText); // 绘制文本
}
else
{
p2= projection.toPixels(overLayItem.getPoint(), null); 
canvas.drawText("我的位置", p2.x-30, p2.y-20,  paintText); // 绘制文本
}
}

super.draw(canvas, mapView, shadow);
//调整一个drawable边界,使得(0,0)是这个drawable底部最后一行中心的一个像素
boundCenterBottom(marker);
}

@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return mGeoList.get(i);
}

@Override
public int size() {
// TODO Auto-generated method stub
return mGeoList.size();
}
@Override
// 处理当点击事件
protected boolean onTap(int i) {
setFocus(mGeoList.get(i));

return true;
}

@Override
public boolean onTap(GeoPoint arg0, MapView arg1) {
// TODO Auto-generated method stub
// 消去弹出的气泡

return super.onTap(arg0, arg1);
}
}
   
}

5路线查询

MKSearch mSearch=new MKSearch();

mSearch.init(app.mBMapMan,new MKSearchListener(){

public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub

}

public void onGetBusDetailResult(MKBusLineResult arg0,
int arg1) {
// TODO Auto-generated method stub

}

public void onGetDrivingRouteResult(MKDrivingRouteResult res,int error) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
// 错误号可参考MKEvent中的定义
if (error != 0 || res == null) {
Toast.makeText(mapActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
return;
}
         //获得路线距离
int distance = res.getPlan(0).getRoute(0).getDistance();
RouteOverlay routeOverlay = new RouteOverlay(mapActivity.this, mMapView);
// 此处仅展示一个方案作为示例
routeOverlay.setData(res.getPlan(0).getRoute(0));
 //  mMapView.getOverlays().clear();
mMapView.getOverlays().add(routeOverlay);
mMapView.invalidate();
   
mMapView.getController().animateTo(res.getStart().pt);
}

public void onGetPoiResult(MKPoiResult arg0, int arg1,
int arg2) {
// TODO Auto-generated method stub

}

public void onGetRGCShareUrlResult(String arg0, int arg1) {
// TODO Auto-generated method stub

}

public void onGetSuggestionResult(MKSuggestionResult arg0,
int arg1) {
// TODO Auto-generated method stub

}

public void onGetTransitRouteResult(
MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub

}

public void onGetWalkingRouteResult(
MKWalkingRouteResult res, int error) {
if (error != 0 || res == null) {
Toast.makeText(mapActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
return;
}
         //获得路线距离
int distance = res.getPlan(0).getRoute(0).getDistance();
RouteOverlay routeOverlay = new RouteOverlay(mapActivity.this, mMapView);
// 此处仅展示一个方案作为示例
routeOverlay.setData(res.getPlan(0).getRoute(0));
   mMapView.getOverlays().clear();
mMapView.getOverlays().add(routeOverlay);
mMapView.invalidate();
   
mMapView.getController().animateTo(res.getStart().pt);

}

});

//步行路线

mSearch.walkingSearch(null, startNode , null, endNode);

具体请参考http://developer.baidu.com/map/sdkandev-question.htm

6google地图与百度地图坐标体系的装换

转换方法使用的是百度的api。
转换方法为:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=120.0904441&y=30.3056719
在type1和type2中填上相应的值就能转换。
gps坐标的type=0
google坐标的type=2
baidu坐标的type=4
得到的结果形式为:
{“error”:0,”x”:”MTE2LjM1MTA3ODgzMDM=”,”y”:”MzkuOTgwOTIwNDEwMTU2″}x和y都经过了base64转换。

百度地图开发起来非常方便,感兴趣的可以去看api

http://developer.baidu.com/map/sdk-android.htm

时间: 2024-12-26 17:30:05

android 百度地图开发实例(转载)的相关文章

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

标签: Android百度地图API Key  分类: Android 百度地图开发(2)  最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!   一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/a

Android 百度地图开发之一(Hello BaiDu Map)

之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图开发的准备和地图的成功显示即可. 首先建议大家先申请注册一个百度账号. 申请密钥(要想实现百度地图的相关服务必须申请密钥),网址:http://lbsyun.baidu.com/apiconsole/key 需要注意的是:应用名称不要重复或无效,安全码的输入详情请查看:http://develope

android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索

最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两者合起来先自动获取自己所在位置的经纬度然后与固定地点进行路径搜索时却弄不出来了,因为刚开始 写的两者在两个类中总是取不到经纬度值,后来将两者写到同一个类中去了,终于取到经纬度值了,也运行出来了.需要 在 BDLocationListener的onReceiveLocation里获取到经纬度值,因为已

[android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定位自己的位置和进行城市兴趣点POI(Point of Interest)搜索.那么怎样在百度地图上定位某一个位置呢?       通过类GeoPoint能够定义经纬度,它存放着纬度值和经度值,通过getLastKnownLocation()方法能够获取Location对象,再定位经纬度设置其为地图中心就可以显

[android] 百度地图开发 (二).定位城市位置和城市POI搜索

一. 百度地图城市定位和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了如何申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述如何定位城市位置.定位自己的位置和进行城市兴趣点POI(Point of Interest)搜索.那么如何在百度地图上定位某一个位置呢?       通过类GeoPoint可以定义经纬度,它存放着纬度值和经度值,通过getLastKnownLocation()方法可以获取Location对象,再定位经纬度设置其为地图中心即可显示当

[android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题

    最近做android百度地图,但是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--只显示网格而没有显示地图,网络连接和APIKey申请都是正确的,就是不知道为什么不能显示,网上也有很多人遇到这个问题,有的是SDK更新不兼容.而且网上很多百度地图都是使用V2.3.1版本,后来没有办法只有通过baidumapapi_v2_4_1.jar完成显示地图. 其中需要注意的是使用2.3.1时调用manager.init(

Android百度地图开发(一)之初体验

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一.申请AK(API Key) 要想使用百度地图sdk,就必须申请一个百度地图的api key.申请流程挺简单的. 首先注册成为百度的开发者,然后打开http://lbsyun.baidu.com/ap

Android 百度地图开发(一)

在自己的Android项目中增加百度地图的功能. 一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/apiconsole/key,自己自行注冊一个百度账号.非常快就能申请到的,例如以下图 点击"创建密钥".系统将为我们自己主动生成密钥,当然我们在使用密钥之前还必须配置.点击"设置"例如以下图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5u