深入学习百度地图Android SDK v4.0.0【第六关】室内地图

百度地图居然推出了室内地图,那不是可以看看女神的家。你想多了,目前室内地图只支持大型购物商场,机场,火车站,医院等,覆盖了全国大概600个大型购物中心,继续增加中。目前用处不大,但也不错啊,去一些商场逛,妈妈再也不用担心我找不到厕所啦!

package cq.cake.chwl.ui;

import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapBaseIndoorMapInfo;
import com.baidu.mapapi.map.MapBaseIndoorMapInfo.SwitchFloorError;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.model.LatLng;

import java.util.ArrayList;

import cq.cake.base.BaseToolbarMapActivity;
import cq.cake.chwl.R;
import cq.cake.util.L;
import cq.cake.util.T;

/**
 * 自v4.0版起,百度地图SDK室内图功能正式上线,辅助开发者实现全新的地理位置服务体验,室内地图与百度地图App同步更新。
 支持的公众建筑包含购物【商场】、【机场】和【火车站】等交通枢纽,【医院】等,覆盖全国约600个大型购物中心,覆盖类型和城市还在持续增加中。
 仅室内图区域与显示屏幕有交集时,最大支持22级地图缩放;室内图区域与显示屏幕无交集时,基础地图支持最大缩放到21级。
 注意:因路况、卫星图仅支持20级地图数据显示,室内地图放大到22级,打开路况、卫星图可能无相应数据显示。
 此功能位于 “基础地图(Map)”这个功能模块,开发者使用时请注意选择。
 */
public class IndoorActivity extends BaseToolbarMapActivity {

    private boolean isHaveFloor;
    private ListAdapter adapter;
    ArrayList<String> floors;
    public MapBaseIndoorMapInfo indoorMapInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_indoor);
        init();
    }

    private void init() {

        LatLng centerpos = new LatLng(29.563757, 106.466343); // 北京南站
        MapStatus.Builder builder = new MapStatus.Builder();
        builder.target(centerpos).zoom(19.0f);
        mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

        mBaiduMap.setIndoorEnable(true);// 打开室内图
        mBaiduMap.setOnBaseIndoorMapListener(new BaiduMap.OnBaseIndoorMapListener() {

            @Override
            public void onBaseIndoorMapMode(boolean b, MapBaseIndoorMapInfo mapBaseIndoorMapInfo) {
                if (b) {
                    L.i("进入室内图");
                    indoorMapInfo = mapBaseIndoorMapInfo;
                    // 进入室内图
                    // 通过获取回调参数 mapBaseIndoorMapInfo 来获取室内图信息,包含楼层信息,室内ID等
                    floors = mapBaseIndoorMapInfo.getFloors();
                    if (floors!=null&&floors.size()>0){
                        isHaveFloor = true;
                        adapter = new ArrayAdapter<String>(IndoorActivity.this,R.layout.item_floors,floors);
                    }else {
                        isHaveFloor = false;
                    }


                } else {
                    L.i("移除室内图");
                    isHaveFloor = false;
                }
            }
        });

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        switch (itemId){
            case R.id.menu1:
                if (isHaveFloor){
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            L.i(floors.get(which)+"楼");
                            switchFloor(floors.get(which));
                        }
                    });
                    builder.show();
                }else{
                    T.showLong(this,"暂无楼层可供切换");
                }


                break;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_indoor,menu);
        return super.onCreateOptionsMenu(menu);
    }

    public void switchFloor(String floor){
        SwitchFloorError switchFloorError =  mBaiduMap.switchBaseIndoorMapFloor(floor, indoorMapInfo.getID()); // 切换楼层信息
        switch (switchFloorError) {
            case SWITCH_OK:
                T.showLong(IndoorActivity.this,"切换成功到【"+floor+"】");
                break;
            case FLOOR_INFO_ERROR:
                T.showLong(IndoorActivity.this,"室内ID信息错误");
                break;
            case FLOOR_OVERLFLOW:
                T.showLong(IndoorActivity.this,"切换楼层室内ID与当前聚焦室内ID不匹配");
                break;
            case FOCUSED_ID_ERROR:
                T.showLong(IndoorActivity.this,"切换楼层室内ID与当前聚焦室内ID不匹配");
                break;
            case SWITCH_ERROR:
                T.showLong(IndoorActivity.this,"切换楼层错误");
                break;
            default:
                break;
        }
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值