百度地图定位功能实现v3_0_0

对于初学者来说,首先得先注意,不同的jar版本,方法也不同,之前不知道,纠结了很久

成都创新互联公司主要从事成都网站设计、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务山丹,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

xml布局

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

   

        android:id="@+id/mapView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent" />

menu布局

   

        android:id="@+id/id_menu_map_common"

        android:icon="@drawable/ic_launcher"

        android:showAsAction="never"

        android:title="普通地图"/>

   

        android:id="@+id/id_menu_map_site"

        android:icon="@drawable/ic_launcher"

        android:showAsAction="never"

        android:title="卫星地图"/>

   

        android:id="@+id/id_menu_map_myLoc"

        android:icon="@drawable/ic_launcher"

        android:showAsAction="never"

        android:title="我的位置"/>

   

        android:anyDensity="true"

        android:largeScreens="true"

        android:normalScreens="true"

        android:resizeable="true"

        android:smallScreens="true" />

       

            android:name="com.baidu.location.f"

            android:enabled="true"

            android:process=":remote" >

       

   

   

   

   

   

   

   

   

   

   

   

   

   

   

Activity方法实现

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.Window;

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

import com.baidu.mapapi.map.BitmapDescriptorFactory;

import com.baidu.mapapi.map.MapStatusUpdate;

import com.baidu.mapapi.map.MapStatusUpdateFactory;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.MyLocationConfigeration;

import com.baidu.mapapi.map.MyLocationData;

import com.baidu.mapapi.map.MyLocationConfigeration.LocationMode;

import com.baidu.mapapi.model.LatLng;

public class MyMapActivity extends Activity {

private MapView mMapView;

private BaiduMap baiduMap;

/** 定位 */

private LocationClient myLocation;

/** 定位监听器 */

public MyLocationListener myLocationListener;

/** 当前纬度 */

private double mCurrentLatitude;

/** 当前经度 */

private double mCurrentLongitude;

/**

* 当前定位的模式

*/

private LocationMode mCurrentMode = LocationMode.NORMAL;

/***

* 是否是第一次定位

*/

private volatile boolean isFristLocation = true;

private boolean flag = false;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 在使用SDK各组件之前初始化context信息,传入ApplicationContext

// 注意该方法要再setContentView方法之前实现

requestWindowFeature(Window.FEATURE_NO_TITLE);

SDKInitializer.initialize(getApplicationContext());

setContentView(R.layout.activity_map);

init();

initMyLocation();

}

/**

* 初始化方法

*/

private void init() {

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

baiduMap = mMapView.getMap();

if (flag) {

// 设置显示的地图模式为卫星地图

baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

} else {

// 设置显示的地图模式为普通模式

baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

}

MapStatusUpdate update = MapStatusUpdateFactory.zoomTo(15.0f);

baiduMap.setMapStatus(update);

}

/**

* 初始化定位相关代码

*/

private void initMyLocation() {

// 定位初始化

myLocation = new LocationClient(this);

myLocationListener = new MyLocationListener();

myLocation.registerLocationListener(myLocationListener);

// 设置定位的相关配置

LocationClientOption option = new LocationClientOption();

option.setOpenGps(true);

// 返回的定位结果是百度经纬度,默认值gcj02(国测局加密经纬度坐标),其他bd09ll(百度加密经纬度坐标),bd09ll(百度加密经纬度坐标)

option.setCoorType("gcj02");

// 设置发起定位请求的间隔时间

option.setScanSpan(1000);

// 反编译地址

myLocation.setLocOption(option);

}

/**

* 实现定位回调监听

* @author Administrator

*/

private class MyLocationListener implements BDLocationListener {

@Override

public void onReceiveLocation(BDLocation location) {

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

return;

/** 构造定位数据 */

MyLocationData locationData = new MyLocationData.Builder()

.accuracy(location.getRadius())

/** 纬度 */

.latitude(location.getLatitude())

/** 经度 */

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

/** 设置定位数据 */

baiduMap.setMyLocationData(locationData);

/** 当前的纬度 */

mCurrentLatitude = location.getLatitude();

/** 当前的经度 */

mCurrentLongitude = location.getLongitude();

/** 设置自定义标记 */

BitmapDescriptor currentMarker = BitmapDescriptorFactory

.fromResource(R.drawable.marker);

MyLocationConfigeration configeration = new MyLocationConfigeration(

mCurrentMode, true, currentMarker);

baiduMap.setMyLocationConfigeration(configeration);

/** 第一次定位时,将地图位置移动到当前位置 */

if (isFristLocation) {

isFristLocation = false;

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

location.getLongitude());

MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

baiduMap.animateMapStatus(u);

}

}

}

@Override

protected void onResume() {

// MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()

super.onResume();

mMapView.onResume();

}

@Override

protected void onPause() {

// MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()

super.onPause();

mMapView.onPause();

}

@Override

protected void onDestroy() {

// MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()

mMapView.onDestroy();

mMapView = null;

super.onDestroy();

}

@Override

protected void onStart() {

baiduMap.setMyLocationEnabled(true);

if (!myLocation.isStarted()) {

myLocation.start();

}

super.onStart();

}

@Override

protected void onStop() {

// 关闭图层定位

baiduMap.setMyLocationEnabled(false);

myLocation.stop();

super.onStop();

}

/**

* 地图移动到我的位置,此处可以重新发定位请求,然后定位; 直接拿最近一次经纬度,如果长时间没有定位成功,可能会显示效果不好

*/

private void center2myLoc() {

LatLng ll = new LatLng(mCurrentLatitude, mCurrentLongitude);

MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

baiduMap.animateMapStatus(u);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.mode, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

// 普通地图

case R.id.id_menu_map_common:

baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

break;

// 卫星地图

case R.id.id_menu_map_site:

baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

break;

// 我的位置

case R.id.id_menu_map_myLoc:

center2myLoc();

break;

}

return super.onOptionsItemSelected(item);

}

}



标题名称:百度地图定位功能实现v3_0_0
地址分享:http://scyanting.com/article/igiidi.html