基于Android的带地图功能的公交路线查询系统

 在我大学毕业之前,我的大学毕业设计是基于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() + "个站点");

}

}

 

系统的界面效果如下图:




 

 

 

 

 

 

 
 

猜你喜欢

转载自javalover1.iteye.com/blog/2407684