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
android 百度地图开发实例(转载)的更多相关文章
- 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 本篇文章主要讲述百度地图 ...
- Android百度地图开发(一)之初体验
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需 ...
- Android百度地图开发(一)环境搭建
1.百度地图官方API文档下载 版本 使用说明 下载 Android SDK 通用资源下载 <离线地图>提供新版离线地图(百度矢量地图)与旧版离线地图(百度栅格地图)下载. 备注: 自An ...
- Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
转载请注明出处http://blog.csdn.net/xiaanming/article/details/11380619 这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOv ...
- Android百度地图开发03之地图控制 + 定位
前两篇关于百度地图的blog写的是,一些基本图层的展示 和 覆盖物的添加+地理编码和反地理编码. 接下来,这篇blog主要说一些关于地图控制方面的内容和定位功能. 百度地图提供的关于地图的操作主要有: ...
- Android百度地图开发02之添加覆盖物 + 地理编码和反地理编码
下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造Ov ...
随机推荐
- 使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
www.gbtags.com 使用javascript开发的视差滚动效果的云彩 阅读全文:使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
- ormlite操作表记录
实体类的创建对应表中people表, @DatabaseTable(tableName="people") public class People { @DatabaseField ...
- 使用Bundle进行VIM插件的管理
http://www.oschina.net/p/vundle git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle ...
- HTTP请求头 If-Modified-Since
来自:http://www.jm47.com/g/91174.htm 一直以来没有留意过HTTP请求头的IMS(If-Modified-Since)标签. 最近在分析Squid的access.log日 ...
- linux下安装oracle中遇到的一些问题
1.出现了:Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to da tabase unique ...
- webqq协议分析之~~~~登陆
最近好几个新项目积一起了,比较忙,所以博客迟迟未更新,还请各位见谅!下面来继续分析webqq协议,本章将说明如何实现登陆 1:输入QQ号和密码登陆,检测HTTP请求url如下,这是第一次登陆 http ...
- 摘:常用函数(包括:宽字符函数、普通C函数 )
只要看见“W”就是宽的意思,左边wchar_t,右边char 字符分类: 宽字符函数 普通C函数 描述 iswalnum() isa ...
- Linux系统里如何彻底的清空终端屏幕?
Linux用户,特别是Ubuntu或CentOS用户,基本上都习惯使用clear命令或Ctrl+L组合快捷键来清空终端屏幕.但是,这样做其实并不是真正的清空屏幕,它只是给人一种错觉,让人以为屏幕清空了 ...
- 关闭windows打印服务
1.关闭打印服务:开始-运行-services.msc或打开控制面板-管理工具-服务,打开服务列表,找到Print Spooler(打印服务),关闭(右击,点“关闭”).2.删除打印缓存:进入c:\\ ...
- char类型到底是有符号还是无符号
根据c标准,char类型到底是有符号整数类型还是无符号整数类型,这取决于c实现,也就是c编译器的作者的想法:( 那么,如何快速的编写一个检测程序,查看当前编译器如何对char进行定义? #includ ...