百度地圖自定義多點規劃路線

所謂自定義多點規劃路線,就是從服務器下載多點的座標,標註在百度地圖上,在按照一定順序連接規劃路線。

(由於本人也是實習小白,所以有做錯的,費事麻煩的歡迎大神指出,讓我少走點彎路^^)

好戲開始~~(先局部,再整體)

首先數據庫文件就省略了,第一是我還沒研究明白,第二太多(如果有需要可以找我)

1.這個是spinner,用來選擇URL,然後返回到數據庫,數據庫下載該URL的站點信息。(獲取lineName,switch相應的“部分url”,用靜態方法返回拼接數據庫中URL

<span style="white-space:pre">		</span>zdlist.add("浦電線");
		zdlist.add("華苑線");
		zdlist.add("海泰線");
		// zdlist.add("福州");
		// zdlist.add("廈門");
		lineAdapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_spinner_item, zdlist);
		lineAdapter
				.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		lineSpinner = (Spinner) findViewById(R.id.spinner1);
		lineSpinner.setAdapter(lineAdapter);
		lineSpinner
				.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
					public void onItemSelected(AdapterView<?> arg0, View arg1,
							int arg2, long arg3) {
						String lineName = lineSpinner.getSelectedItem()
								.toString();
						SelectURL.SURL(lineName);
						System.out.println("您選擇的是:" + lineAdapter.getItem(arg2));
						arg0.setVisibility(View.VISIBLE);
					}

					public void onNothingSelected(AdapterView<?> arg0) {
						System.out.println("NONE");
						arg0.setVisibility(View.VISIBLE);
					}
				});
		/* 下拉菜單彈出的內容選項觸屏事件處理 */
		lineSpinner.setOnTouchListener(new Spinner.OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub

				return false;
			}
		});
		/* 下拉菜單彈出的內容選項焦點改變事件處理 */
		lineSpinner
				.setOnFocusChangeListener(new Spinner.OnFocusChangeListener() {
					public void onFocusChange(View v, boolean hasFocus) {
						// TODO Auto-generated method stub

					}
				});
2.這個是標註點點擊事件跟地圖點擊事件。這個泡泡就是這樣顯示,點擊地圖消失。(注意:當你調用BaiduMap.OnMapClickListener這個接口時,點擊地圖時hideInfoWindow出於某種原因可能不起作用,這也是我想向各位大神請教的。我的方法用bdMap重寫這個方法,是可以的。)我做安卓沒多長時間,對泛型接觸的不是很多,在我的List<ZhanDianUtil>裏有站點名稱站點經度緯度等等,請問各位大神,我用點擊Marker返回的經緯度可不可以匹配到list裏相應的站點,從而獲取其站點名稱?

// 地圖標註點擊處理
		bdMap.setOnMarkerClickListener(new OnMarkerClickListener() {

			@Override
			public boolean onMarkerClick(Marker mMaker) {
				// TODO Auto-generated method stub
				// 泡泡
				 List<ZhanDianUtil> zdu = new ArrayList();
				 LatLng a = mMaker.getPosition();
				 String b = "車站";
				 popupText = new TextView(BusLineSelectActivity.this);
				 popupText.setBackgroundResource(R.drawable.popup);
				 popupText.setTextColor(0xFF000000);
				 popupText.setText(b);
				 popupText.setGravity(Gravity.CENTER);
				 bdMap.showInfoWindow(new InfoWindow(popupText, a, 0));
				return false;
			}
		});
		bdMap.setOnMapClickListener(new OnMapClickListener() {

			@Override
			public boolean onMapPoiClick(MapPoi arg0) {
				// TODO Auto-generated method stub
				return false;
			}

			@Override
			public void onMapClick(LatLng arg0) {
				// TODO Auto-generated method stub
				bdMap.hideInfoWindow();
			}
		});
	}

3.這個是獲取數據庫中點的座標畫在地圖上,站點嘛,

