package com.example.alnandroiddemo;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import com.alnandroiddemo.util.T;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeOption;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.baidu.mapapi.utils.DistanceUtil;
public class FirstMapActivity extends BaseActivity implements
OnGetGeoCoderResultListener {
BaiduMap mBaiduMap = null;
MapView mMapView = null;
private Marker mMarkerA;
private Marker mMarkerB;
private InfoWindow mInfoWindow;
LatLng llA;
LatLng llB;
public static final int MSG_NET_TIMEOUT = 100;
public static final int MSG_NET_STATUS_ERROR = 200;
public static final int MSG_NET_SUCC = 1;
private RelativeLayout progress;
GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_first_map);
progress = (RelativeLayout) findViewById(R.id.progress);
// 获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmap_items);
mBaiduMap = mMapView.getMap();
// 初始化搜索模块,注册事件监听
mSearch = GeoCoder.newInstance();
mSearch.setOnGetGeoCodeResultListener(this);
//mSearch.geocode(new GeoCodeOption().city("上海").address("")); //在city里加宁波,, 不管用
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(new LatLng(31.24274 , 121.424083));
mBaiduMap.animateMapStatus(u);
Button btnSearch = (Button) findViewById(R.id.btn_search);
btnSearch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = getIntent();
String[] pt = (String[])intent.getSerializableExtra("pt");
T.showShort(FirstMapActivity.this, "pt value=" + pt[0] + ":" + pt[1]);
//my GOD, really Reverse.......
LatLng ptCenter = new LatLng((Float.valueOf(pt[0])), (Float.valueOf(pt[1])));
// 反Geo搜索
mSearch.reverseGeoCode(new ReverseGeoCodeOption()
.location(ptCenter));
}
});
Button btnPos = (Button) findViewById(R.id.btn_pos);
btnPos.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient( getApplication());
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocClient.setLocOption(option);
mLocClient.start();
}
});
Button btnDistance = (Button) findViewById(R.id.btn_distance);
btnDistance.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//计算p1、p2两点之间的直线距离,单位:米
T.showShort(FirstMapActivity.this, "Distance:" + DistanceUtil.getDistance(llA, llB) + "米");
}
});
Button btnOverlay = (Button) findViewById(R.id.btn_overlay);
btnOverlay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 初始化全局 bitmap 信息,不用时及时 recycle
BitmapDescriptor bdA = BitmapDescriptorFactory
.fromResource(R.drawable.icon_marka);
BitmapDescriptor bdB = BitmapDescriptorFactory
.fromResource(R.drawable.icon_markb);
llA = new LatLng(31.24274 , 121.424083);
llB = new LatLng(31.229896, 121.453692);
OverlayOptions ooA = new MarkerOptions().position(llA).icon(bdA)
.zIndex(9).draggable(true);
mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));
OverlayOptions ooB = new MarkerOptions().position(llB).icon(bdB)
.zIndex(5);
mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));
mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(final Marker marker) {
Button button = new Button(getApplicationContext());
button.setBackgroundResource(R.drawable.popup);
OnInfoWindowClickListener listener = null;
if (marker == mMarkerA ) {
button.setText("A 信息");
listener = new OnInfoWindowClickListener() {
public void onInfoWindowClick() {
LatLng ll = marker.getPosition();
//LatLng llNew = new LatLng(ll.latitude + 0.005,ll.longitude + 0.005);
//marker.setPosition(llNew);
mBaiduMap.hideInfoWindow();
}
};
LatLng ll = marker.getPosition();
mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(button), ll, -47, listener);
mBaiduMap.showInfoWindow(mInfoWindow);
} else if (marker == mMarkerB) {
//void
}
return true;
}
});
}
}); //end out onclick
}
// 定位相关
LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
private LocationMode mCurrentMode;
BitmapDescriptor mCurrentMarker;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.first_map, menu);
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
// 退出时销毁定位
if(mLocClient != null)
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
// 在activity执行onPause时执行mMapView. onPause (),实现地