0

マップ上にルートを描画する次のコードがあります。次の手順を実行する必要があります。

  • ルートが描画されているかどうかを確認します。
    • ある場合は、マップから削除します。
  • Google からルートを取得します。
  • 地図上にルートを描きます。
  • マップを更新します。

初めてコードを実行すると、うまく描画されます。しかし、最初の実行後、ルート オーバーレイを削除し続け、新しいルート オーバーレイを 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 に答える