项目实训-千寻-实时点对点地图

两个用户之间,可以实时地查看两个人的相对位置,这就是实时点对点地图。
要实现这种地图,查了一下,没有发现有现成的工具可用,不过百度地图倒是有路线规划功能,可以考虑。这样的话,我们想,通过每隔几秒请求一次两个人的相对位置,然后使用百度地图的路线规划API,就可以做出两个人之间的实时点对点地图了。
每隔几秒请求一次,这样对于服务器的压力是很大的,因此我们想到了使用第三方即时通讯的方式。两个人通过即时通讯平台发送位置信息,从而缓解了我们的服务器压力,而且也有着非常高的稳定性,一举多得。


实现过程简介:
1.定义前缀常量
public static final String MSG_HIDE_HEAD = "×_";// 所有隐藏头相关的起始标志(乘号,下划线)
public static final String MSG_SHOW_HEAD = "_×";// 所有隐藏头相关的起始标志(乘号,下划线)
public static final String MSG_HIDE_NULL = MSG_HIDE_HEAD + "  ";//NULL:+两个全角空格
public static final String MSG_MAP_SHOW = MSG_SHOW_HEAD+"show";// 消息中的地图显示
public static final String MSG_MAP_SPLIT = "-";// 地图的分隔符
public static final String MSG_MAP_REQUEST = MSG_HIDE_HEAD + "map_request_start";
public static final String MSG_MAP_REQUEST_STOP = MSG_HIDE_HEAD
		+ "map_request_stop";
public static final String MSG_MAP_REJECT = MSG_HIDE_HEAD + "map_reject";
public static final String MSG_MAP_ONETIME = MSG_HIDE_HEAD + "map_onetime";// +x-y
public static final String MSG_MAP_START = MSG_HIDE_HEAD + "map_start";
public static final String MSG_MAP_RECEIVE = MSG_HIDE_HEAD + "map_receive";
public static final String MSG_MAP_REALTIME = MSG_HIDE_HEAD + "map_realtime";// +x-y

2.双方确认
实时地图是需要双方同时确认的,因为他是敏感位置信息的传输。
public MapReceiveDialog(Context context) {
	super(context, "点对点地图");
	setText("\n对方发起点对点地图。\n是否同意对方获取您的位置?\n");
	setPositiveButton("允许", null);// 此处null即可
	setNegativeButton("拒绝", new DialogButtonListener() {
		public void onButtonClick() {
			cancelDialog();
		}
	});
	setCancelable(false);// 就放在这里
}

3.同步显示
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	// 无标题栏
	requestWindowFeature(Window.FEATURE_NO_TITLE);
	// 布局
	setContentView(R.layout.dialog_map_show);
	TextView tv_title = ((TextView) findViewById(R.id.top_text));
	tv_title.setText("点对点地图");
	showBackButton();
	// handler
	initHandler();
	// 获取地图控件引用(此处添加到xml中会报错)
	mMapView = new MapView(activity);
	mMapView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
			LayoutParams.MATCH_PARENT));
	((LinearLayout) findViewById(R.id.dia_map_show_layout))
			.addView(mMapView);
	mBaidumap = mMapView.getMap();
	// 显示指南针控件(此处必须先false再true)
	UiSettings mUiSettings = mBaidumap.getUiSettings();
	mUiSettings.setCompassEnabled(false);
	mUiSettings.setCompassEnabled(true);


	// 实时刷新显示用户位置
	update_running = true;
	startUpdateThread();
}
private void showMyLocation(double my_x, double my_y, float limit) {
	// 显示定位
	mBaidumap.setMyLocationEnabled(true);
	MyLocationData locData = new MyLocationData.Builder().accuracy(limit)
			.direction(100).latitude(my_y).longitude(my_x).build();
	mBaidumap.setMyLocationData(locData);
	// 设置为中心点
	mBaidumap.setMapStatus(MapStatusUpdateFactory
			.newMapStatus(new MapStatus.Builder().zoom(17.0f).build()));
	LatLng latlng = new LatLng(my_y, my_x);
	mBaidumap.animateMapStatus(MapStatusUpdateFactory.newLatLng(latlng));
}

以上即为实现的基本过程。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值