所謂自定義多點規劃路線,就是從服務器下載多點的座標,標註在百度地圖上,在按照一定順序連接規劃路線。
(由於本人也是實習小白,所以有做錯的,費事麻煩的歡迎大神指出,讓我少走點彎路^^)
好戲開始~~(先局部,再整體)
首先數據庫文件就省略了,第一是我還沒研究明白,第二太多(如果有需要可以找我)
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
希望能得到幫助,感謝。