百度地图居然推出了室内地图,那不是可以看看女神的家。你想多了,目前室内地图只支持大型购物商场,机场,火车站,医院等,覆盖了全国大概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;
}
}
}