在我大学毕业之前,我的大学毕业设计是基于Android的公交路线查询系统。该系统提供了公交线路、站点和换乘的查询。本项目采用的是sqllite的离线本地数据库的查询,这样不受手机网络的影响,手机在没有无线网络的环境下也可以查询公交信息。具体完成的功能如下:
1、线路查询
系统提供线路模糊查询功能,通过输入线路关键字,系统自动匹配得到存在的线路列表,用户再选择某一条线路查询其详细的信息;
2、站点查询
系统提站点名称模糊查询功能,通过输入站点名称关键字,系统自动匹配得到存在的站点列表,用户再选择某一个站点查询该站点的详细细的信息,包括经过该站点的所有公交线路;
3、地图模块
采用的是百度的免费地图模块,可以在地图中显示一条线路的行车轨迹以及该线路经过的所有站点,点击某一站点可以查看该站点的详细信息,还可根据用户位置自动定位,并显示附近的所有公交站点;
4、换乘查询
可以查询一个站点到另外一个站点的直达或换乘方案;整个系统的整体功能框架。
下面我将具体关键代码细节跟大家做一个分享,希望大家对移动端的开发,特别是基于地图功能的路线查询功能有所帮助。
(1)百度定位功能代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
db = new BusDatabaseHelper(BusBaiduMapActivity.this);
app = (com.miebo.android.bus.activity.CommonApplication) this.getApplication();
if (app.mBMapManager == null) {
app.mBMapManager = new BMapManager(this);
app.mBMapManager.init(com.miebo.android.bus.activity.CommonApplication.strKeyBaiduMap, null);
}
// 由于MapView在setContentView()中初始化,所以它需要在BMapManager初始化之后
setContentView(R.layout.bus_baidu_map);
toastUtil = new ToastUtil(this);
mMapView = (MapView) findViewById(R.id.bmapView);
mMapView.setBackgroundColor(getResources().getColor(R.color.transparent));
mMapController = mMapView.getController();
mMapController.enableClick(true);
mMapController.setZoom(curZoom);
mMapView.setBuiltInZoomControls(true);
this.intent = getIntent();
this.findview();
if ("line".equals(getIntent().getStringExtra("from"))) {
// 来着绘制线路请求
busw = getIntent().getStringExtra("busw");
xid = getIntent().getStringExtra("xid");
tvMyLocation.setText(busw + "线路图");
MKsearchBus();
} else {
// 定位并显示附近站点
dialog = ProgressDialog.show(this, "定位中...", "");
markerCenter = getResources().getDrawable(R.drawable.icon_marka);
setLocationOption();
}
}
(2)根据我当前的位置,开始处理定位结果
private void dealLocation(BDLocation location) {
mLon1 = location.getLongitude();
mLat1 = location.getLatitude();
accuracy = location.getRadius();
address = location.getAddrStr();
tvMyLocation.setText("我的位置:" + address);
curPt = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6));
mMapController.setCenter(curPt);
myLocationOverlay = new MyLocationOverlay(mMapView);
// 开启磁场感应传感器
myLocationOverlay.enableCompass();
LocationData locData = new LocationData();
locData.latitude = mLat1;
locData.longitude = mLon1;
locData.accuracy = accuracy;
myLocationOverlay.setData(locData);
mMapView.getOverlays().add(myLocationOverlay);
mMapView.refresh();
new loadPointAsyncTask().execute();
}
(3)地图中心位置的绘制:
protected String doInBackground(String... params) {
GeoPoint geoCenter = mMapView.getMapCenter();// 地图中心点
BaseUtil.LogII("geoCenter.getLatitudeE6() " + geoCenter.getLatitudeE6());
goLeftTop = new GeoPoint(geoCenter.getLatitudeE6() + 10000, geoCenter.getLongitudeE6() - 10000);
goLeftBottom = new GeoPoint(geoCenter.getLatitudeE6() - 10000, geoCenter.getLongitudeE6() - 10000);
goRightTop = new GeoPoint(geoCenter.getLatitudeE6() + 10000, geoCenter.getLongitudeE6() + 10000);
goRightBottom = new GeoPoint(geoCenter.getLatitudeE6() - 10000, geoCenter.getLongitudeE6() + 10000);
stationList = db.getAllStationByGeoPoint(goLeftTop.getLongitudeE6(), goRightTop.getLongitudeE6(),
goLeftTop.getLatitudeE6(), goLeftBottom.getLatitudeE6());
GeoList = new ArrayList<OverlayItem>();
list = new ArrayList<BusBaiduMapActivity.CityObject>();
if (stationList.size() > 0) {
for (int i = 0; i < stationList.size(); i++) {
double geoX = Double.valueOf(stationList.get(i).getXzhanbd());
double geoY = Double.valueOf(stationList.get(i).getYzhanbd());
int geoXX = (int) (geoX * 1E6);
int geoYY = (int) (geoY * 1E6);
GeoPoint geoPoint = new GeoPoint(geoYY, geoXX);
OverlayItem item = new OverlayItem(geoPoint, "", "");
item.setMarker(markerCenter);
GeoList.add(item);
BusBaiduMapActivity.CityObject cityObject = new BusBaiduMapActivity.CityObject();
cityObject.setLat(geoY);
cityObject.setLng(geoX);
cityObject.setName(stationList.get(i).getZhan());
list.add(cityObject);
}
}
return null;
}
(4)在地图上绘制公交点位:
// 绘制附近车站
private void drawNearOverlay() {
OverlayTest itemOverlay = new OverlayTest(markerCenter, mMapView);
for (int i = 0; i < list.size(); i++) {
BaseUtil.LogII((int) (list.get(i).getLat() * 1E6));
GeoPoint geo = new GeoPoint((int) (list.get(i).getLat() * 1E6), (int) (list.get(i).getLng() * 1E6));
OverlayItem item2 = new OverlayItem(geo, list.get(i).getName(), list.get(i).getName());
item2.setMarker(markerCenter);
item2.setTitle(list.get(i).getName());
itemOverlay.addItem(item2);
}
// 清除旧的 Overlay
mMapView.getOverlays().clear();
// 刷新地图
mMapView.getOverlays().add(myLocationOverlay);
if (list.size() > 0) {
mMapView.getOverlays().add(itemOverlay);
mMapView.refresh();
mMapController.setZoom(curZoom);
toastUtil.show("在附近查到 " + list.size() + "个站点");
}
}
系统的界面效果如下图:
相关推荐
基于Android的公交查询系统是一款方便、快捷的公交信息查询应用程序,它可以帮助用户轻松地查询公交线路、站点、车辆到站时间等信息,让用户更方便地规划出行路线。 该应用程序具有以下主要功能: 公交线路查询:...
开发基于Android平台采用Java语言和安卓自带的XML (Extensible Markup Language)布局编写的广州交通线路手机查询的应用,完成了公交、地铁价格、地图的查询及定位的功能。本文将对百度地图API的基本类进行分析,提出...
基于Android的公交查询系统是一款可以帮助用户查找附近公交站点和路线的应用程序。该系统的设计与实现采用了Android Studio开发环境,使用Java语言进行编程。 该系统主要包括以下几个功能模块:用户登录注册、公交...
毕业设计开题报告 申请课题 基于Android的公交查询系统的设计与实现 学 号 班 级 申 请 者 联系电话 Email : 指导教师 申请日期 计算机科学与技术学院 填写说明 1. 毕业设计的选题应以专业课的内容为主,可以针对...
系统基于Android2.3版本开发,使用百度地图API,实现自我定位、公交查询、地点查询、周边搜索、路线规划、收藏夹、切换城市、位置共享等功能
然后通过截图存储,把使用者所到的任何地方以图片和文本两种方式保存下来,本设计还提供POI搜索、线路规划、公交线路查询、卫星地图等功能。 创新点:以截图的方式把当前位置以“日期_时间.png”的格式保存在SD卡里...
针对移动终端查询公交线路、换乘及周边信息等问题,基于Android平台,采用Java语言,使用部分百度地图数据,结合SQLite数据库的方法,实现了定位当前位置、查找及显示位置信息、车次查询、站点查询、站站查询、换乘查询等...
为了能在手机上随时查询交通线路,规划用户的出行,结合北京市公交线路,开发了一个基于Android平台的交通线路手机查询软件,对软件进行了系统分析,提出了功能设计与部分实现代码,完成了公交、地铁线路、地图的查询及...
北京公交线路查询(离线).rar 基于股票的一个Android应用(内含源码) .rar 多种控件多种实现方式Demo.rar 带手势划动功能的日历源码.rar 手势滑动源码(适合新手).zip 手机号码归属地.rar 拦截软件,拦截电话,短信.7...
百度地图 Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持android 1.5以上系统)及以上版本设备的应用程序接口,您可以通过该接口实现丰富的LBS功能: • 地图展示:包括2D图、卫星图、3D图地图展示。 • ...
北京公交线路查询(离线).rar 基于socket通讯的文件续传!.rar 基于股票的一个Android应用(内含源码) .rar 多点缩放字体DEMO .rar 多种控件多种实现方式Demo.rar 多级PopupWindow的小demo.zip 带手势划动功能的日历...
针对移动终端查询公交线路、换乘及周边信息等问题,基于Android平台,采用Java语言,使用部分百度地图数据,结合SQLite数据库的方法,实现了定位当前位置、查找及显示位置信息、车次查询、站点查询、站站查询、换乘...