время в пути между двумя точками в Google Map Android API V2

как отображать время в пути между двумя точками в Google Map Android API V2, в моей программе я использую JSONParse для отображения расстояния вождения, но яя могут для отображения времени в пути, этот пример программы, которую я сделал: DirectionActivity.java

public class DirectionActivity extends FragmentActivity implements OnMyLocationChangeListener{

private LatLng          start;
private LatLng          end;
private String          nama;
private final String    URL = "http://maps.googleapis.com/maps/api/directions/json?";
private GoogleMap       map;
private JSONHelper      json;
private ProgressDialog  pDialog;
private List    listDirections;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_direction);
    json = new JSONHelper();
    setupMapIfNeeded();

    Bundle b = getIntent().getExtras();
    if (b != null)
    {
        start = new LatLng(b.getDouble(MainActivity.KEY_LAT_ASAL), b.getDouble(MainActivity.KEY_LNG_ASAL));
        end = new LatLng(b.getDouble(MainActivity.KEY_LAT_TUJUAN), b.getDouble(MainActivity.KEY_LNG_TUJUAN));
        nama = b.getString(MainActivity.KEY_NAMA);
    }

    new AsyncTaskDirection().execute();
}

private void setupMapIfNeeded()
{
    if (map == null)
    {
        FragmentManager fragmentManager = getSupportFragmentManager();
        SupportMapFragment supportMapFragment = (SupportMapFragment) fragmentManager
                .findFragmentById(R.id.mapsdirections);
        map = supportMapFragment.getMap();

        if (map != null)
        {
            setupMap();
        }
    }

}

private void setupMap()
{
    map.setMyLocationEnabled(true);
    map.setOnMyLocationChangeListener(this);
    moveToMyLocation();
}

private void moveToMyLocation()
{
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();

    Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false));
    if (location != null)
    {
        map.animateCamera(CameraUpdateFactory.newLatLngZoom(
                new LatLng(location.getLatitude(), location.getLongitude()), 13));
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
protected void onResume()
{
    // TODO Auto-generated method stub
    super.onResume();
    int resCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
    if (resCode != ConnectionResult.SUCCESS)
    {
        GooglePlayServicesUtil.getErrorDialog(resCode, this, 1);
    }
}

private class AsyncTaskDirection extends AsyncTask
{
    @Override
    protected Void doInBackground(Void... params)
    {
        String uri = URL
                + "origin=" + start.latitude + "," + start.longitude
                + "&destination=" + end.latitude + "," + end.longitude
                + "&sensor=true&units=metric";

        JSONObject jObject = json.getJSONFromURL(uri);
        listDirections = json.getDirection(jObject);

        return null;
    }

    @Override
    protected void onPreExecute()
    {
        // TODO Auto-generated method stub
        super.onPreExecute();
        pDialog = new ProgressDialog(DirectionActivity.this);
        pDialog.setMessage("Loading....");
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected void onPostExecute(Void result)
    {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        pDialog.dismiss();
        gambarDirection();
    }

}

public void gambarDirection()
{
    PolylineOptions line = new PolylineOptions().width(3).color(Color.BLUE);
    for (int i = 0; i < listDirections.size(); i++)
    {
        line.add(listDirections.get(i));
    }
    map.addPolyline(line);

    // tambah marker di posisi end
    map.addMarker(new MarkerOptions()
            .position(end)
            .title(nama));
}

@Override
public void onMyLocationChange(Location location)
{
    Toast.makeText(this, "Lokasi berubah ke " + location.getLatitude() + "," + location.getLongitude(),
            Toast.LENGTH_SHORT).show();

}

}

JSONHelper.java

public class JSONHelper
{
private InputStream     is              = null;
private JSONObject      jsonObject      = null;
private String          json            = "";

private final String    TAG_TEMPATMAKAN = "tempatmakan";
private final String    TAG_ID          = "id";
private final String    TAG_NAMA        = "nama";
private final String    TAG_ALAMAT      = "alamat";
private final String    TAG_LAT         = "lat";
private final String    TAG_LNG         = "lng";
private final String    TAG_ROUTES      = "routes";
private final String    TAG_LEGS        = "legs";
private final String    TAG_STEPS       = "steps";
private final String    TAG_POLYLINE    = "polyline";
private final String    TAG_POINTS      = "points";
private final String    TAG_START       = "start_location";
private final String    TAG_END         = "end_location";

public JSONObject getJSONFromURL(String url)
{
    try
    {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
    } catch (UnsupportedEncodingException e)
    {
        e.printStackTrace();
    } catch (ClientProtocolException e)
    {
        e.printStackTrace();
    } catch (IOException e)
    {
        e.printStackTrace();
    }

    try
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);

        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");
        }

        is.close();
        json = sb.toString();
    } catch (Exception e)
    {
        // TODO: handle exception
    }

    try
    {
        jsonObject = new JSONObject(json);

    } catch (JSONException e)
    {
        // TODO: handle exception
    }

    return jsonObject;
}

