package baidumapsdk.demo.map;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapBaseIndoorMapInfo;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.overlayutil.IndoorRouteOverlay;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.route.BikingRouteResult;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.IndoorPlanNode;
import com.baidu.mapapi.search.route.IndoorRouteLine;
import com.baidu.mapapi.search.route.IndoorRoutePlanOption;
import com.baidu.mapapi.search.route.IndoorRouteResult;
import com.baidu.mapapi.search.route.MassTransitRouteResult;
import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
import com.baidu.mapapi.search.route.RoutePlanSearch;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteResult;
import baidumapsdk.demo.indoorview.BaseStripAdapter;
import baidumapsdk.demo.indoorview.StripListView;
import baidumapsdk.demo.R;
public class IndoorMapDemo extends Activity implements OnGetRoutePlanResultListener {
private MapView mMapView;
private BaiduMap mBaiduMap;
Button isIndoorBtn;
Boolean isIndoor = true;
StripListView stripListView;
BaseStripAdapter mFloorListAdapter;
MapBaseIndoorMapInfo mMapBaseIndoorMapInfo = null;
RoutePlanSearch mSearch;
IndoorRouteLine mIndoorRouteline;
int nodeIndex = -1;
private TextView popupText = null; // 泡泡view
Button mBtnPre = null; // 上一个节点
Button mBtnNext = null; // 下一个节点
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout layout = new RelativeLayout(this);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View mainview = inflater.inflate(R.layout.activity_indoor, null);
layout.addView(mainview);
mMapView = (MapView) mainview.findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
LatLng centerpos = new LatLng(39.916958, 116.379278); // 西单大悦城
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(centerpos).zoom(19.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
mBaiduMap.setIndoorEnable(true);
mSearch = RoutePlanSearch.newInstance();
mSearch.setOnGetRoutePlanResultListener(this);
isIndoorBtn = (Button) mainview.findViewById(R.id.isIndoor);
isIndoorBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isIndoor) {
mBaiduMap.setIndoorEnable(true);
isIndoorBtn.setText("关闭室内图");
Toast.makeText(IndoorMapDemo.this, "室内图打开", Toast.LENGTH_LONG).show();
} else {
mBaiduMap.setIndoorEnable(false);
isIndoorBtn.setText("打开室内图");
Toast.makeText(IndoorMapDemo.this, "室内图关闭", Toast.LENGTH_LONG).show();
}
isIndoor = !isIndoor;
}
});
mainview.findViewById(R.id.indoorRoutePlane).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
// 发起室内路线规划检索
IndoorPlanNode startNode = new IndoorPlanNode(new LatLng(39.917380, 116.37978), "F1");
IndoorPlanNode endNode = new IndoorPlanNode(new LatLng(39.917239, 116.37955), "F6");
IndoorRoutePlanOption irpo = new IndoorRoutePlanOption().from(startNode).to(endNode);
mSearch.walkingIndoorSearch(irpo);
}
});
stripListView = new StripListView(this);
layout.addView( stripListView );
setContentView(layout);
mFloorListAdapter = new BaseStripAdapter(IndoorMapDemo.this);
mBaiduMap.setOnBaseIndoorMapListener(new BaiduMap.OnBaseIndoorMapListener() {
@Override
public void onBaseIndoorMapMode(boolean b, MapBaseIndoorMapInfo mapBaseIndoorMapInfo) {
if (b == false || mapBaseIndoorMapInfo == null) {
stripListView.setVisibility(View.INVISIBLE);
return;
}
mFloorListAdapter.setmFloorList( mapBaseIndoorMapInfo.getFloors());
stripListView.setVisibility(View.VISIBLE);
stripListView.setStripAdapter(mFloorListAdapter);
mMapBaseIndoorMapInfo = mapBaseIndoorMapInfo;
}
});
stripListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (mMapBaseIndoorMapInfo == null) {
return;
}
String floor = (String) mFloorListAdapter.getItem(position);
mBaiduMap.switchBaseIndoorMapFloor(floor, mMapBaseIndoorMapInfo.getID());
mFloorListAdapter.setSelectedPostion(position);
mFloorListAdapter.notifyDataSetInvalidated();
}
});
mBtnPre = (Button) findViewById(R.id.pre);
mBtnNext = (Button) findViewById(R.id.next);
mBtnPre.setVisibility(View.INVISIBLE);
mBtnNext.setVisibility(View.INVISIBLE);
}
@Override
public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {
}
@Override
public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {
}
@Override
public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
}
@Override
public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {
if ( indoorRouteResult.error == SearchResult.ERRORNO.NO_ERROR ) {
IndoorRouteOverlay overlay = new IndoorRouteOverlay(mBaiduMap);
mIndoorRouteline = indoorRouteResult.getRouteLines().get(0);
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
overlay.setData(indoorRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
@Override
public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {
}
@Override
protected void onPause() {
mMapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
mMapView.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
mMapView.onDestroy();
mSearch.destroy();
super.onDestroy();
}
/**
* 节点浏览示例
*
* @param v
*/
public void nodeClick(View v) {
LatLng nodeLocation = null;
String nodeTitle = null;
IndoorRouteLine.IndoorRouteStep step = null;
if (mIndoorRouteline == null || mIndoorRouteline.getAllStep() == null) {
return;
}
if (nodeIndex == -1 && v.getId() == R.id.pre) {
return;
}
// 设置节点索引
if (v.getId() == R.id.next) {
if (nodeIndex < mIndoorRouteline.getAllStep().size() - 1) {
nodeIndex++;
} else {
return;
}
} else if (v.getId() == R.id.pre) {
if (nodeIndex > 0) {
nodeIndex--;
} else {
return;
}
}
// 获取节结果信息
step = mIndoorRouteline.getAllStep().get(nodeIndex);
nodeLocation = step.getEntrace().getLocation();
nodeTitle = step.getInstructions();
if (nodeLocation == null || nodeTitle == null) {
return;
}
// 移动节点至中心
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation));
// show popup
popupText = new TextView(IndoorMapDemo.this);
popupText.setBackgroundResource(R.drawable.popup);
popupText.setTextColor(0xFF000000);
popupText.setText(step.getFloorId() + ":" + nodeTitle);
mBaiduMap.showInfoWindow(new InfoWindow(popupText, nodeLocation, 0));
// 让楼层对应变化
mBaiduMap.switchBaseIndoorMapFloor(step.getFloorId(), mMapBaseIndoorMapInfo.getID());
// mFloorListAdapter.setSelectedPostion();
mFloorListAdapter.notifyDataSetInvalidated();
}
}