問題:如果不刪除數據庫文件,情況1在更換路線時還保留之前的站點,clear地圖時還會在畫出來,情況2顯示不是唯一primary key,求解!!

@SuppressLint("HandlerLeak")
	private void zhanDianXianShi() {
		// TODO Auto-generated method stub
		new Thread(new Runnable() {

			@Override
			public void run() {
				// 刪除本地數據庫信息
				bmydb.deleteZhanDianUtil();
				bmydb.deleteZhanDianLocalUtil();
				bmydb.downloadZhanDian();
				drivingSearch(drivintResultIndex);
				Message msgDown = new Message();
				Bundle b = new Bundle();// 存放數據
				b.putInt("result", 2);
				msgDown.setData(b);
				handler.sendMessage(msgDown); // 發送消息
				Log.i("更新車輛數據:", "ok");
			}
		}).start(); // 開啓線程

		handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				Bundle data = msg.getData();
				int iReturnVal = data.getInt("result");

				Log.i("bus update", "車輛同步結果爲-->" + String.valueOf(iReturnVal));
				// UI界面的更新等相關操作
				if (2 == iReturnVal) {
					String msgFinish = "站點查詢完成";
					Toast.makeText(getApplicationContext(), msgFinish,
							Toast.LENGTH_SHORT).show();
					List<ZhanDianUtil> listBuss = null;
					listBuss = bmydb.searchBusList();
					for (int i = 0; i < listBuss.size() / 2; i++) {
						double Latitude = listBuss.get(i).getLat();
						double Longitude = listBuss.get(i).getLng();
						int busid = listBuss.get(i).getZhanDianid();
						BitmapDescriptor bitmap;

						// 構建圖標
						bitmap = BitmapDescriptorFactory
								.fromResource(R.drawable.icon_gcoding);

						if (busid == 0) {
							// 構建Marker
							bitmap = BitmapDescriptorFactory
									.fromResource(R.drawable.icon_gcoding);

						}

						LatLng ll = new LatLng(Latitude, Longitude);
						// 構建MarkerOption,用於在地圖上添加Marker
						OverlayOptions option = new MarkerOptions()
								.position(ll).icon(bitmap).zIndex(9) // 設置marker所在層級
								.draggable(true); // 設置手勢拖拽;
						// 在地圖上添加Marker,並顯示
						mMakerBus = (Marker) (bdMap.addOverlay(option));

						String strMaker = "maker-zhandian" + String.valueOf(i);

						Bundle bundle = new Bundle();
						bundle.putSerializable("ZhandianUtil", listBuss.get(i));

						mMakerBus.setExtraInfo(bundle);
						Log.d(strMaker, ll.toString());
						makerBus.add(mMakerBus);
						System.out.println("畫站點啊啊啊啊啊啊");
						MapStatusUpdate u = MapStatusUpdateFactory
								.newLatLng(ll);
						bdMap.animateMapStatus(u);

						// ll = null;
					}

					isMark = true;
				} else {
					String msgFinish = "站點查詢失敗";
					Toast.makeText(getApplicationContext(), msgFinish,
							Toast.LENGTH_SHORT).show();
				}
			}
		};

	}
4.重點來了,這個就是連點成線的關鍵代碼,其實就一句話
drivingOption.passBy(lu);

但是我要提幾個我認爲我代碼裏的重點。

1)泛型,當你需要將一個泛型中的某一個值,比如說是經度,這時候用到的get和set點對點的賦值。例d1.setLng(d2.getLng)。當你需要像代碼中一樣,不是點對點,要將精度跟緯度合成這個LatLng ll,這時候應用add這個方法。

2)drivingOption.passBy(lu);lu是List<PlanNode>的對象而且必須是List對象,list裏就是經過的點。除此之外,必須要起點和終點。OK

