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

本文介绍如何利用百度地图API及即时通讯平台实现实时点对点地图功能。通过定时请求位置信息并展示,实现了用户间的实时位置共享。文章详细讲解了实现步骤和技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个用户之间,可以实时地查看两个人的相对位置,这就是实时点对点地图。
要实现这种地图,查了一下,没有发现有现成的工具可用,不过百度地图倒是有路线规划功能,可以考虑。这样的话,我们想,通过每隔几秒请求一次两个人的相对位置,然后使用百度地图的路线规划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));
}

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

 

转载于:https://my.oschina.net/yslf/blog/967969

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值