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

来源:互联网 发布:益思留学 知乎 编辑:程序博客网 时间:2024/05/29 16:56
两个用户之间,可以实时地查看两个人的相对位置,这就是实时点对点地图。
要实现这种地图,查了一下,没有发现有现成的工具可用,不过百度地图倒是有路线规划功能,可以考虑。这样的话,我们想,通过每隔几秒请求一次两个人的相对位置,然后使用百度地图的路线规划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-ypublic 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.同步显示
@Overrideprotected 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();// handlerinitHandler();// 获取地图控件引用(此处添加到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));}

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


原创粉丝点击