Android学习历程——高德地图学习开发之显示地图,定位

前言:看了很多前辈的博客,发现写博客是很好的一种方式来记录开发过程中的点滴,同时也可以帮助别人更好的去进行某一方面的开发,也可以作为一种笔记,让自己在以后开发的过程中可以回忆下之前的写好和不足之处,文笔有点烂,废话不多说,开始我的博客之旅!

一、申请高德地图账号

lbs.amap.com/
这种就不用多说了,进入网站申请注册账号就行了。

1.1 申请KEY

这一点是非常重要的,之前在进行百度地图开始时,就被这个key值弄得有点麻烦,因为key值的申请需要SHA1,听我慢慢道来。
首先就是注册登录后,点击右上角控制台进入控制台,创建自己的新应用吧。
Android学习历程——高德地图学习开发之显示地图,定位_第1张图片
接下来就是添加key了,注意了,重点,很容易弄错的地方就是这里,点击添加新key试试吧。
Android学习历程——高德地图学习开发之显示地图,定位_第2张图片

SHA1这就是我上述所说的了,你可以通过打开eclipse,菜单栏上有Window,打开其中的prefrences →Android→Build
Android学习历程——高德地图学习开发之显示地图,定位_第3张图片

复制粘贴就行了,至于Package 只要打开这个AndroidManifest.xml,没错,就是那个包名,是它,是它,就是它。

1.2 配置一下吧,不然有啥用

相信现在你应该已经创建好了吧,不用给我看,我也看不懂,没错,就是那一大串啥子东西都不知道的字符串。继续复制过来,打开你的AndroidManifest.xml,在你的application里面加上这几句吧!

       
       
            android:name="com.amap.api.v2.apikey"
            android:value="
你的一大串就放这了,别跑偏了 " />
   粘贴key值前多注意你的SHA1和包名对不对啊,不然,你会哭的!
准备工作好了吗,不,还差这个
    
   
   
   
   
   
   
   
   
   
没错,就是权限!!!千万别忘了,别少了。

二、是不是该显示地图了

2.1 不就是给你个地盘嘛,拿去呗

其实吧,很多东西高德给的demo里面源码都有,但是我就是喜欢再写一遍!
创建你的Activity,你的布局,然后在布局里加上这个
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
       
我的地盘我做主,地图就在这落脚了,就是这么霸道。
好像忘了什么东西了,jar包呢,藏拿去了,找不到,那就去高德的demo里复制粘贴吧,这都是小事情。可要记得别丢三落四的。

2.2 接下来就是 Activity 了

public class GaodeMapActivity extends Activity implements LocationSource,
		AMapLocationListener, OnMapClickListener, OnMapLongClickListener,
		OnCameraChangeListener, OnMapTouchListener, OnMarkerClickListener {

	private AMap aMap;
	private MapView mapView;
	private OnLocationChangedListener mListener;
	private AMapLocationClient mlocationClient;
	private AMapLocationClientOption mLocationOption;

	LatLng desLatLng;
	CoordinateConverter converter;


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.gaodemap);
		mapView = (MapView) findViewById(R.id.map);
		mapView.onCreate(savedInstanceState);// 此方法必须重写

		init();

		aMap.setOnMapClickListener(this);// 对amap添加单击地图事件监听器
		aMap.setOnMapLongClickListener(this);// 对amap添加长按地图事件监听器
		aMap.setOnCameraChangeListener(this);// 对amap添加移动地图事件监听器
		aMap.setOnMapTouchListener(this);// 对amap添加触摸地图事件监听器
		aMap.setOnMarkerClickListener(this);
	}


	/**
	 * 初始化
	 */
	private void init() {
		if (aMap == null) {
			aMap = mapView.getMap();
			setUpMap();
		}

	}





	/**
	 * 设置一些amap的属性
	 */
	private void setUpMap() {
		aMap.setLocationSource(this);// 设置定位监听
		aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
		aMap.getUiSettings().setScaleControlsEnabled(true);
		// 设置中心点和缩放比例
		aMap.moveCamera(CameraUpdateFactory.zoomTo(14));
		aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
		// 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种
		aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
	}

	/**
	 * 方法必须重写
	 */
	@Override
	protected void onResume() {
		super.onResume();
		mapView.onResume();
	}

	/**
	 * 方法必须重写
	 */
	@Override
	protected void onPause() {
		super.onPause();
		mapView.onPause();
		deactivate();
	}

	/**
	 * 方法必须重写
	 */
	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		mapView.onSaveInstanceState(outState);
	}

	/**
	 * 方法必须重写
	 */
	@Override
	protected void onDestroy() {
		super.onDestroy();
		mapView.onDestroy();
		if (null != mlocationClient) {
			mlocationClient.onDestroy();
		}
	}

	/**
	 * 定位成功后回调函数
	 */
	@Override
	public void onLocationChanged(AMapLocation amapLocation) {
		if (mListener != null && amapLocation != null) {
			if (amapLocation != null && amapLocation.getErrorCode() == 0) {
				mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
			} else {
				String errText = "定位失败," + amapLocation.getErrorCode() + ": "
						+ amapLocation.getErrorInfo();
				Log.e("AmapErr", errText);
			}
		}
	}

	/**
	 * 激活定位
	 */
	@Override
	public void activate(OnLocationChangedListener listener) {
		mListener = listener;
		if (mlocationClient == null) {
			mlocationClient = new AMapLocationClient(this);
			mLocationOption = new AMapLocationClientOption();
			// 设置定位监听
			mlocationClient.setLocationListener(this);
			// 设置为高精度定位模式
			mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
			// 设置定位参数
			mlocationClient.setLocationOption(mLocationOption);
			// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
			// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
			// 在定位结束后,在合适的生命周期调用onDestroy()方法
			// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
			mlocationClient.startLocation();
		}
	}

	/**
	 * 停止定位
	 */
	@Override
	public void deactivate() {
		mListener = null;
		if (mlocationClient != null) {
			mlocationClient.stopLocation();
			mlocationClient.onDestroy();
		}
		mlocationClient = null;
	}

	@Override
	public void onMapClick(LatLng arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onMapLongClick(LatLng arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onCameraChange(CameraPosition arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onCameraChangeFinish(CameraPosition arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onTouch(MotionEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean onMarkerClick(Marker arg0) {
		// TODO Auto-generated method stub
		return false;
	}
	
    /**
	 * 将String类型的经纬度转成Double类型
	 * 将Wgs84转成Gcj02
	 */
	public LatLng latLngConverter(String lat, String log) {

		Double latitude = Double.parseDouble(lat);
		Double longitude = Double.parseDouble(log);
		// sourceLatLng待转换坐标点
		LatLng sourceLatLng = new LatLng(latitude, longitude);
		converter = new CoordinateConverter(GaodeMapActivity.this);
		// CoordType.GPS 待转换坐标类型
		converter.from(CoordType.GPS);
		converter.coord(sourceLatLng);
		// 执行转换操作
		desLatLng = converter.convert();
		return desLatLng;
	}
	

}
     

你可能感兴趣的:(高德地图)