le temps de trajet entre deux lieux de Google Map API Android V2
comment afficher le temps de trajet entre deux lieux de Google Map API Android V2,
dans mon programme, j'en utilisant JSONParse à l'affichage de la distance de conduite, mais je ne peux pas afficher l'écran de temps de trajet, Ce programme d'exemple j'ai fait: 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<LatLng> 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<Void, Void, Void>
{
@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<TempatMakan> getTempatMakanAll(JSONObject jobj)
{
ArrayList<TempatMakan> listTempatMakan = new ArrayList<TempatMakan>();
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<LatLng>
*/
private List<LatLng> decodePoly(String encoded)
{
List<LatLng> poly = new ArrayList<LatLng>();
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<LatLng>
*/
public List<LatLng> getDirection(JSONObject jObj)
{
List<LatLng> directions = new ArrayList<LatLng>();
try
{
JSONObject objRoute = jObj.getJSONArray(TAG_ROUTES).getJSONObject(0);
JSONObject objLegs = objRoute.getJSONArray(TAG_LEGS).getJSONObject(0);
JSONArray arraySteps = objLegs.getJSONArray(TAG_STEPS);
for (int wi2t = 0; wi2t < arraySteps.length(); wi2t++)
{
JSONObject step = arraySteps.getJSONObject(wi2t);
JSONObject objStart = step.getJSONObject(TAG_START);
JSONObject objEnd = step.getJSONObject(TAG_END);
double latStart = objStart.getDouble(TAG_LAT);
double lngStart = objStart.getDouble(TAG_LNG);
directions.add(new LatLng(latStart, lngStart));
JSONObject poly = step.getJSONObject(TAG_POLYLINE);
String encodedPoly = poly.getString(TAG_POINTS);
List<LatLng> decodedPoly = decodePoly(encodedPoly);
for (int eka = 0; eka < decodedPoly.size(); eka++)
{
directions.add(new LatLng(decodedPoly.get(eka).latitude, decodedPoly.get(eka).longitude));
}
double latEnd = objEnd.getDouble(TAG_LAT);
double lngEnd = objEnd.getDouble(TAG_LNG);
directions.add(new LatLng(latEnd, lngEnd));
}
} catch (JSONException e)
{
//TODO: handle exception
}
return directions;
}
}
MainActivity.java
public class MainActivity extends FragmentActivity implements OnInfoWindowClickListener
{
private GoogleMap map;
private JSONHelper json;
private ProgressDialog pDialog;
private Button btnGetDirection;
private List<TempatMakan> listTempatMakan;
private final String URL_API = "http://lhocation1203.hostzi.com/dataapi/tempatmakan.php";
public static final String KEY_NAMA = "nama";
public static final String KEY_ALAMAT = "alamat";
public static final String KEY_LAT_TUJUAN = "lat_tujuan";
public static final String KEY_LNG_TUJUAN = "lng_tujuan";
public static final String KEY_LAT_ASAL = "lat_asal";
public static final String KEY_LNG_ASAL = "lng_asal";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
json = new JSONHelper();
new AsynTaskMain().execute();
setupMapIfNeeded();
}
private void setupMapIfNeeded()
{
if (map == null)
{
FragmentManager fragmentManager = getSupportFragmentManager();
SupportMapFragment supportMapFragment = (SupportMapFragment) fragmentManager.findFragmentById(R.id.maps);
map = supportMapFragment.getMap();
if (map != null)
{
setupMap();
}
}
}
private void setupMap()
{
map.setMyLocationEnabled(true);
map.setOnInfoWindowClickListener(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 AsynTaskMain extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPostExecute(Void result)
{
//TODO Auto-generated method stub
pDialog.dismiss();
runOnUiThread(new Runnable()
{
@Override
public void run()
{
//TODO Auto-generated method stub
for (int i = 0; i < listTempatMakan.size(); i++)
{
map.addMarker(new MarkerOptions()
.position(new LatLng(listTempatMakan.get(i).getLat(),
listTempatMakan.get(i).getLng()))
.title(listTempatMakan.get(i).getNama())
.snippet(listTempatMakan.get(i).getAlamat()));
}
}
});
super.onPostExecute(result);
}
@Override
protected void onPreExecute()
{
//TODO Auto-generated method stub
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading....");
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected Void doInBackground(Void... params)
{
//TODO Auto-generated method stub
JSONObject jObject = json.getJSONFromURL(URL_API);
listTempatMakan = json.getTempatMakanAll(jObject);
return null;
}
}
@Override
public void onInfoWindowClick(Marker marker)
{
//marker id -> m0, m1, m2 dst..
String id = marker.getId();
id = id.substring(1);
LatLng myLocation = new LatLng(map.getMyLocation().getLatitude(), map.getMyLocation().getLongitude());
if (myLocation != null)
{
Bundle bundle = new Bundle();
bundle.putString(KEY_NAMA, listTempatMakan.get(Integer.parseInt(id)).getNama());
bundle.putString(KEY_ALAMAT, listTempatMakan.get(Integer.parseInt(id)).getAlamat());
bundle.putDouble(KEY_LAT_TUJUAN, marker.getPosition().latitude);
bundle.putDouble(KEY_LNG_TUJUAN, marker.getPosition().longitude);
bundle.putDouble(KEY_LAT_ASAL, myLocation.latitude);
bundle.putDouble(KEY_LNG_ASAL, myLocation.longitude);
Intent i = new Intent(MainActivity.this, InfoTempatMakanActivity.class);
i.putExtras(bundle);
startActivity(i);
} else
{
Toast.makeText(this, "Tidak dapat menemukan lokasi anda ", Toast.LENGTH_LONG).show();
}
}
}
InfoTempatMakanActivity.java
public class InfoTempatMakanActivity extends Activity implements OnClickListener
{
private TextView tvNama;
private TextView tvAlamat;
private Button btnGetDirection;
private LatLng lokasiTujuan;
private LatLng lokasiAwal;
private String nama;
private String alamat;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info_tempat_makan);
initialize();
Bundle bundle = getIntent().getExtras();
if (bundle != null)
{
nama = bundle.getString(MainActivity.KEY_NAMA);
alamat = bundle.getString(MainActivity.KEY_ALAMAT);
lokasiTujuan = new LatLng(bundle.getDouble(MainActivity.KEY_LAT_TUJUAN),
bundle.getDouble(MainActivity.KEY_LNG_TUJUAN));
lokasiAwal = new LatLng(bundle.getDouble(MainActivity.KEY_LAT_ASAL),
bundle.getDouble(MainActivity.KEY_LNG_ASAL));
}
setTeksView();
}
private void setTeksView()
{
tvNama.setText(nama);
tvAlamat.setText(alamat);
}
private void initialize()
{
tvAlamat = (TextView) findViewById(R.id.alamatTempatMakan);
tvNama = (TextView) findViewById(R.id.namaTempatMakan);
btnGetDirection = (Button) findViewById(R.id.btnDirection);
btnGetDirection.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
Bundle bundle = new Bundle();
bundle.putDouble(MainActivity.KEY_LAT_ASAL, lokasiAwal.latitude);
bundle.putDouble(MainActivity.KEY_LNG_ASAL, lokasiAwal.longitude);
bundle.putDouble(MainActivity.KEY_LAT_TUJUAN, lokasiTujuan.latitude);
bundle.putDouble(MainActivity.KEY_LNG_TUJUAN, lokasiTujuan.longitude);
bundle.putString(MainActivity.KEY_NAMA, nama);
Intent intent = new Intent(this, DirectionActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
}
TempatMakan.java
public class TempatMakan
{
private int id;
private String nama;
private String alamat;
private double lat;
private double lng;
public TempatMakan()
{
//TODO Auto-generated constructor stub
}
public TempatMakan(int id, String nama, String alamat, double lat, double lng)
{
super();
this.id = id;
this.nama = nama;
this.alamat = alamat;
this.lat = lat;
this.lng = lng;
}
public String getNama()
{
return nama;
}
public void setNama(String nama)
{
this.nama = nama;
}
public String getAlamat()
{
return alamat;
}
public void setAlamat(String alamat)
{
this.alamat = alamat;
}
public double getLat()
{
return lat;
}
public void setLat(double lat)
{
this.lat = lat;
}
public double getLng()
{
return lng;
}
public void setLng(double lng)
{
this.lng = lng;
}
}
ce lien vous aidera à wptrafficanalyzer./blog/...
Gall merci, mais j'ai encore confuse comment mettre de la durée du voyage la durée dans mon programme, j'essaie de combiner mon programme n le tutoriel mais je ne peux toujours pas
Gall merci, mais j'ai encore confuse comment mettre de la durée du voyage la durée dans mon programme, j'essaie de combiner mon programme n le tutoriel mais je ne peux toujours pas
OriginalL'auteur Muhammad Agessy Barazi | 2013-05-26
Vous devez vous connecter pour publier un commentaire.
Google Directions Réponse JSON a un objet appelé la Distance et la Durée dans les "PATTES" de tableau, comme ceci :
Ainsi, vous pouvez essayer d'analyser la distance et la durée (si vous en avez besoin) dans votre application.
Peut-être comme ceci :
oh, et de mettre les jambes de la matrice de l'analyse à l'intérieur de la ArrayTempatMakan de l'analyse. Je peux obtenir la distance et la durée à l'aide de Jackson parser JSON, donc vous devriez être en mesure de le faire avec org.JSON analyseur.
Bonne chance ^^
EDIT :
Dans ce
getDirection (JSONObject jObj)
méthode que Vous avez réussi à récupérerobjLegs
ici, vous devez obtenir la Distance et la Durée au sein deobjLegs
Je pense que vous devriez ajouter ci-dessous
objLegs
:Là, je crois que vous devriez être en mesure de saisir la valeur, après cela, vous pouvez simplement ajouter de la valeur à votre liste de résultats.
Si vous ne parvenez toujours pas à insérer la distance et la durée, veuillez inclure le TempatMakan classe sur votre poste.
EDIT 2 :
Déclarer la distance et la durée de chaîne à l'intérieur de votre TempatMakan.Java :
à l'intérieur de votre constructeur :
puis déclarer respectifs des getters et setters pour
jarak
etdurasi
.À l'intérieur de votre
JSONHelper.java
, legetTempatMakanAll
méthode, ajouter ces :après cela, il suffit de modifier votre listview adaptateur pour afficher ces valeurs.
Bonne Chance, et Désolé, je ne peux pas vous donner un autre code ou de modifier votre projet, vous devez déterminer vous-même 🙂
P. S : Skripsi ou Tugas Kuliah?
u peut mettre votre programme dans mon programme?? je confondent encore sur parser json
Édité ma réponse, l'essayer 😀
J'ai ajouté un peu de classe dans mon post, s'il vous plaît vérifier 🙂
voici mon défi, vous pouvez le télécharger, dropbox.com/s/lm7j6m6f072glup/Tempat%20Makan%20Jogja.rar
OriginalL'auteur reidzeibel