百度地图的一些疑问

关于百度地图的几个疑问:

1.从有MapView开始,就已经进入加载百度地图了,mMapView会选择某一点为中心点开始加载,默认是从天安门开始,一般防止跳转,都是将上次的位置保存起来,从上次的位置开始加载,如果有定位的话,接着再跳转到定位的位置。

地图跳转的原因:从有Mapview就开始加载,包括setcontentview入xml。之后有setMapStatus或MapStatusUpdate来更新地图,则地图再次改变,因而会出现跳转现象。

如果有时候,实现避免不了跳转,可以试着,加入View.setVisibility().

2.一般来说,整个过程更新一次地图即可。setMapStatus更新地图,只会以当前的 MapStatusUpdate来更新地图,覆盖过去的相关设置。animateMapStatus动画形式更新地图。添加addOverlay等直接在mMapView添加生效,在地图上显示。

方案:改用setMapStatus()就可以解决。??
原因:在Activity的OnCreate()执行完成以前,地图还没有显示。animateMapStatus的功能是以动画方式改变地图状态。显然,在地图还没显示时,不可能运行动画。

3.将多个点覆盖在视野内,LatLngBounds.Builder()。.include即可。

4.将xml转换为bitmap,当做marker显示。http://blog.csdn.net/jwzhangjie/article/details/36517719

5.不在xml文件中加入MapView,而是new控件,new MapView(this, mapOptions)  http://www.tuicool.com/articles/Z77RVz


仅为参考:

<RelativeLayout 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"
    tools:context="${relativePackage}.${activityClass}" >
    
    <FrameLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/mapview_container">
        
    </FrameLayout>

<!--     <com.baidu.mapapi.map.MapView   -->
<!-- 	    android:id="@+id/bmapView"   -->
<!-- 	    android:layout_width="match_parent"   -->
<!-- 	    android:layout_height="match_parent"   -->
<!-- 	    android:clickable="true" /> -->
	    

</RelativeLayout>

package com.example.baidutest;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.WindowManager.LayoutParams;
import android.widget.FrameLayout;

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.BaiduMapOptions;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
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.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;

public class MainActivity extends Activity {

	private LocationClient mLocClient;
	private MyLocationListenner myListener = new MyLocationListenner();
	private LocationMode mCurrentMode;
	boolean isFirstLoc = true;
	
	private BitmapDescriptor mCurrentMarker;
	private MapView mMapView;
	private BaiduMap mBaiduMap;	
	
	private LatLng mCurrentLatLng;
	private double mCurrentLatitude;
	private double mCurrentLongtitude;

	
	Handler mHandler;
	
	LatLng point = new LatLng(36.312163, 122.097855);
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		SDKInitializer.initialize(getApplicationContext());
		setContentView(R.layout.activity_main);
		mCurrentMode = LocationMode.NORMAL;
		mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
		// 地图初始化

//		mMapView = new MapView(this,
//					new BaiduMapOptions().mapStatus(new MapStatus.Builder()
//							.target(new LatLng(3,
//									106.751304)).build()));
//		setContentView(mMapView);
//		mBaiduMap = mMapView.getMap();
		
		FrameLayout mapViewContainer = (FrameLayout) findViewById(R.id.mapview_container);

		MapStatus mapStatus = new MapStatus.Builder()
		                                .target( point )
		                                .zoom(12).build();

		BaiduMapOptions options = new BaiduMapOptions()
		                .zoomControlsEnabled(false).scaleControlEnabled(false)
		                .mapStatus(mapStatus);

