BaiduMap---百度地图官方Demo之公交线路查询功能(介绍查询公交线路功能)
2015-07-02 11:54
621 查看
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="在" /> <EditText android:id="@+id/city" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="北京" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="市内找" /> <EditText android:id="@+id/searchkey" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="717" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="公交车" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/search" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:layout_weight="1" android:background="@drawable/button_style" android:onClick="searchButtonProcess" android:text="开始" /> <Button android:id="@+id/nextline" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:layout_weight="1" android:background="@drawable/button_style" android:onClick="SearchNextBusline" android:text="下一条" /> </LinearLayout> </LinearLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <fragment android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" class="com.baidu.mapapi.map.SupportMapFragment" android:clickable="true" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignWithParentIfMissing="false" android:layout_centerHorizontal="true" android:layout_centerVertical="false" android:layout_marginBottom="10dip" > <Button android:id="@+id/pre" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:layout_weight="1.0" android:background="@drawable/pre_" android:onClick="nodeClick" /> <Button android:id="@+id/next" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:layout_weight="1.0" android:background="@drawable/next_" android:onClick="nodeClick" /> </LinearLayout> </RelativeLayout> </LinearLayout>
package baidumapsdk.demo; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; 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.MapPoi; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.SupportMapFragment; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.overlayutil.BusLineOverlay; import com.baidu.mapapi.search.busline.BusLineResult; import com.baidu.mapapi.search.busline.BusLineSearch; import com.baidu.mapapi.search.busline.BusLineSearchOption; import com.baidu.mapapi.search.busline.OnGetBusLineSearchResultListener; import com.baidu.mapapi.search.core.PoiInfo; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener; import com.baidu.mapapi.search.poi.PoiCitySearchOption; import com.baidu.mapapi.search.poi.PoiDetailResult; import com.baidu.mapapi.search.poi.PoiResult; import com.baidu.mapapi.search.poi.PoiSearch; /** * 此demo用来展示如何进行公交线路详情检索,并使用RouteOverlay在地图上绘制 同时展示如何浏览路线节点并弹出泡泡 * * 介绍查询公交线路功能 */ public class BusLineSearchDemo extends FragmentActivity implements OnGetPoiSearchResultListener, OnGetBusLineSearchResultListener, BaiduMap.OnMapClickListener { private Button mBtnPre = null;// 上一个节点 private Button mBtnNext = null;// 下一个节点 private int nodeIndex = -2;// 节点索引,供浏览节点时使用 /** * 公共交通信息查询结果 * */ private BusLineResult route = null;// 保存驾车/步行路线数据的变量,供浏览节点时使用 private List<String> busLineIDList = null; private int busLineIndex = 0; /** * POI检索接口 * */ private PoiSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用 /** * 城市公交信息(包含地铁信息)查询,该接口用于查询整条公交线路信息 * 公交换乘路线查询请参看 RoutePlanSearch * */ private BusLineSearch mBusLineSearch = null; private BaiduMap mBaiduMap = null; /** * 用于显示一条公交详情结果的Overlay * */ BusLineOverlay overlay;//公交路线绘制对象 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_busline); CharSequence titleLable = "公交线路查询功能"; setTitle(titleLable); mBtnPre = (Button) findViewById(R.id.pre); mBtnNext = (Button) findViewById(R.id.next); mBtnPre.setVisibility(View.INVISIBLE); mBtnNext.setVisibility(View.INVISIBLE); mBaiduMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.bmapView)).getBaiduMap(); /** * public final void setOnMapClickListener(BaiduMap.OnMapClickListener listener) * 设置地图单击事件监听者 * @param listener - 地图单击事件监听者 * 需要实现BaiduMap.OnMapClickListener接口的 * onMapClick(LatLng point)和onMapPoiClick(MapPoi poi)方法 * */ mBaiduMap.setOnMapClickListener(this); /** * public static PoiSearch newInstance() * 创建PoiSearch实例 * @return PoiSearch实例 * */ mSearch = PoiSearch.newInstance(); /** * public void setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener listener) * 设置poi检索监听者 * @param listener - 监听者 * 需要实现onGetPoiDetailResult(PoiDetailResult result)和 onGetPoiResult(PoiResult result)方法 * */ mSearch.setOnGetPoiSearchResultListener(this); /** * public static BusLineSearch newInstance() * 获取一个新的检索实例 * @param 检索实例 * */ mBusLineSearch = BusLineSearch.newInstance(); /** * public void setOnGetBusLineSearchResultListener(OnGetBusLineSearchResultListener listener) * 设置公交详情检索结果监听者 * @param listener - 公交详情检索结果监听者 * * 需要实现OnGetBusLineSearchResultListener接口的 onGetBusLineResult方法 * */ mBusLineSearch.setOnGetBusLineSearchResultListener(this); busLineIDList = new ArrayList<String>(); /** * public BusLineOverlay(BaiduMap baiduMap) * 构造函数 * @param baiduMap - 该BusLineOverlay所引用的 BaiduMap 对象 * */ overlay = new BusLineOverlay(mBaiduMap); /** * 设置地图 Marker 覆盖物点击事件监听者 * */ mBaiduMap.setOnMarkerClickListener(overlay); } /** * 开始查询按钮点击事件 * 发起检索 * * @param v */ public void searchButtonProcess(View v) { busLineIDList.clear(); busLineIndex = 0; mBtnPre.setVisibility(View.INVISIBLE); mBtnNext.setVisibility(View.INVISIBLE); EditText editCity = (EditText) findViewById(R.id.city); EditText editSearchKey = (EditText) findViewById(R.id.searchkey); //发起poi检索,从得到所有poi中找到公交线路类型的poi,再使用该poi的uid进行公交详情搜索 /** * public boolean searchInCity(PoiCitySearchOption option) * 城市内检索 * @param option - 请求参数 * @return 成功发起检索返回true , 失败返回false * * public PoiCitySearchOption city(java.lang.String city) * 检索城市 * @param city - 检索城市 * @return 该poi城市内检索参数对象 * * public PoiCitySearchOption keyword(java.lang.String key) * 搜索关键字 * @param key - 搜索关键字 * @return 该poi城市内检索参数对象 * */ mSearch.searchInCity((new PoiCitySearchOption()) .city(editCity.getText().toString()) .keyword(editSearchKey.getText().toString())); } /** * 下一条按钮点击事件 * */ public void SearchNextBusline(View v) { if (busLineIndex >= busLineIDList.size()) { busLineIndex = 0; } if (busLineIndex >= 0 && busLineIndex < busLineIDList.size() && busLineIDList.size() > 0) { /** * public boolean searchBusLine(BusLineSearchOption option) * 公交检索入口 * @param option - 请求参数 * @return 成功发起检索返回true , 失败返回false* * */ /** * BusLineSearchOption:城市公交信息查询参数 * * public BusLineSearchOption city(java.lang.String city) * 设置查询城市 * @param city - 查询城市 * @return 该公交信息查询参数对象 * * public BusLineSearchOption uid(java.lang.String uid) * 设置公交路线uid. * @param uid - uid 可以由poi检索时传入公交路线关键字得到 * @return 该公交信息查询参数对象 * */ mBusLineSearch.searchBusLine((new BusLineSearchOption() .city(((EditText) findViewById(R.id.city)).getText().toString()) .uid(busLineIDList.get(busLineIndex)))); busLineIndex++; } } /** * 节点浏览示例 * * @param v */ public void nodeClick(View v) { if (nodeIndex < -1 || route == null || nodeIndex >= route.getStations().size()) return; TextView popupText = new TextView(this); popupText.setBackgroundResource(R.drawable.popup); popupText.setTextColor(0xff000000); // 上一个节点 if (mBtnPre.equals(v) && nodeIndex > 0) { // 索引减 nodeIndex--; } // 下一个节点 if (mBtnNext.equals(v) && nodeIndex < (route.getStations().size() - 1)) { // 索引加 nodeIndex++; } if(nodeIndex >= 0){ // 移动到指定索引的坐标 mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(route .getStations().get(nodeIndex).getLocation())); // 弹出泡泡 popupText.setText(route.getStations().get(nodeIndex).getTitle()); mBaiduMap.showInfoWindow(new InfoWindow(popupText, route.getStations() .get(nodeIndex).getLocation(), 0)); } } @Override protected void onPause() { super.onPause(); } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { /** * 释放检索对象 * */ mSearch.destroy(); /** * 释放检索对象资源 * */ mBusLineSearch.destroy(); super.onDestroy(); } //////////////////OnGetBusLineSearchResultListener//////////////////// @Override public void onGetBusLineResult(BusLineResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(BusLineSearchDemo.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show(); return; } mBaiduMap.clear(); route = result; nodeIndex = -1; /** * OverlayManager: * removeFromMap():将所有Overlay从 地图上消除 * */ overlay.removeFromMap(); /** * public void setData(BusLineResult result) * 设置公交线数据 * @param result - 公交线路结果数据 * */ overlay.setData(result); /** * public final void addToMap() * 将所有Overlay 添加到地图上 * */ overlay.addToMap(); /** * public void zoomToSpan() * 缩放地图,使所有Overlay都在合适的视野内 * 注: 该方法只对Marker类型的overlay有效 * */ overlay.zoomToSpan(); mBtnPre.setVisibility(View.VISIBLE); mBtnNext.setVisibility(View.VISIBLE); Toast.makeText(BusLineSearchDemo.this, result.getBusLineName(), Toast.LENGTH_SHORT).show(); } //////////////////////OnGetPoiSearchResultListener//////////////////////// @Override public void onGetPoiResult(PoiResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(BusLineSearchDemo.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show(); return; } // 遍历所有poi,找到类型为公交线路的poi busLineIDList.clear(); /** *public java.util.List<PoiInfo> getAllPoi() *获取Poi检索结果 *@return Poi检索结果 **/ for (PoiInfo poi : result.getAllPoi()) { /** * public PoiInfo.POITYPE type * poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路, * */ if (poi.type == PoiInfo.POITYPE.BUS_LINE || poi.type == PoiInfo.POITYPE.SUBWAY_LINE) { /** * poi id 如果为isPano为true,可用此参数调用街景组件PanoramaService类的 * requestPanoramaWithPoiUId方法检索街景数据 * */ busLineIDList.add(poi.uid); } } SearchNextBusline(null); route = null; } @Override public void onGetPoiDetailResult(PoiDetailResult result) { } //////////////BaiduMap.OnMapClickListener//////////////// @Override public void onMapClick(LatLng point) { /** * 隐藏当前 InfoWindow * */ mBaiduMap.hideInfoWindow(); } @Override public boolean onMapPoiClick(MapPoi poi) { return false; } }
相关文章推荐
- baidu map,百度地图,轨迹播放
- BaiduMap---百度地图官方Demo之路径规划功能(介绍公交,驾车和步行三种线路规划方法和自设路线方法)
- BaiduMap---百度地图官方Demo之地理编码功能(介绍地址信息和坐标之间的相互转换)
- BaiduMap---百度地图官方Demo之POI搜索功能(介绍关键词查询,suggestion查询和查看餐饮类Place详情页功能)
- Xamairn中MessagingCenter
- 向Genymotion中添加文件时出现 Failed to push the item(s).错误
- BaiduMap---百度地图官方Demo之离线地图功能(介绍如何下载和使用离线地图)
- BaiduMap---百度地图官方Demo之覆盖物功能(介绍添加覆盖物并响应点击功能和弹出pop功能)
- BaiduMap---百度地图官方Demo之自定义绘制功能(介绍自定义绘制点,线,多边形,园等几何图形和文字)
- BaiduMap---百度地图官方Demo之定位图层展示(介绍定位图层的基本用法)
- LeetCode:Factorial Trailing Zeroes
- Air始终保持应用全屏的方法
- BaiduMap---百度地图官方Demo之地图操作功能(介绍地图基本控制方法)
- Waiting For Debugger
- 安装apk提示Install_failed_invalid_UR解决办法
- 概率机器学习和人工智能(Probabilistic machine learning and artificial intelligence_Nature2015)
- BaiduMap---百度地图官方Demo之图层展示(展示普通图,卫星图,交通流量图及百度城市热力图)
- leetCode(28):Contains Duplicate II
- leetCode(28):Contains Duplicate II 分类: leetCode 2015-07-02 09:08 145人阅读 评论(0) 收藏
- Climbing Stairs