/**
	 * 駕車線路查詢
	 */
	private void drivingSearch(int index) {
		List<ZhanDianUtil> zdu = new ArrayList();
		List<PlanNode> lu = new ArrayList();
		zdu = bmydb.searchBusList();
		int endn = zdu.size() / 2 - 1;
		System.out.println(endn);
		double lat = zdu.get(0).getLat();
		double lng = zdu.get(0).getLng();
		LatLng stall = new LatLng(lat, lng);
		LatLng endll = new LatLng(zdu.get(endn).getLat(), zdu.get(endn)
				.getLng());
		for (int i = 0; i < zdu.size() / 2; i++) {
			double Latitude = zdu.get(i).getLat();
			double Longitude = zdu.get(i).getLng();
			LatLng ll = new LatLng(Latitude, Longitude);
			PlanNode node = PlanNode.withLocation(ll);
			lu.add(node);
		}
		DrivingRoutePlanOption drivingOption = new DrivingRoutePlanOption();
		drivingOption.from(PlanNode.withLocation(stall));
		drivingOption.to(PlanNode.withLocation(endll));
		drivingOption.passBy(lu);
		routePlanSearch.drivingSearch(drivingOption);// 發起駕車路線規劃
	}
下面就貼上這個activity的源碼,如還有不懂的可以和我交流

package com.zwin.activity;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.overlayutil.BusLineOverlay;
import com.baidu.mapapi.overlayutil.DrivingRouteOverlay;
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.RouteLine;
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;
import com.baidu.mapapi.search.route.DrivingRouteLine;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
import com.baidu.mapapi.search.route.PlanNode;
import com.baidu.mapapi.search.route.RoutePlanSearch;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteResult;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption.DrivingPolicy;
import com.zwin.entity.ZhanDianUtil;
import com.zwin.tool.DBManagerXianLu;
import com.zwin.tool.DatabaseHelper;
import com.zwin.tool.FileServiceUtil;
import com.zwin.tool.LatlonUtil;
import com.zwin.tool.SelectURL;
import com.zwin.tool.ServerURL;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 公交線路查詢 BusLineSearchActivity
 * 
 * @author
 *
 */
public class BusLineSelectActivity extends Activity implements OnClickListener {
	// public class CopyOfBusLineSearchActivity extends Activity {
	// 百度地圖定位相關
	LocationClient mLocClient;
	public MyLocationListenner myListener = new MyLocationListenner();
	BitmapDescriptor mCurrentMarker;

	DatabaseHelper mydbhelper = new DatabaseHelper(BusLineSelectActivity.this);
	DBManagerXianLu bmydb = new DBManagerXianLu(mydbhelper);
	private List<Marker> makerBus = new ArrayList<Marker>();

	private Handler handler; // 聲明一個Handler對象
	private EditText cityEt;
	private EditText buslineEt;
	private Button searchBtn;
	ImageView huigui;
	ImageView zhandian;

	int nodeIndex = -1;// 節點索引,供瀏覽節點時使用
	RouteLine route = null;
	private MapView mapView;
	private BaiduMap bdMap;
	private Marker mMakerBus;
	private TextView popupText = null;// 泡泡view
	private RoutePlanSearch routePlanSearch;// 路徑規劃搜索接口
	private int totalLine = 0;// 記錄某種搜索出的方案數量
	private int drivintResultIndex = 0;// 駕車路線方案index
	private int index = -1;

	boolean isMark = false;
	boolean isFirstLoc = true;// 是否首次定位
	boolean isLocation = true;

	private String city;// 城市
	private String busline;// 公交路線
	private List<String> buslineIdList;// 存儲公交線路的uid
	private int buslineIndex = 0;// 標記第幾個路線

	private PoiSearch poiSearch;
	private BusLineSearch busLineSearch;

