《http://blog.csdn.net/shuaiyinoo》谢谢
今天是百度地图的最后一个博客的更新了,看了上面几篇博客不知道大家有没有感受或者有没有什么体会,基本上百度地图提供的查询的方法基本上都是异步调用的,通过异步调用显示在 MySearchListener implements MKSearchListener 实现了这个接口的各个方法当中
当然这次的经纬度查询和转换同样是在这里面有所体会,在进行经纬度转换的时候,只需要调用百度地图的下面两个方法,就可以成功的知道如何进行经纬度的转换了
总得来说百度地图做起来比Google地图的API做起来简单,原因可能就是应为百度地图的API是中文的,中国人开发的更加适合中国人的使用习惯等等,加油,成功是所于大家的,下面我就把这一几篇博客的核心代码贴出来,供大家参考参考
然后附上这几个博客的总体的项目,请大家笑纳......有很多不足的地方还请大家多多包含......
--->>>飞机直达源代码下载地
package com.shuaiyin.baidu;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.ItemizedOverlay;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKBusLineResult;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKPlanNode;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKSuggestionResult;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.Overlay;
import com.baidu.mapapi.OverlayItem;
import com.baidu.mapapi.RouteOverlay;
import com.baidu.mapapi.TransitOverlay;
/**
* 让百度地图继承MapActivity
* @author shuaiyin
*
*/
public class BaiDu_SuYiActivity extends MapActivity {
//添加百度地图的相关控件
private MapView mapView;
//加载百度地图的引起
private BMapManager bMapManager;
//定义百度地图的KEY
private String key = "3DA88729DD94B0429A4BEE30797E04D91B0211C4";
//在百度地图上添加相应的控件
private MapController mapController;
//定义搜索对象
private MKSearch mkSearch ;
//定义一个起点
private MKPlanNode start;
//定义一个终点
private MKPlanNode end;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//首先实例化mapView
mapView = (MapView) this.findViewById(R.id.bmapView);
bMapManager = new BMapManager(BaiDu_SuYiActivity.this);
//调用百度地图加载KEY
bMapManager.init(key, new MKGeneralListener() {
@Override
public void onGetPermissionState(int arg0) {
if(arg0 == 300){
Toast.makeText(BaiDu_SuYiActivity.this, "您输入的KEY有问题,请核实", 2).show();
}
}
@Override
public void onGetNetworkState(int arg0) {
}
});
this.initMapActivity(bMapManager);
//表示可以设置缩放功能
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
//V1.00
//在百度地图上标注一个中心点
//GeoPoint geoPoint = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
//给地图对象设置一个中心点
//mapController.setCenter(geoPoint);
//设置地图的缩放级别
//mapController.setZoom(12);
//显示交通地图
//mapView.setTraffic(true);
//显示卫星地图
//mapView.setSatellite(true);
//v2.00
//给地图对象设置标注物
//mapView.getOverlays().add(new MyOverlay());
//mapController.setZoom(12);
//v3.00
//给地图设置多个标注物
//显示标注的图标
//Drawable drawable = getResources().getDrawable(R.drawable.iconmarka);
//mapView.getOverlays().add(new MyOverLayItem(drawable));
//v4.00
//mapController.setZoom(14);
//在地图范围内实现对物体的搜索
//mkSearch = new MKSearch();
//mkSearch.init(bMapManager, new MySearchListener());
//这个方法表示根据中心点搜索周边的内容
//mkSearch.poiSearchNearBy("厕所", new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)), 5000);
//v5.00驾车路线的搜索
//mapController.setZoom(14);
//在地图范围内实现对物体的搜索
//mkSearch = new MKSearch();
//mkSearch.init(bMapManager, new MySearchListener());
//给定第一个坐标
//start = new MKPlanNode();
//start.pt = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
//给定第二个坐标
//end = new MKPlanNode();
//end.pt = new GeoPoint(40057031,116307852);
//路线的优先顺序
//mkSearch.setDrivingPolicy(MKSearch.EBUS_TIME_FIRST);
//调用路线的回调方法
//mkSearch.drivingSearch(null, start, null, end);
//6.0行走路线的搜索
//mapController.setZoom(12);
//在地图范围内实现对物体的搜索
//mkSearch = new MKSearch();
//mkSearch.init(bMapManager, new MySearchListener());
//给定第一个坐标
//start = new MKPlanNode();
//start.pt = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
//给定第二个坐标
//end = new MKPlanNode();
//end.pt = new GeoPoint(40057031,116307852);
//设置回调的行走路线的方法
//mkSearch.walkingSearch(null, start, null, end);
//7.0公交换乘路线的搜索
//mapController.setZoom(12);
//在地图范围内实现对物体的搜索
//mkSearch = new MKSearch();
//mkSearch.init(bMapManager, new MySearchListener());
//给定第一个坐标
//start = new MKPlanNode();
//start.pt = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
//给定第二个坐标
//end = new MKPlanNode();
//end.pt = new GeoPoint(40057031,116307852);
//设置回调的行走路线的方法
//mkSearch.transitSearch("北京", start, end);
//8.0公交详细路线的搜索
//mapController.setZoom(12);
//在地图范围内实现对物体的搜索
//mkSearch = new MKSearch();
//mkSearch.init(bMapManager, new MySearchListener());
//设置回调的行走路线的方法
//mkSearch.poiSearchInCity("北京", "300");
//v9.00驾车路线多条搜索
mapController.setZoom(14);
//在地图范围内实现对物体的搜索
mkSearch = new MKSearch();
mkSearch.init(bMapManager, new MySearchListener());
//给定第一个坐标
start = new MKPlanNode();
start.pt = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
//给定第二个坐标
end = new MKPlanNode();
end.pt = new GeoPoint(40057031,116307852);
//调用路线的回调方法
mkSearch.transitSearch("北京", start, end);
}
//搜索对象的实现
public class MySearchListener implements MKSearchListener{
//根据名称获取经纬度
@Override
public void onGetAddrResult(MKAddrInfo res, int error) {
if(error != 0){
Toast.makeText(BaiDu_SuYiActivity.this, "对不起,找不到您的结果", 2).show();
return;
}
mapView.getController().animateTo(res.geoPt);
String msg = String.valueOf(res.geoPt.getLatitudeE6()/1E6)+String.valueOf(res.geoPt.getLongitudeE6()/1E6);
Drawable drawable = getResources().getDrawable(R.drawable.iconmarka);
mapView.getOverlays().clear();
}
@Override
public void onGetBusDetailResult(MKBusLineResult result, int type) {
if(result == null||type != 0){
Toast.makeText(BaiDu_SuYiActivity.this, "对不起,找不到您的结果", 2).show();
return;
}
RouteOverlay routeOverlay = new RouteOverlay(BaiDu_SuYiActivity.this, mapView);
routeOverlay.setData(result.getBusRoute());
//清空所有的公交信息
mapView.getOverlays().clear();
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();
mapView.getController().animateTo(result.getBusRoute().getStart());
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult result, int type) {
//对调用的搜索方法进行回调响应
if(result == null){
return;
}
RouteOverlay routeOverlay = new RouteOverlay(BaiDu_SuYiActivity.this, mapView);
//里面的参赛之所以填0是应为我们只需要返回第一条线路
routeOverlay.setData(result.getPlan(0).getRoute(0));
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();
}
@Override
public void onGetPoiDetailSearchResult(int result, int type) {
}
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
//对调用的搜索方法进行回调响应
//v3.00
//if(result == null){
// return;
//}
//PoiOverlay poiOverlay = new PoiOverlay(BaiDu_SuYiActivity.this, mapView);
//poiOverlay.setData(result.getAllPoi());
//mapView.getOverlays().add(poiOverlay);
//mapView.invalidate();
//v8.00
if(result == null||iError != 0){
Toast.makeText(BaiDu_SuYiActivity.this, "对不起,找不到您的结果", 2).show();
return;
}
//定义一个公交线路图描述类
MKPoiInfo mkPoiInfo = null;
//获得公交线路图的总的站点
int totalPoiNum = result.getNumPois();
for(int i = 0;i<totalPoiNum;i++){
mkPoiInfo = result.getPoi(i);
if(mkPoiInfo.ePoiType == 2){
break;
//如果说返回的时候公交的线路图就返回
}
}
mkSearch.busLineSearch("北京", mkPoiInfo.uid);
}
@Override
public void onGetRGCShareUrlResult(String arg0, int arg1) {
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult result, int type) {
//公交换乘的回调方法
//v7.00
//if(result == null){
// return;
//}
//TransitOverlay transitOverlay = new TransitOverlay(BaiDu_SuYiActivity.this, mapView);
//transitOverlay.setData(result.getPlan(0));
//mapView.getOverlays().add(transitOverlay);
//刷新地图
//mapView.invalidate();
//v9.00
if(result == null){
return;
}
//获得所有的驾车线路图
int planNum = result.getNumPlan();
for(int i = 0 ;i<planNum;i++){
TransitOverlay transitOverlay = new TransitOverlay(BaiDu_SuYiActivity.this, mapView);
transitOverlay.setData(result.getPlan(i));
mapView.getOverlays().add(transitOverlay);
}
mapView.invalidate();
mapView.getController().animateTo(result.getStart().pt);
}
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult result, int type) {
//对调用的搜索方法进行回调响应
if(result == null){
return;
}
RouteOverlay routeOverlay = new RouteOverlay(BaiDu_SuYiActivity.this, mapView);
routeOverlay.setData(result.getPlan(0).getRoute(0));
mapView.getOverlays().add(routeOverlay);
//刷新地图
mapView.invalidate();
}
}
//标注一个遮盖物
public class MyOverlay extends Overlay{
//声明一个地点
private GeoPoint geoPoint = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
//声明一个画笔工具
private Paint paint = new Paint();
@Override
public void draw(Canvas arg0, MapView arg1, boolean arg2) {
super.draw(arg0, arg1, arg2);
Point point = mapView.getProjection().toPixels(geoPoint, null);
arg0.drawText("这里是天安门", point.x,point.y,paint);
}
}
//标注多个遮盖物
public class MyOverLayItem extends ItemizedOverlay<OverlayItem>{
private List<OverlayItem> overlayItem = new ArrayList<OverlayItem>();
//定义一组坐标
private double mLat1 = 39.90923;//经
private double mLot1 = 116.397428;//纬
private double mLat2 = 39.92923;//经
private double mLot2 = 116.377428;//纬
private double mLat3 = 39.94923;//经
private double mLot3 = 116.357428;//纬
private double mLat4 = 39.96923;//经
private double mLot4 = 116.337428;//纬
//用于在地图上标识坐标,用一个图片标注
public MyOverLayItem(Drawable drawable) {
super(drawable);
GeoPoint geoPoint1 = new GeoPoint((int)(mLat1*1E6),(int)(mLot1*1E6));
GeoPoint geoPoint2 = new GeoPoint((int)(mLat2*1E6),(int)(mLot2*1E6));
GeoPoint geoPoint3 = new GeoPoint((int)(mLat3*1E6),(int)(mLot3*1E6));
GeoPoint geoPoint4 = new GeoPoint((int)(mLat4*1E6),(int)(mLot4*1E6));
overlayItem.add(new OverlayItem(geoPoint1, "A", "这是第一个"));
overlayItem.add(new OverlayItem(geoPoint2, "B", "这是第二个"));
overlayItem.add(new OverlayItem(geoPoint3, "C", "这是第三个"));
overlayItem.add(new OverlayItem(geoPoint4, "D", "这是第四个"));
//刷新地图
populate();
}
//返回指定的List集合中每一个坐标
@Override
protected OverlayItem createItem(int arg0) {
return overlayItem.get(arg0);
}
@Override
public int size() {
return overlayItem.size();
}
//当标注物被点击的时候
@Override
public boolean onTap(int i) {
Toast.makeText(BaiDu_SuYiActivity.this, overlayItem.get(i).getSnippet(), 2).show();
return true;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(bMapManager != null){
bMapManager.destroy();
bMapManager = null;
}
}
@Override
protected void onResume() {
super.onResume();
if(bMapManager != null){
bMapManager.start();
}
}
@Override
protected void onPause() {
super.onPause();
if(bMapManager != null){
bMapManager.stop();
}
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}