0

我有以下代码,它在地图上绘制了一条路线。它必须执行以下步骤:

  • 检查是否绘制了路线;
    • 如果有,从地图中删除;
  • 从谷歌获取路线;
  • 在地图上画出路线;
  • 更新地图。

当它第一次执行的代码时,它画得很好。但是在第一次执行之后,它一直在移除路线覆盖,将新的路线覆盖插入到 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();
}
4

1 回答 1

1

你能在这里试试这个建议吗:https ://stackoverflow.com/a/5730710/1337412

添加或删除 overlayItem 时,您需要在 MarkerOverlay 类中调用 populate()。

于 2012-05-25T02:20:21.047 回答