	// 選擇URL
	private Spinner lineSpinner; // 線路
	ArrayAdapter<String> lineAdapter; // 線路適配器
	private List<String> zdlist = new ArrayList<String>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.xianluchaxun);
		init();
		setonclicklisten();
		// 第一步:添加一個下拉列表項的list,這裏添加的項就是下拉列表的菜單項
		zdlist.add("浦電線");
		zdlist.add("華苑線");
		zdlist.add("海泰線");
		// zdlist.add("福州");
		// zdlist.add("廈門");
		lineAdapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_spinner_item, zdlist);
		lineAdapter
				.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		lineSpinner = (Spinner) findViewById(R.id.spinner1);
		lineSpinner.setAdapter(lineAdapter);
		lineSpinner
				.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
					public void onItemSelected(AdapterView<?> arg0, View arg1,
							int arg2, long arg3) {
						String lineName = lineSpinner.getSelectedItem()
								.toString();
						SelectURL.SURL(lineName);
						System.out.println("您選擇的是:" + lineAdapter.getItem(arg2));
						arg0.setVisibility(View.VISIBLE);
					}

					public void onNothingSelected(AdapterView<?> arg0) {
						System.out.println("NONE");
						arg0.setVisibility(View.VISIBLE);
					}
				});
		/* 下拉菜單彈出的內容選項觸屏事件處理 */
		lineSpinner.setOnTouchListener(new Spinner.OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub

				return false;
			}
		});
		/* 下拉菜單彈出的內容選項焦點改變事件處理 */
		lineSpinner
				.setOnFocusChangeListener(new Spinner.OnFocusChangeListener() {
					public void onFocusChange(View v, boolean hasFocus) {
						// TODO Auto-generated method stub

					}
				});

		// 不顯示百度地圖Logo
		mapView.removeViewAt(1);
		mapView.showZoomControls(true);
	}

	/**
	 * 初始化操作
	 */
	private void init() {
		mapView = (MapView) findViewById(R.id.mapview);
		bdMap = mapView.getMap();
		// 開啓定位圖層
		bdMap.setMyLocationEnabled(true);
		bdMap.setMapStatus(MapStatusUpdateFactory.zoomTo(15.0f));
		huigui = (ImageView) findViewById(R.id.huiguidingwei);
		zhandian = (ImageView) findViewById(R.id.zhandianchaxun);
		searchBtn = (Button) findViewById(R.id.button1);
		buslineIdList = new ArrayList<String>();
		poiSearch = PoiSearch.newInstance();
		busLineSearch = BusLineSearch.newInstance();
		// 定位相關
		mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.pin);
		bdMap.setMyLocationConfigeration(new MyLocationConfiguration(null,
				false, null));
		// 定位初始化
		mLocClient = new LocationClient(BusLineSelectActivity.this);
		mLocClient.registerLocationListener(myListener);
		LocationClientOption option = new LocationClientOption();
		option.setIsNeedAddress(true);
		option.setOpenGps(true);// 打開gps
		option.setCoorType("bd09ll"); // 設置座標類型,百度返回的座標類型
		option.setScanSpan(1000);// 掃描1公里
		mLocClient.setLocOption(option);
		mLocClient.start();
		routePlanSearch = RoutePlanSearch.newInstance();
		routePlanSearch
				.setOnGetRoutePlanResultListener(routePlanResultListener);
	}

	private void setonclicklisten() {
		// TODO Auto-generated method stub
		huigui.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				isFirstLoc = true;
				Toast.makeText(BusLineSelectActivity.this, "迴歸定位",
						Toast.LENGTH_SHORT).show();
			}
		});
		zhandian.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (isMark) {
					isMark = false;
					bdMap.clear();
					System.out.println("移除標記");
				}
				isFirstLoc = true;
				Toast.makeText(BusLineSelectActivity.this, "還原",
						Toast.LENGTH_SHORT).show();
			}
		});
		searchBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (isMark) {
					isMark = false;
					bdMap.clear();
					System.out.println("移除標記");
				}
				String msgFinish = "站點查詢中...";
				Toast.makeText(getApplicationContext(), msgFinish,
						Toast.LENGTH_SHORT).show();

				zhanDianXianShi();
			}
		});
		// 地圖標註點擊處理
		bdMap.setOnMarkerClickListener(new OnMarkerClickListener() {

			@Override
			public boolean onMarkerClick(Marker mMaker) {
				// TODO Auto-generated method stub
				// 泡泡
				 List<ZhanDianUtil> zdu = new ArrayList();
				 LatLng a = mMaker.getPosition();
				 String b = "車站";
				 popupText = new TextView(BusLineSelectActivity.this);
				 popupText.setBackgroundResource(R.drawable.popup);
				 popupText.setTextColor(0xFF000000);
				 popupText.setText(b);
				 popupText.setGravity(Gravity.CENTER);
				 bdMap.showInfoWindow(new InfoWindow(popupText, a, 0));
				return false;
			}
		});
		bdMap.setOnMapClickListener(new OnMapClickListener() {

			@Override
			public boolean onMapPoiClick(MapPoi arg0) {
				// TODO Auto-generated method stub
				return false;
			}

			@Override
			public void onMapClick(LatLng arg0) {
				// TODO Auto-generated method stub
				bdMap.hideInfoWindow();
			}
		});
	}

	@SuppressLint("HandlerLeak")
	private void zhanDianXianShi() {
		// TODO Auto-generated method stub
		new Thread(new Runnable() {

			@Override
			public void run() {
				// 刪除本地數據庫信息
				bmydb.deleteZhanDianUtil();
				bmydb.deleteZhanDianLocalUtil();
				bmydb.downloadZhanDian();
				drivingSearch(drivintResultIndex);
				Message msgDown = new Message();
				Bundle b = new Bundle();// 存放數據
				b.putInt("result", 2);
				msgDown.setData(b);
				handler.sendMessage(msgDown); // 發送消息
				Log.i("更新車輛數據:", "ok");
			}
		}).start(); // 開啓線程

		handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				Bundle data = msg.getData();
				int iReturnVal = data.getInt("result");

				Log.i("bus update", "車輛同步結果爲-->" + String.valueOf(iReturnVal));
				// UI界面的更新等相關操作
				if (2 == iReturnVal) {
					String msgFinish = "站點查詢完成";
					Toast.makeText(getApplicationContext(), msgFinish,
							Toast.LENGTH_SHORT).show();
					List<ZhanDianUtil> listBuss = null;
					listBuss = bmydb.searchBusList();
					for (int i = 0; i < listBuss.size() / 2; i++) {
						double Latitude = listBuss.get(i).getLat();
						double Longitude = listBuss.get(i).getLng();
						int busid = listBuss.get(i).getZhanDianid();
						BitmapDescriptor bitmap;

						// 構建圖標
						bitmap = BitmapDescriptorFactory
								.fromResource(R.drawable.icon_gcoding);

						if (busid == 0) {
							// 構建Marker
							bitmap = BitmapDescriptorFactory
									.fromResource(R.drawable.icon_gcoding);

						}

						LatLng ll = new LatLng(Latitude, Longitude);
						// 構建MarkerOption,用於在地圖上添加Marker
						OverlayOptions option = new MarkerOptions()
								.position(ll).icon(bitmap).zIndex(9) // 設置marker所在層級
								.draggable(true); // 設置手勢拖拽;
						// 在地圖上添加Marker,並顯示
						mMakerBus = (Marker) (bdMap.addOverlay(option));

						String strMaker = "maker-zhandian" + String.valueOf(i);

						Bundle bundle = new Bundle();
						bundle.putSerializable("ZhandianUtil", listBuss.get(i));

						mMakerBus.setExtraInfo(bundle);
						Log.d(strMaker, ll.toString());
						makerBus.add(mMakerBus);
						System.out.println("畫站點啊啊啊啊啊啊");
						MapStatusUpdate u = MapStatusUpdateFactory
								.newLatLng(ll);
						bdMap.animateMapStatus(u);

						// ll = null;
					}

					isMark = true;
				} else {
					String msgFinish = "站點查詢失敗";
					Toast.makeText(getApplicationContext(), msgFinish,
							Toast.LENGTH_SHORT).show();
				}
			}
		};

	}

	/**
	 * 路線規劃結果回調
	 */
	OnGetRoutePlanResultListener routePlanResultListener = new OnGetRoutePlanResultListener() {

		@Override
		public void onGetWalkingRouteResult(WalkingRouteResult arg0) {
		}

		@Override
		public void onGetTransitRouteResult(TransitRouteResult arg0) {
		}

		@Override
		public void onGetDrivingRouteResult(
				DrivingRouteResult drivingRouteResult) {
			// TODO Auto-generated method stub
			// bdMap.clear();
			if (drivingRouteResult == null
					|| drivingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
				Toast.makeText(BusLineSelectActivity.this, "抱歉,未找到結果",
						Toast.LENGTH_SHORT).show();
			}
			if (drivingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
				// 起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息
				// drivingRouteResult.getSuggestAddrInfo()
				return;
			}
			if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
				DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
						bdMap);
				drivingRouteOverlay.setData(drivingRouteResult.getRouteLines()
						.get(drivintResultIndex));// 設置一條駕車路線方案
				bdMap.setOnMarkerClickListener(drivingRouteOverlay);
				drivingRouteOverlay.addToMap();
				drivingRouteOverlay.zoomToSpan();

			}
		}
	};

	/**
	 * 駕車線路查詢
	 */
	private void drivingSearch(int index) {
		List<ZhanDianUtil> zdu = new ArrayList();
		List<PlanNode> lu = new ArrayList();
		zdu = bmydb.searchBusList();
		int endn = zdu.size() / 2 - 1;
		System.out.println(endn);
		double lat = zdu.get(0).getLat();
		double lng = zdu.get(0).getLng();
		LatLng stall = new LatLng(lat, lng);
		LatLng endll = new LatLng(zdu.get(endn).getLat(), zdu.get(endn)
				.getLng());
		for (int i = 0; i < zdu.size() / 2; i++) {
			double Latitude = zdu.get(i).getLat();
			double Longitude = zdu.get(i).getLng();
			LatLng ll = new LatLng(Latitude, Longitude);
			PlanNode node = PlanNode.withLocation(ll);
			lu.add(node);
		}
		DrivingRoutePlanOption drivingOption = new DrivingRoutePlanOption();
		drivingOption.from(PlanNode.withLocation(stall));
		drivingOption.to(PlanNode.withLocation(endll));
		drivingOption.passBy(lu);
		routePlanSearch.drivingSearch(drivingOption);// 發起駕車路線規劃
	}

	/**
	 * 定位SDK監聽函數
	 */
	public class MyLocationListenner implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			// map view 銷燬後不在處理新接收的位置
			if (location == null || bdMap == null)
				return;
			MyLocationData locData = new MyLocationData.Builder()
					.accuracy(location.getRadius())
					// 此處設置開發者獲取到的方向信息,順時針0-360
					.direction(100).latitude(location.getLatitude())
					.longitude(location.getLongitude()).build();
			bdMap.setMyLocationData(locData);
			if (isFirstLoc) {
				isFirstLoc = false;
				LatLng ll = new LatLng(location.getLatitude(),
						location.getLongitude());
				MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
				bdMap.setMapStatus(u);
			}
		}

		public void onReceivePoi(BDLocation poiLocation) {
		}
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub

	}


	@Override
	protected void onResume() {
		super.onResume();
		mapView.onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
		mapView.onPause();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		poiSearch.destroy();// 釋放檢索對象資源
		busLineSearch.destroy();// 釋放檢索對象資源
		mapView.onDestroy();
	}

}

在最後重申我的這幾個小問題

1.當調用BaiduMap.OnMapClickListener這個接口時,點擊地圖時hideInfoWindow出於某種原因可能不起作用

2.點擊Marker返回的經緯度可不可以匹配到list裏相應的站點,從而獲取其站點名稱(list裏有這些信息)

3.如果不刪除數據庫文件,情況1在更換路線時還保留之前的站點,clear地圖時還會在畫出來,情況2顯示不是唯一

的primary key

希望能得到幫助,感謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章