public ArrayList getTempatMakanAll(JSONObject jobj)
{
    ArrayList listTempatMakan = new ArrayList();

    try
    {
        JSONArray arrayTempatMakan = jobj.getJSONArray(TAG_TEMPATMAKAN);

        for (int i = 0; i < arrayTempatMakan.length(); i++)
        {
            JSONObject jobject = arrayTempatMakan.getJSONObject(i);

            Log.d("log", "muter ke " + i);
            listTempatMakan.add(new TempatMakan(jobject.getInt(TAG_ID), jobject.getString(TAG_NAMA), jobject
                    .getString(TAG_ALAMAT), jobject
                    .getDouble(TAG_LAT), jobject.getDouble(TAG_LNG)));

        }
    } catch (JSONException e)
    {
        e.printStackTrace();
    }
    return listTempatMakan;
}

/*
 * Untuk decode Polyline
 * 
 * @params String
 * 
 * @return List
 */
private List decodePoly(String encoded)
{
    List poly = new ArrayList();
    int index = 0, len = encoded.length();
    int lat = 0, lng = 0;
    while (index < len)
    {
        int b, shift = 0, result = 0;
        do
        {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) < shift;
            shift += 5;
        } while (b >= 0x20);
        int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lat += dlat;
        shift = 0;
        result = 0;
        do
        {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) < shift;
            shift += 5;
        } while (b >= 0x20);
        int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lng += dlng;

        LatLng position = new LatLng((double) lat / 1E5, (double) lng / 1E5);
        poly.add(position);
    }
    return poly;

}

