代码:
package com.android.mybaidu;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
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.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.OverlayItem;
public class Main extends MapActivity {
/** Called when the activity is first created. */
// 添加百度地图的相关控件
private MapView mapView=null;
private BMapManager bMapManager;// 加载地图的引擎
// 百度地图的key
private String keyString = "A270F85CD72A01E8519A9677A75FB4016ED9A5A3";
// 在百度地图上添加一些控件,比如是放大或者缩小的控件
private MapController mapController;
private Button button1, button2;
private EditText editText1, editText2;
private MKSearch mkSearch=null;// 查找地图
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
editText1 = (EditText) findViewById(R.id.editText1);
editText2 = (EditText) findViewById(R.id.editText2);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
GeoPoint geoPoint=new GeoPoint((int) (39.244 * 1E6),
(int) (117.052 * 1E6));
mkSearch.reverseGeocode(geoPoint);
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mkSearch.geocode(editText1.getText().toString(), editText2.getText().toString());
}
});
mapView = (MapView) this.findViewById(R.id.bmapView);
bMapManager = new BMapManager(Main.this);
// 必须要加载key
bMapManager.init(keyString, new MKGeneralListener() {
@Override
public void onGetPermissionState(int arg0) {
// TODO Auto-generated method stub
if (arg0 == 300) {
Toast.makeText(Main.this, "输入的Key有错!请核实!!", 1).show();
}
}
@Override
public void onGetNetworkState(int arg0) {
// TODO Auto-generated method stub
}
});
/*
* initMapActivity(arg0)是MapActivity的一个方法,
* MapActivity管理显示MapView中Activity 处理逻辑的基础类, initMapActivity初始化这个类
*/
bMapManager.start();
this.initMapActivity(bMapManager);
mkSearch = new MKSearch();
mkSearch.init(bMapManager, new MySearchListener());
}
public class MySearchListener implements MKSearchListener {
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub
if(arg1!=0){
String msg = String.format("错误号:%d ",
arg1);
return;
}
mapView.getController().animateTo(arg0.geoPt);// 将查找到的标注在地图上
String msg = String.format("维度:%f 经度:%f\f\n",
arg0.geoPt.getLatitudeE6() / 1e6,
arg0.geoPt.getLongitudeE6() / 1e6);
Toast.makeText(Main.this, msg, 1).show();
Drawable drawable=getResources().getDrawable(R.drawable.icon);
//将突破标注在地图上,设置图片的位置,会产生阴影的效果
drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
mapView.getOverlays().clear();//去除阴影;
//创建一个图层
//mapView.getOverlays().add(object);
}
public class OverItemT extends ItemizedOverlay<OverlayItem>{
//注册List可以从服务器端接受一组经纬度,标注在地图上
private List<OverlayItem> list=new ArrayList<OverlayItem>();
public OverItemT(Drawable drawable,Context context,GeoPoint geoPoint,String string) {
super(boundCenterBottom(drawable));
list.add(new OverlayItem(geoPoint, string, null));
//刷新一下地图
populate();
// TODO Auto-generated constructor stub
}
@Override
protected OverlayItem createItem(int i) {
return list.get(i);
}
@Override
public int size() {
// TODO Auto-generated method stub
return list.size();
}
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
}
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg0 == null || arg1 != 0) {
Toast.makeText(Main.this, "解析失败", 1).show();
return;
}
// 查找的点数大于0,表示查找发哦:
if (arg0 != null && arg0.getCurrentNumPois() > 0) {
GeoPoint geoPoint = arg0.getAllPoi().get(0).pt;
mapView.getController().animateTo(geoPoint);// 将查找到的标注在地图上
//从GeoPoint中取出经纬度
String msg = String.format("维度:%f 经度:%f\f\n",
geoPoint.getLatitudeE6() / 1e6,
geoPoint.getLongitudeE6() / 1e6);
msg+="\r\n附近有: ";
for(int i=0;i<arg0.getAllPoi().size();i++){
msg+=(arg0.getAllPoi().get(i).name+";");//name方法取出它经纬度所在的名称
}
Toast.makeText(Main.this, msg, 1).show();
}
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
}
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (bMapManager != null) {
bMapManager.destroy();
bMapManager = null;
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (bMapManager != null) {
bMapManager.start();
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if (bMapManager != null) {
bMapManager.stop();
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}