public class MainActivity extends Activity {
//获得控件对象
private MapView mView;
//获得地图对象
private BaiduMap bMap;
//两个输入框
private EditText city,address;
//获取按钮对象
private Button btn;
//创建地理编码的对象
private GeoCoder coder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//初始化控件
city=(EditText) findViewById(R.id.city);
address=(EditText) findViewById(R.id.address);
btn=(Button) findViewById(R.id.btn);
mView=(MapView) findViewById(R.id.mview);
bMap=mView.getMap();
//113.310525,23.148497(广州动物园)
//标注对象初始化
MarkerOptions marker=new MarkerOptions();
//设置标注对象的基本信息
//图片
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher));
//地理坐标
final LatLng pos=new LatLng(23.148497, 113.310525);
//标注在那个地理坐标上显示
marker.position(pos);
//标注信息
marker.title("广州动物园");
//设置标注可以被拖拽,一定要在添加到地图之前添加
marker.draggable(true);
//将标注添加到地图上
bMap.addOverlay(marker);
//更改地图的默认中心
bMap.setMapStatus(MapStatusUpdateFactory.newLatLng(pos));
//设置标注点的点击事件
bMap.setOnMarkerClickListener(new OnMarkerClickListener(){
@Override
public boolean onMarkerClick(Marker arg0) {
//当点击标注点的时候弹出弹出窗图层(infowindow)
//获取被点击的标注点的相关信息
String title=arg0.getTitle();
Button btn=new Button(MainActivity.this);
btn.setText(title);
// 参数1:InfoWindow的视图 2:InfoWindow显示的位置
// 3:InfoWindow相对于自身的显示位置在Y轴上的偏移量
InfoWindow window=new InfoWindow(btn, pos, -50);
//让弹出窗层在地图上显示出来
bMap.showInfoWindow(window);
return false;
}
});
//监听标注点被拖拽
bMap.setOnMarkerDragListener(newOnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker arg0) {
// TODO Auto-generatedmethod stub
System.out.println("标注点开始拖动");
}
@Override
public void onMarkerDragEnd(Marker arg0) {
// TODO Auto-generatedmethod stub
System.out.println("标注点结束拖动");
//获得标注点的坐标
LatLng pos=arg0.getPosition();
//反向编码设置
ReverseGeoCodeOption opt=new ReverseGeoCodeOption();
opt.location(pos);
//进行反向编码
coder.reverseGeoCode(opt);
}
@Override
public void onMarkerDrag(Marker arg0) {
// TODO Auto-generatedmethod stub
System.out.println("标注点正在拖动");
}
});
//创建地理编码器对象
coder=GeoCoder.newInstance();
//编码结果的监听
coder.setOnGetGeoCodeResultListener(newOnGetGeoCoderResultListener() {
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) {
System.out.println("反向编码的结果");
String address=arg0.getAddress();
System.out.println("=============================="+address);
}
@Override
public void onGetGeoCodeResult(GeoCodeResult arg0) {
// TODO Auto-generatedmethod stub
System.out.println("正向编码的结果");
//获得坐标
LatLng pos=arg0.getLocation();
bMap.clear();//清空百度地图上的tuc
//设置标注点
MarkerOptions marker=new MarkerOptions();
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher));
marker.position(pos);
bMap.addOverlay(marker);
//让标注点可以移动
marker.draggable(true);
bMap.setMapStatus(MapStatusUpdateFactory.newLatLng(pos));
}
});
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generatedmethod stub
String sCity = city.getText().toString().trim();
String sAddress = address.getText().toString().trim();
//进行正向编码
GeoCodeOption option=new GeoCodeOption();
option.city(sCity);
option.address(sAddress);
//发起正向编码
coder.geocode(option);
}
});
}
@Override}