package baidumapsdk.demo.search;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapBaseIndoorMapInfo;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.overlayutil.IndoorPoiOverlay;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiIndoorInfo;
import com.baidu.mapapi.search.poi.PoiIndoorOption;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
import baidumapsdk.demo.indoorview.BaseStripAdapter;
import baidumapsdk.demo.indoorview.StripListView;
import baidumapsdk.demo.R;
public class IndoorSearchDemo extends Activity implements OnGetPoiSearchResultListener,
BaiduMap.OnBaseIndoorMapListener {
private MapView mMapView;
private BaiduMap mBaiduMap;
private PoiSearch mPoiSearch = null;
Button searchBtn;
EditText searchContent;
StripListView stripView;
BaseStripAdapter mFloorListAdapter;
MapBaseIndoorMapInfo mMapBaseIndoorMapInfo = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_indoor_search);
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
LatLng centerpos = new LatLng(39.871068, 116.386097); // 北京南站
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(centerpos).zoom(16.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
// stripView = (StripListView) findViewById(R.id.stripView);
stripView = new StripListView(this);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.viewStub);
layout.addView(stripView);
mFloorListAdapter = new BaseStripAdapter(this);
mBaiduMap.setOnBaseIndoorMapListener(this);
mBaiduMap.setIndoorEnable(true); // 设置打开室内图开关
mPoiSearch = PoiSearch.newInstance();
mPoiSearch.setOnGetPoiSearchResultListener(this);
searchContent = (EditText) findViewById(R.id.content);
searchBtn = (Button) findViewById(R.id.indoorSearch);
searchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MapBaseIndoorMapInfo indoorInfo = mBaiduMap.getFocusedBaseIndoorMapInfo();
if (indoorInfo == null) {
Toast.makeText(IndoorSearchDemo.this, "当前无室内图,无法搜索" , Toast.LENGTH_LONG).show();
return;
}
PoiIndoorOption option = new PoiIndoorOption().poiIndoorBid(
indoorInfo.getID()).poiIndoorWd(searchContent.getText().toString());
mPoiSearch.searchPoiIndoor( option);
}
});
stripView.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();
}
});
}
@Override
public void onGetPoiResult(PoiResult result) {
}
@Override
public void onGetPoiDetailResult(PoiDetailResult result) {
}
/**
* 获取室内图搜索结果,得到searchPoiIndoor返回的结果
* @param result
*/
@Override
public void onGetPoiIndoorResult(PoiIndoorResult result) {
mBaiduMap.clear();
if (result == null || result.error == PoiIndoorResult.ERRORNO.RESULT_NOT_FOUND) {
Toast.makeText(IndoorSearchDemo.this, "无结果" , Toast.LENGTH_LONG).show();
return;
}
if (result.error == PoiIndoorResult.ERRORNO.NO_ERROR) {
IndoorPoiOverlay overlay = new MyIndoorPoiOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result);
overlay.addToMap();
overlay.zoomToSpan();
}
}
@Override
public void onBaseIndoorMapMode(boolean b, MapBaseIndoorMapInfo mapBaseIndoorMapInfo) {
if (b) {
stripView.setVisibility(View.VISIBLE);
if (mapBaseIndoorMapInfo == null) {
return;
}
mFloorListAdapter.setmFloorList(mapBaseIndoorMapInfo.getFloors());
stripView.setStripAdapter(mFloorListAdapter);
} else {
stripView.setVisibility(View.GONE);
}
mMapBaseIndoorMapInfo = mapBaseIndoorMapInfo;
}
private class MyIndoorPoiOverlay extends IndoorPoiOverlay {
/**
* 构造函数
*
* @param baiduMap 该 IndoorPoiOverlay 引用的 BaiduMap 对象
*/
public MyIndoorPoiOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
/**
* 响应点击室内POI点事件
* @param i
* 被点击的poi在
* {@link com.baidu.mapapi.search.poi.PoiIndoorResult#getmArrayPoiInfo()} } 中的索引
* @return
*/
public boolean onPoiClick(int i) {
PoiIndoorInfo info = getIndoorPoiResult().getmArrayPoiInfo().get(i);
Toast.makeText(IndoorSearchDemo.this, info.name + ",在" + info.floor + "层", Toast.LENGTH_LONG).show();
return false;
}
}
}