我有以下代码,它在地图上绘制了一条路线。它必须执行以下步骤:
- 检查是否绘制了路线;
- 如果有,从地图中删除;
- 从谷歌获取路线;
- 在地图上画出路线;
- 更新地图。
当它第一次执行的代码时,它画得很好。但是在第一次执行之后,它一直在移除路线覆盖,将新的路线覆盖插入到 MapOverlays 中,但地图并没有在界面上绘制路线。
我不知道如何解决这个问题。有人可以帮助我吗?
提前致谢。
public void drawRoute(Location from, double toLat, double toLon) {
String url = RoadProvider.getUrl(from.getLatitude(), from.getLongitude(), toLat, toLon);
Log.i("rotaUrl", url);
JSONGet routeHttpObj = new JSONGet(mContext, url) {
@Override
protected void jsonHandler(JSONObject routeJsonObj) {
Log.i("Rota", "Rota recebida...");
try {
// Qual o status da requisição da rota?
String status = routeJsonObj.getString("status").toString();
// O webservice conseguiu traçar uma rota?
if (status.equalsIgnoreCase("OK")) {
Log.i("Rota", "Ok");
Log.i("overlay", mapOverlays.toString());
Log.i("overlay", mapOverlays.size()+"");
// Remove a rota, caso exista
if (mapOverlays.size() == 3) {
mapOverlays.remove(2);
}
Log.i("overlay", mapOverlays.size()+"");
// Extração da polyline codificada
String polyline = routeJsonObj.getJSONArray("routes").getJSONObject(0).getJSONObject("overview_polyline").getString("points");
// Decodificação da polyline para um array de GeoPoints
ArrayList<GeoPoint> route = RoadProvider.decodePolyline(polyline);
// Instanciamento do objeto da rota
RoadOverlay routeOverlay = new RoadOverlay(route);
// Pega a lista de overlays e adiciona a rota ao mapview
mapOverlays.add(routeOverlay);
// Reseta o mapa
mapView.postInvalidate();
Log.i("overlay", mapOverlays.size()+"");
Log.i("overlay", mapOverlays.toString());
// Pega os passos da rota
/*JSONArray routeSteps = routeJsonObj.getJSONArray("routes").getJSONObject(0).getJSONObject("legs").getJSONArray("steps");
// Percorre os passos da rota e insere nos vetores, para guiar o motorista
for (int i=0; i<routeSteps.length(); i++) {
// O objeto do passo no indice i
JSONObject stepObj = routeSteps.getJSONObject(i);
// Cria o array dos pontos
GeoPoint[] arrPoints = new GeoPoint[2];
// Insere a latitude e longitude no array
//arrPoints[0] = stepObj.getJSONObject(name)
// Insere o array na lista
routePoints.add(arrPoints);
// routeInstructions
}*/
// Copia os pontos para referencia futura
routePoints = (ArrayList<GeoPoint>) route.clone();
} else {
// Qual o erro?
if (status.equalsIgnoreCase("NOT_FOUND")) {
} else if (status.equalsIgnoreCase("ZERO_RESULTS")) {
} else if (status.equalsIgnoreCase("MAX_WAYPOINTS_EXCEEDED")) {
} else if (status.equalsIgnoreCase("INVALID_REQUEST")) {
} else if (status.equalsIgnoreCase("OVER_QUERY_LIMIT") || status.equalsIgnoreCase("REQUEST_DENIED")) {
} else {
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
// Desabilita a exibição do loading
routeHttpObj.setDisplayDialog(false);
// Executa a requisição
routeHttpObj.execute();
}