百度地图BaiduMap--学习(四)------定位当前位置,显示中文地址

转载学习http://blog.csdn.net/bob_xing_yang/article/details/50450544

直接上代码:

xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <com.baidu.mapapi.map.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="300dip"
        android:clickable="true" />
    
    <TextView 
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>  
MainActivity.java

package com.example.baidumaptest;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
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.core.SearchResult;
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.CoordinateConverter;
import com.baidu.mapapi.utils.CoordinateConverter.CoordType;

public class MainActivity extends Activity {

	private MapView mapView;

	private BaiduMap baiduMap;

	private LocationManager locationManager;

	private String provider;

	private boolean isFirstLocate = true;

	private TextView text;
	GeoCoder geoCoder = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		SDKInitializer.initialize(getApplicationContext());
		setContentView(R.layout.activity_main);
		mapView = (MapView) findViewById(R.id.map_view);
		text = (TextView) findViewById(R.id.text);

		baiduMap = mapView.getMap();
		geoCoder = GeoCoder.newInstance();

		baiduMap.setMyLocationEnabled(true);
		locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

		List<String> providerList = locationManager.getProviders(true);
		if (providerList.contains(LocationManager.GPS_PROVIDER)) {
			provider = LocationManager.GPS_PROVIDER;
		} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
			provider = LocationManager.NETWORK_PROVIDER;
		} else {
			Toast.makeText(this, "No location provider to use",
					Toast.LENGTH_SHORT).show();
			return;
		}
		Location location = locationManager.getLastKnownLocation(provider);
		if (location != null) {
			navigateTo(location);
		}
		locationManager.requestLocationUpdates(provider, 1000, 1,
				locationListener);

	}

	private void navigateTo(Location location) {

		if (isFirstLocate) {
			LatLng ll = new LatLng(location.getLatitude(),
					location.getLongitude());
			// 将GPS设备采集的原始GPS坐标转换成百度坐标
			CoordinateConverter converter = new CoordinateConverter();
			converter.from(CoordType.GPS);
			// sourceLatLng待转换坐标
			converter.coord(ll);
			LatLng desLatLng = converter.convert();

			MapStatusUpdate update = MapStatusUpdateFactory
					.newLatLng(desLatLng);
			baiduMap.animateMapStatus(update);
			update = MapStatusUpdateFactory.zoomTo(16f);
			baiduMap.animateMapStatus(update);
			isFirstLocate = false;
		}
		CoordinateConverter converter = new CoordinateConverter();
		converter.from(CoordType.GPS);
		// sourceLatLng待转换坐标
		converter.coord(new LatLng(location.getLatitude(), location
				.getLongitude()));
		LatLng desLatLng = converter.convert();

		MyLocationData.Builder locationBuilder = new MyLocationData.Builder();
		locationBuilder.latitude(desLatLng.latitude);
		locationBuilder.longitude(desLatLng.longitude);
		MyLocationData locationData = locationBuilder.build();
		baiduMap.setMyLocationData(locationData);

	}

	LocationListener locationListener = new LocationListener() {

		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {

		}

		@Override
		public void onProviderEnabled(String provider) {

		}

		@Override
		public void onProviderDisabled(String provider) {

		}

		@Override
		public void onLocationChanged(Location location) {
			if (location != null) {
				navigateTo(location);
//				text.setText(location.getLatitude() + "\n"
//						+ location.getLongitude());
				latlngToAddress(new LatLng(location.getLatitude(),
						location.getLongitude()));
			}

		}
	};

	@Override
	protected void onDestroy() {
		super.onDestroy();
		baiduMap.setMyLocationEnabled(false);
		mapView.onDestroy();
		if (locationManager != null) {
			locationManager.removeUpdates(locationListener);
		}
	}

	@Override
	protected void onPause() {
		super.onPause();
		mapView.onPause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		mapView.onResume();
	}

	private void latlngToAddress(LatLng latlng) {

		// 设置反地理经纬度坐标,请求位置时,需要一个经纬度
		geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latlng));

		// 设置地址或经纬度反编译后的监听,这里有两个回调方法,

		geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {

			// 经纬度转换成地址

			@Override
			public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
				if (result == null|| result.error != SearchResult.ERRORNO.NO_ERROR) {
					Toast.makeText(MainActivity.this, "找不到该地址!", Toast.LENGTH_SHORT).show();
				}
				text.setText("地址:" + result.getAddress());
			}

			// 把地址转换成经纬度
			@Override
			public void onGetGeoCodeResult(GeoCodeResult result) {
				// 详细地址转换在经纬度
				String address = result.getAddress();
			}
		});
	}
}
其余的一如既往的不变


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值