package com.caichunbo.schoolassist.TripMode;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
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.location.Poi;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
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.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
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;
import com.caichunbo.schoolassist.R;
import java.util.List;
public class WozainaActivty extends AppCompatActivity {
private BitmapDescriptor currentMarker = null;
private MyLocationConfiguration.LocationMode currentMode;
private ImageView iv_location; //定位按钮
MapView mMapView = null;
StringBuffer sb = new StringBuffer(256);
public StringBuilder builder=new StringBuilder();
boolean isOpenLocation=false;
private BaiduMap mBaiduMap;
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
private boolean isFirstLocation = true;
private double lat;
private double lon;
private BDLocation mCurrentLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.wozaina);
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
// 删除百度地图logo
mMapView.removeViewAt(1);
mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类
mLocationClient.registerLocationListener( myListener ); //注册监听函数
initView();//ImageView初始化
initLocation();//配置定位SDK参数
//开始定位
mLocationClient.start();
mBaiduMap.setMyLocationEnabled(true); //开启定位图层
currentMode = MyLocationConfiguration.LocationMode.NORMAL;//NORMAL为正常模式 FOLLOWING为跟随模式 COMPASS为罗盘模式
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
currentMode, true, currentMarker));
}
/**
* 初始化定位按钮
*/
private void initView() {
iv_location = (ImageView) findViewById(R.id.dingWei_bt);
iv_location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mCurrentLocation != null) {
LatLng latLng = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude());
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(mapStatusUpdate, 1000);
}
}
});
}
private void initLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span=0;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {
private float radius;
@Override
public void onReceiveLocation(BDLocation location) {
mCurrentLocation = location;
radius = location.getRadius();
lat = location.getLatitude(); //当前的经纬度
lon = location.getLongitude();
if(isFirstLocation){
// 构造定位数据
MyLocationData locData = new MyLocationData.Builder()
.accuracy(radius)
.latitude(lat)
.longitude(lon)
.build();
// 设置定位数据
mBaiduMap.setMyLocationData(locData);
LatLng ll = new LatLng(lat, lon);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(msu);
// //定义地图状态
MapStatus mMapStatus = new MapStatus.Builder()
.target(ll)
.zoom(18) //自定义定位后地图显示的缩放比例
.build();
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//在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 (),实现地图生命周期管理
mMapView.onPause();
}
}
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
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.location.Poi;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
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.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
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;
import com.caichunbo.schoolassist.R;
import java.util.List;
public class WozainaActivty extends AppCompatActivity {
private BitmapDescriptor currentMarker = null;
private MyLocationConfiguration.LocationMode currentMode;
private ImageView iv_location; //定位按钮
MapView mMapView = null;
StringBuffer sb = new StringBuffer(256);
public StringBuilder builder=new StringBuilder();
boolean isOpenLocation=false;
private BaiduMap mBaiduMap;
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
private boolean isFirstLocation = true;
private double lat;
private double lon;
private BDLocation mCurrentLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.wozaina);
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
// 删除百度地图logo
mMapView.removeViewAt(1);
mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类
mLocationClient.registerLocationListener( myListener ); //注册监听函数
initView();//ImageView初始化
initLocation();//配置定位SDK参数
//开始定位
mLocationClient.start();
mBaiduMap.setMyLocationEnabled(true); //开启定位图层
currentMode = MyLocationConfiguration.LocationMode.NORMAL;//NORMAL为正常模式 FOLLOWING为跟随模式 COMPASS为罗盘模式
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
currentMode, true, currentMarker));
}
/**
* 初始化定位按钮
*/
private void initView() {
iv_location = (ImageView) findViewById(R.id.dingWei_bt);
iv_location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mCurrentLocation != null) {
LatLng latLng = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude());
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(mapStatusUpdate, 1000);
}
}
});
}
private void initLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span=0;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {
private float radius;
@Override
public void onReceiveLocation(BDLocation location) {
mCurrentLocation = location;
radius = location.getRadius();
lat = location.getLatitude(); //当前的经纬度
lon = location.getLongitude();
if(isFirstLocation){
// 构造定位数据
MyLocationData locData = new MyLocationData.Builder()
.accuracy(radius)
.latitude(lat)
.longitude(lon)
.build();
// 设置定位数据
mBaiduMap.setMyLocationData(locData);
LatLng ll = new LatLng(lat, lon);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(msu);
// //定义地图状态
MapStatus mMapStatus = new MapStatus.Builder()
.target(ll)
.zoom(18) //自定义定位后地图显示的缩放比例
.build();
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//在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 (),实现地图生命周期管理
mMapView.onPause();
}
}