import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
import com.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener;
import com.baidu.mapapi.map.BaiduMap.OnMarkerDragListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatus;
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.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.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import com.yuanlian.mingong.activity.baseclass.BaseActivityb;
import com.yuanlian.mingong.util.MinGongConfig;
import com.yuanlian.mingong.R;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MapGetGeoActivity extends BaseActivityb implements
OnGetGeoCoderResultListener {
public static int GETLATLON = 1001;
@ViewInject(R.id.mapview)
MapView mMapView;
BaiduMap mBaiduMap;
GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
private double lat;
private double lon;
private String address = "";
boolean isFirst = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_getmap_address);
ViewUtils.inject(this);
// getNetStatement();
init();
}
private void init() {
mBaiduMap = mMapView.getMap();// 获取Map控制
mMapView.showZoomControls(false);// 隐藏百度自带的缩放按钮
mMapView.removeViewAt(1);// 移除百度LOGO
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.zoomTo(14));
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
startLoc();
// 初始化搜索模块,注册事件监听
mSearch = GeoCoder.newInstance();
mSearch.setOnGetGeoCodeResultListener(this);
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
LocationMode.NORMAL, true, null));
mBaiduMap.setOnMapClickListener(new OnMapClickListener() {
@Override
public boolean onMapPoiClick(MapPoi arg0) {
return false;
}
@Override
public void onMapClick(LatLng arg0) {
showProgress();
addMarker(arg0);
mSearch.reverseGeoCode(new ReverseGeoCodeOption()
.location(arg0));
lon = arg0.longitude;
lat = arg0.latitude;
}
});
mBaiduMap.setOnMarkerDragListener(new OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker arg0) {
}
@Override
public void onMarkerDragEnd(Marker arg0) {
showProgress();
mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(arg0
.getPosition()));
lon = arg0.getPosition().longitude;
lat = arg0.getPosition().latitude;
}
@Override
public void onMarkerDrag(Marker arg0) {
}
});
}
@OnClick({ R.id.getmapaddress_back, R.id.getmapaddress_makesure })
public void onClick(View v) {
switch (v.getId()) {
case R.id.getmapaddress_back:
finishSelf();
break;
case R.id.getmapaddress_makesure:
Intent intent = new Intent();
intent.putExtra("lat", lat);
intent.putExtra("lon", lon);
intent.putExtra("address", address);
if (MinGongConfig.DEBUG) {
System.out.println("====mapgetgeo====" + address + lat + ";"
+ lon);
}
setResult(MapGetGeoActivity.GETLATLON, intent);
finishSelf();
break;
}
}
private void addMarker(LatLng arg0) {
mBaiduMap.clear();
BitmapDescriptor bd = BitmapDescriptorFactory
.fromResource(R.drawable.marker);
OverlayOptions oo = new MarkerOptions().position(arg0).icon(bd)
.draggable(true).zIndex(10);// 创建marker
mBaiduMap.addOverlay(oo);// 添加marker到mapView
}
@Override
public void onGetGeoCodeResult(GeoCodeResult arg0) {
}
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) {
disMissProgress();
address = arg0.getAddress();
}
// 定位功能
private void startLoc() {
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(10000);
option.setIsNeedAddress(true);
mLocClient.setLocOption(option);
mLocClient.start();
}
public MyLocationListenner myListener = new MyLocationListenner();// 定位图层监听
static LocationClient mLocClient;
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null) {
return;
} else {
if (location == null || mMapView == null)
return;
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
lon = location.getLongitude();
lat = location.getLatitude();
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
if (isFirst) {
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
isFirst = false;
}
}
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mMapView.onDestroy();
mMapView = null;
}
@Override
protected void onPause() {
mMapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
if (!mLocClient.isStarted()) {
mLocClient.start();
}
mMapView.onResume();
super.onResume();
}
/**
* 地图移动后获取中心点经纬度
* void
*/
private void demo(LatLng ll) {
// 定义地图状态
MapStatus mMapStatus = new MapStatus.Builder().target(ll).zoom(14)
.build();
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
.newMapStatus(mMapStatus);
// 改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {
@Override
public void onMapStatusChangeStart(MapStatus arg0) {
}
@Override
public void onMapStatusChangeFinish(MapStatus arg0) {
LatLng latlng = mBaiduMap.getMapStatus().target;
lat = latlng.latitude;
lon = latlng.longitude;
mSearch.reverseGeoCode(new ReverseGeoCodeOption()
.location(latlng));
}
@Override
public void onMapStatusChange(MapStatus arg0) {
}
});
}
}