		mMapView = new MapView(this, options);
		mapViewContainer.addView(mMapView, LayoutParams.MATCH_PARENT,
		                                LayoutParams.MATCH_PARENT);
		
//		mMapView = (MapView) findViewById(R.id.bmapView);
		
//		mapViewContainer = (FrameLayout) findViewById(R.id.mapview_container);
//
//		MapStatus mapStatus = new MapStatus.Builder()
//		                                .target(new LatLng(30.310607,
//		                                		120.093059))
//		                                .zoom(15).build();
//
//		 BaiduMapOptions options = new BaiduMapOptions()
//		                                .zoomControlsEnabled(false).scaleControlEnabled(false)
//		                                .mapStatus(mapStatus);
//
//		 MapView mapView = new MapView(this, options);
//		 mapViewContainer.addView(mapView, LayoutParams.MATCH_PARENT,
//		                                LayoutParams.MATCH_PARENT);
		

//		mMapView.setVisibility(View.INVISIBLE);
		 
//		 MapStatus mapStatus = new MapStatus.Builder()
//         .target(new LatLng(30.310607,
//         		120.093059))
//         .zoom(15).build();
		 
		mBaiduMap = mMapView.getMap();
		mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
				mCurrentMode, true, mCurrentMarker));
		// 开启定位图层
		mBaiduMap.setMyLocationEnabled(true);	
		
//        mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder()
//		.target(new LatLng(30.310607,
//         		120.093059)).build()));
		
		// 定位初始化
		mLocClient = new LocationClient(getApplicationContext());
		mLocClient.registerLocationListener(myListener);
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true);// 打开gpsc
		option.setCoorType("bd09ll"); // 设置坐标类型
		option.setScanSpan(1000);
		mLocClient.setLocOption(option);
		mLocClient.start();
		

        				
		
		OverlayOptions option1 = new MarkerOptions().position(point).icon(mCurrentMarker);
		mBaiduMap.addOverlay(option1);
		
	
		
//		mBaiduMap.setMapStatus(MapStatusUpdateFactory
//				.newMapStatus(new MapStatus.Builder()
//				.zoom(mMapRoomLevel).build()));	
		
//		mHandler = new Handler();
//		mHandler.postDelayed(new Runnable() {
//			
//			@Override
//			public void run() {
//				// TODO Auto-generated method stub
//				mMapRoomLevel = getMapRoomLevel(mMaxDistance);
//				
				mBaiduMap.setMapStatus(MapStatusUpdateFactory
						.newMapStatus(new MapStatus.Builder()
						.zoom(mMapRoomLevel).build()));	
//				mBaiduMap.animateMapStatus(MapStatusUpdateFactory
//						.newMapStatus(new MapStatus.Builder()
//						.zoom(mMapRoomLevel).build()));
//			}
//		}, 1000);
		
	}

	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(location.getRadius())
					// 此处设置开发者获取到的方向信息,顺时针0-360
					.direction(100).latitude(location.getLatitude())
					.longitude(location.getLongitude()).build();
			mBaiduMap.setMyLocationData(locData);
			mCurrentLatitude = location.getLatitude();
			mCurrentLongtitude = location.getLongitude();
			
			if (isFirstLoc) {
				isFirstLoc = false;
				mCurrentLatLng = new LatLng(mCurrentLatitude,
						mCurrentLongtitude);
//				MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(mCurrentLatLng);
//				mBaiduMap.animateMapStatus(u);
				mMapView.setVisibility(View.VISIBLE);
				 LatLng point2 = new LatLng(32.314163, 120.069253);
				LatLngBounds.Builder builder = new LatLngBounds.Builder();  
				builder.include(mCurrentLatLng).include(point)
					.include(point2);
				LatLngBounds bounds = builder.build();  
				
//	            mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder()
//        		.target(mCurrentLatLng).build()));	
				
//	            mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder()
//       		.target(mCurrentLatLng).build()));	
				
	            MapStatusUpdate u = MapStatusUpdateFactory.newLatLngBounds(bounds);  
	            mBaiduMap.animateMapStatus(u); 
	            
//	            mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder()
//        		.targt(mCurrentLatLng).build()));	
	            

	           
	            OverlayOptions option2 = new MarkerOptions().position(point2).icon(mCurrentMarker);
	    		mBaiduMap.addOverlay(option2);
			}
		}

		public void onReceivePoi(BDLocation poiLocation) {
		}
	}

	@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();
	}

}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值