天天看点

百度地图android获取地图中心点,拖动地图获取中心点坐标(百度地图3.0+)

package baidumapsdk.demo;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

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.OnMapLoadedCallback;

import com.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener;

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.MyLocationData;

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;

public class CenterDemo extends Activity implements OnMapLoadedCallback,

OnMapStatusChangeListener, OnGetGeoCoderResultListener {

private MapView mMapView;

private BaiduMap mBaiduMap;

// 定位相关

LocationClient mLocClient;

public MyLocationListenner myListener = new MyLocationListenner();

//

GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用

boolean isFirstLoc = true;// 是否首次定位

private TextView tvLongitude, tvLatitude, tvAddress;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_center);

init();

}

private void init() {

initView();

setListener();

}

private void initView() {

mMapView = (MapView) findViewById(R.id.mapview);

mBaiduMap = mMapView.getMap();

// 开启定位图层

mBaiduMap.setMyLocationEnabled(true);

// 定位初始化

mLocClient = new LocationClient(this);

mLocClient.registerLocationListener(myListener);

LocationClientOption option = new LocationClientOption();

option.setOpenGps(true);// 打开gps

option.setCoorType("bd09ll"); // 设置坐标类型

option.setScanSpan(1000);

option.setIsNeedAddress(true);

mLocClient.setLocOption(option);

mLocClient.start();

// 初始化搜索模块,注册事件监听

mSearch = GeoCoder.newInstance();

mSearch.setOnGetGeoCodeResultListener(this);

//

tvLongitude = (TextView) findViewById(R.id.longitude);

tvLatitude = (TextView) findViewById(R.id.latitude);

tvAddress = (TextView) findViewById(R.id.address);

}

private void setListener() {

mBaiduMap.setOnMapLoadedCallback(this);

mBaiduMap.setOnMapStatusChangeListener(this);

}

public class MyLocationListenner implements BDLocationListener {

@Override

public void onReceiveLocation(BDLocation location) {

// map view 销毁后不在处理新接收的位置

if (location == null || mMapView == null)

return;

MyLocationData locData = new MyLocationData.Builder().accuracy(0)

// 此处设置开发者获取到的方向信息,顺时针0-360

.direction(100).latitude(location.getLatitude())

.longitude(location.getLongitude()).build();

mBaiduMap.setMyLocationData(locData);

if (isFirstLoc) {

isFirstLoc = false;

LatLng ll = new LatLng(location.getLatitude(),

location.getLongitude());

MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

mBaiduMap.animateMapStatus(u);

}

}

public void onReceivePoi(BDLocation poiLocation) {

}

}

@Override

public void onMapStatusChange(MapStatus arg0) {

}

@Override

public void onMapStatusChangeFinish(MapStatus arg0) {

LatLng ptCenter = arg0.target;

tvLongitude.setText("经度:" + ptCenter.longitude);

tvLatitude.setText("纬度:" + ptCenter.latitude);

// 反Geo搜索

mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(ptCenter));

}

@Override

public void onMapStatusChangeStart(MapStatus arg0) {

}

@Override

public void onMapLoaded() {// 地图加载完成

}

@Override

public void onGetGeoCodeResult(GeoCodeResult arg0) {

}

@Override

public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) {

tvAddress.setText("地址:" + arg0.getAddress());

}

@Override

protected void onPause() {

mMapView.onPause();

super.onPause();

}

@Override

protected void onResume() {

mMapView.onResume();

super.onResume();

}

@Override

protected void onDestroy() {

// 退出时销毁定位

mLocClient.stop();

// 关闭定位图层

mBaiduMap.setMyLocationEnabled(false);

mMapView.onDestroy();

mMapView = null;

super.onDestroy();

}

}