BaiduMap---百度地图官方Demo之热力图功能(介绍如何以热力图形式显示用户自有数据)




    

        


BaiduMap---百度地图官方Demo之热力图功能(介绍如何以热力图形式显示用户自有数据)_第1张图片


package baidumapsdk.demo;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.HeatMap;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;

/**
 * 热力图功能demo
 * 
 * 介绍如何以热力图形形式显示用户自有数据
 */
public class HeatMapDemo extends Activity {
	@SuppressWarnings("unused")
	private static final String LTAG = BaseMapDemo.class.getSimpleName();
	private MapView mMapView;
	private BaiduMap mBaiduMap;
	/**
	 * 热力图瓦片提供者
	 * */
	private HeatMap heatmap;
	private Button mAdd;
	private Button mRemove;
	private boolean isDestroy;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_heatmap);
		
		mMapView = (MapView) findViewById(R.id.mapview);
		mBaiduMap = mMapView.getMap();
		/**
		 * public final void setMapStatus(MapStatusUpdate update)
		 * 改变地图状态
		 * @param update - 地图状态将要发生的变化
		 * 
		 * MapStatusUpdateFactory:生成地图状态将要发生的变化
		 * 
		 * public static MapStatusUpdate zoomTo(float zoom)
		 * 设置地图缩放级别
		 * @param zoom - 地图缩放级别
		 * @return 返回构造的 MapStatusUpdate 对象
		 * */
		mBaiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(5));
		
		mAdd = (Button) findViewById(R.id.add);
		mRemove = (Button) findViewById(R.id.remove);
		mAdd.setEnabled(false);
		mRemove.setEnabled(false);
		
		//添加
		mAdd.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				addHeatMap();
			}
		});
		
		//删除
		mRemove.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				/**
				 * public void removeHeatMap()
				 * 删除该热力图
				 * */
				heatmap.removeHeatMap();
				mAdd.setEnabled(true);
				mRemove.setEnabled(false);
			}
		});
		
		addHeatMap();
	}

	private void addHeatMap() {
		final Handler h = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				if(!isDestroy){
					/**
					 * public void addHeatMap(HeatMap heatmap)
					 * 添加热力图
					 * @param heatmap - 热力图
					 * */
					mBaiduMap.addHeatMap(heatmap);
				}
				mAdd.setEnabled(false);
				mRemove.setEnabled(true);
			}
		};
		
		new Thread() {
			@Override
			public void run() {
				super.run();
				List data = getLocations();
				/**
				 * HeatMap.Builder:热力图构造器
				 * 
				 * public HeatMap.Builder data(java.util.Collection val)
				 * 设置热力图绘制的数据,data 或 weightedData接口必须设置其中之一
				 * @param val - 热力图绘制数据,不能为null,大小不能为 0
				 * @return 更新后的热力图瓦片提供者构造器引用
				 * 
				 * public HeatMap build()
				 * 构造热力图,调用该函数之前必须先通过 data 或者 weightedData 函数设置该热力图所要渲染的数据。
				 * build过程在数据量(位置点)比较多的时候比较耗时,
				 * 该操作可以放到一个工作线程中去做,待工作线程执行完再在 UI 线程中调用 
				 * BaiduMap 的 addHeatMap 接口添加热力图。
				 * 若数据量很小,该操作可以在 UI 线程中执行。
				 * 
				 * @return 构造好的热力图瓦片提供者
				 * */
				heatmap = new HeatMap.Builder().data(data).build();
				h.sendEmptyMessage(0);
			}
		}.start();
	}

	@Override
	protected void onPause() {
		super.onPause();
		// activity 暂停时同时暂停地图控件
		mMapView.onPause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		// activity 恢复时同时恢复地图控件
		mMapView.onResume();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		isDestroy = true;
		// activity 销毁时同时销毁地图控件
		mMapView.onDestroy();
	}

	private List getLocations() {
		List list = new ArrayList();
		InputStream inputStream = getResources().openRawResource(R.raw.locations);
		String json = new Scanner(inputStream).useDelimiter("\\A").next();
		JSONArray array;
		try {
			array = new JSONArray(json);
			for (int i = 0; i < array.length(); i++) {
				JSONObject object = array.getJSONObject(i);
				double lat = object.getDouble("lat");
				double lng = object.getDouble("lng");
				list.add(new LatLng(lat, lng));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

}


你可能感兴趣的:(Android百度地图)