/*
 * Untuk mendapatkan direction
 * 
 * @params JSONObject
 * 
 * @return List
 Rachel Gallen26 мая 2013 г., 09:59
эта ссылка поможет вамwptrafficanalyzer.in/blog/...
 Muhammad Agessy Barazi26 мая 2013 г., 10:15
@Рэйчел Галлен, спасибо, но я все еще не понимаю, как указать продолжительность поездки в моей программе, я пытаюсь объединить свою программу с этим учебником, но я все еще не могу

Ответы на вопрос(1)

Решение Вопроса

е и продолжительность»НОГИ» массив, как это:

"legs": [
                {
                    "distance": {
                        "text": "0.3 km", 
                        "value": 263
                    }, 
                    "duration": {
                        "text": "1 min", 
                        "value": 52
                    }, 
                 ....... //omitted value
        ]

Таким образом, вы можете попробовать проанализировать расстояние и продолжительность (если вам это нужно) в вашем приложении. Может быть так:

JSONArray legs = jobject.getString("legs");
for (int i = 0; i < legs.length(); i++)
    {
        JSONObject legsObject = legs.getJSONObject(i);
        JSONObject distanceObject = legsObject.getString("distance");
        String distanceText = distanceObject.getString("text");
        String distanceValue = String.valueOf(distanceObject.getString("value"));
        //do anything else
    }

о, и поместите разбор массива ног в разбор ArrayTempatMakan. Я могу получить расстояние и продолжительность с помощью парсера Jackson JSON, так что у тебя должна получиться парсер org.JSON.

Удачи ^^

РЕДАКТИРОВАТЬ :

В этомgetDirection (JSONObject jObj) метод Вы успешно получилиobjLegs здесь вы должны получить расстояние и продолжительность в пределахobjLegs

    JSONObject objRoute = jObj.getJSONArray(TAG_ROUTES).getJSONObject(0);
    JSONObject objLegs = objRoute.getJSONArray(TAG_LEGS).getJSONObject(0);
    JSONArray arraySteps = objLegs.getJSONArray(TAG_STEPS);

Я думаю, что вы должны добавить это ниже:objLegs

JSONObject objDistance = objLegs.getJSONObject("distance");
JSONObject objDuration = objLegs.getJSONObject("duration");
String text_distance = objDistance.getString("text");
Log.d("Distance", text_distance); //adds an entry to the logCat, Check whether the value of Distance is successfully taken.
String text_duration = objDuration.getString("text");
Log.d("Duration", text_duration); //adds an entry to the logCat, Check whether the value of Distance is successfully taken.

Там, я полагаю, вы сможете получить значение, после этого вы можете просто добавить значение в свой список результатов.

Если ты'Вы все еще не можете указать расстояние и продолжительность, пожалуйста, включите класс TempatMakan в свой пост.

РЕДАКТИРОВАТЬ 2:

Объявите расстояние и продолжительность в виде строки внутри вашего TempatMakan.Java:

private String durasi;
private String jarak;

внутри вашего конструктора:

public TempatMakan(int id, String nama, String alamat, String jarak, String durasi, double lat, double lng)
{
    super();
    this.id = id;
    this.nama = nama;
    this.alamat = alamat;
    this.lat = lat;
    this.lng = lng;
    this.jarak = jarak;
    this.durasi = durasi;
}

затем объявите соответствующие методы получения и установки дляjarak а также .durasi

Внутри вашегоJSONHelper.java,getTempatMakanAll метод, добавьте эти:

for (int i = 0; i < arrayTempatMakan.length(); i++)
        {
            JSONObject jobject = arrayTempatMakan.getJSONObject(i);
            JSONObject objRoute = jobject.getJSONArray(TAG_ROUTES).getJSONObject(0);
            JSONObject objLegs = objRoute.getJSONArray(TAG_LEGS).getJSONObject(0);
            JSONObject objDistance = objLegs.getJSONObject("distance");
            JSONObject objDuration = objLegs.getJSONObject("duration");

            Log.d("log", "muter ke " + i);
            listTempatMakan.add(
            new TempatMakan(
                    jobject.getInt(TAG_ID),
                    jobject.getString(TAG_NAMA),
                    jobject.getString(TAG_ALAMAT),
                    objDistance.getString("text"),//jarak
                    objDuration.getString("text"),//durasi
                    jobject.getDouble(TAG_LAT),
                    jobject.getDouble(TAG_LNG)));

        }

после этого просто измените свой адаптер списка для отображения этих значений.

Удачи, и извините, я могучтобы дать вам другой код или изменить ваш проект, вам придется самому разобраться :)

П.С .: Скрипси или Туга Кулиа?

 Muhammad Agessy Barazi28 мая 2013 г., 09:28
Спасибо большое, я попробую, ^ _ ^
 Uri Klar04 дек. 2013 г., 12:21
Могу ли я получить параметр расстояния / времени без полного маршрута? Мне просто нужно время для каждого метода транспортировки, а не весь маршрут ...
 reidzeibel28 мая 2013 г., 17:14
Смотрите РЕДАКТИРОВАТЬ 2, удачи :)
 reidzeibel28 мая 2013 г., 13:03
Отредактировал мой ответ, попробуй: D
 Muhammad Agessy Barazi28 мая 2013 г., 18:02
это мой твитер @AgessyBarazi и это мой FBfacebook.com/m.agessy.barazi?ref=tn_tnmnмы можем пообщаться в FB ??
 reidzeibel28 мая 2013 г., 17:52
Джогья, точнее, если сможешьt добавить расстояние и продолжительность, узнайте больше об использовании макетов ^^ i '
 reidzeibel05 дек. 2013 г., 01:42
да можно просто достатьРасстояние" а также "Продолжительность» из JSON: D
 Muhammad Agessy Barazi28 мая 2013 г., 16:50
здесь мой проект, вы можете скачать его,dropbox.com/s/lm7j6m6f072glup/Tempat%20Makan%20Jogja.rar
 Muhammad Agessy Barazi28 мая 2013 г., 17:55
m aceh, мы можем говорить Индонезию ?? Я устал использовать Google Translate, чтобы говорить на этом форуме: D
 Muhammad Agessy Barazi28 мая 2013 г., 17:14
хахахаха, твой ответ работает: D большое спасибо, но у меня есть небольшой вопрос, как показать направление не в logcat, но мы показываем его так, как эта ссылка,wptrafficanalyzer.in/blog/...
 Muhammad Agessy Barazi28 мая 2013 г., 17:49
это мой скрипси, но я просто могуНе добавляю расстояние, продолжительность, спасибо за помощь, ты индонезийский ??
 Muhammad Agessy Barazi28 мая 2013 г., 12:43
Вы можете поместить свою программу в мою программу? я все еще путаюсь с анализом json
 Muhammad Agessy Barazi28 мая 2013 г., 16:44
Я добавил класс в свой пост, пожалуйста, проверьте его :)
 reidzeibel28 мая 2013 г., 17:39
создать текстовое представление и использовать textview.setText (jarak) или setText (durasi), это так просто
 reidzeibel28 мая 2013 г., 17:57
у вас есть твиттер-аккаунт? позволять'переместить чат в другом месте. мой @ridwanadit

Ваш ответ на вопрос