Android高德地图开发 地图事件

/**
 * AMapV1地图中简单介绍OnMapClickListener, OnMapLongClickListener,
 * OnCameraChangeListener三种监听器用法
 */

public class EventsActivity extends Activity implements OnMapClickListener,
		OnMapLongClickListener, OnCameraChangeListener {
	private AMap aMap;
	private MapView mapView;
	private TextView mTapTextView;
	private TextView mCameraTextView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.events_activity);
		mapView = (MapView) findViewById(R.id.map);
		mapView.onCreate(savedInstanceState);// 此方法必须重写
		init();
	}

	/**
	 * 初始化AMap对象
	 */
	private void init() {
		if (aMap == null) {
			aMap = mapView.getMap();
			setUpMap();
		}
		mTapTextView = (TextView) findViewById(R.id.tap_text);
		mCameraTextView = (TextView) findViewById(R.id.camera_text);
	}

	/**
	 * amap添加一些事件监听器
	 */
	private void setUpMap() {
		aMap.setOnMapClickListener(this);// 对amap添加单击地图事件监听器
		aMap.setOnMapLongClickListener(this);// 对amap添加长按地图事件监听器
		aMap.setOnCameraChangeListener(this);// 对amap添加移动地图事件监听器
	}

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

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

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

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

	/**
	 * 对单击地图事件回调
	 */
	@Override
	public void onMapClick(LatLng point) {
		mTapTextView.setText("tapped, point=" + point);
	}

	/**
	 * 对长按地图事件回调
	 */
	@Override
	public void onMapLongClick(LatLng point) {
		mTapTextView.setText("long pressed, point=" + point);
	}

	/**
	 * 对正在移动地图事件回调
	 */
	@Override
	public void onCameraChange(CameraPosition cameraPosition) {
		mCameraTextView.setText("onCameraChange:" + cameraPosition.toString());
	}

	/**
	 * 对移动地图结束事件回调
	 */
	@Override
	public void onCameraChangeFinish(CameraPosition cameraPosition) {
		mCameraTextView.setText("onCameraChangeFinish:"
				+ cameraPosition.toString());
		VisibleRegion visibleRegion = aMap.getProjection().getVisibleRegion(); // 获取可视区域、

		LatLngBounds latLngBounds = visibleRegion.latLngBounds;// 获取可视区域的Bounds
		boolean isContain = latLngBounds.contains(Constants.SHANGHAI);// 判断上海经纬度是否包括在当前地图可见区域
		if (isContain) {
			ToastUtil.show(EventsActivity.this, "上海市在地图当前可见区域内");
		} else {
			ToastUtil.show(EventsActivity.this, "上海市超出地图当前可见区域");
		}
	}
}

利用地图的移动事件,可以得到在onCameraChange得到其可视化区域的中心点,minToCenter=comDistance(distances);,将一组地点的经纬度与之比较,得到最靠近的点。

/**
	 * 计算一组数据中的最小
	 * @param distances
	 * @return
	 */
	double comDistance(double[] distances) {
        int size = distances.length;
        for (int a = 1; a < size; a++) {
        	Log.d("hjb 各省距离中心点--", distances[a]+"");
            for (int b = 0; b < size - a; b++) {
                if (distances[b] > distances[b + 1]) {
                	double temp = distances[b];
                	distances[b] = distances[b + 1];
                	distances[b + 1] = temp;
                }
            }
        }
        Log.d("hjb ", "max: " + distances[size-1] + "  min: " + distances[0]);
        return distances[0];
    }

/**
	 * 求出地图上某地与地图可视化区域内中心点的直线距离 ,米
	 * @param city
	 * @return
	 */
	private double distance(LatLng city) {
		// TODO Auto-generated method stub
		// 获取当前地图中心点的坐标
		LatLng mTarget = mAMap.getCameraPosition().target;
	
		Log.d("hjb mTarget--", mTarget.toString());
		Log.d("hjb city--", city.toString());
		Log.d("hjb 距离中心点--", KitLocationUtil.gps2m(mTarget.latitude, mTarget.longitude, city.latitude, city.longitude)+"米");
		return KitLocationUtil.gps2m(mTarget.latitude, mTarget.longitude, city.latitude, city.longitude);
	}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值