Documente Academic
Documente Profesional
Documente Cultură
angkot;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Dialog;
/**
* Created by Atief on 13/09/2016.
*/
public class Rute extends FragmentActivity implements GoogleMap.OnMapClickListener,
GoogleMap.OnMapLongClickListener{
// DB
SQLHelper dbHelper;
Cursor cursor;
// Google Maps
GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rute);
// create DB
dbHelper = new SQLHelper(this);
try {
dbHelper.createDataBase();
}
catch (Exception ioe) {
Toast.makeText(getApplicationContext(), "Gagal",
Toast.LENGTH_LONG).show();
}
// BUAT MAP
if(googleMap == null){
googleMap = ((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(-
6.2920222, 106.8774828), 12.0f));
if(googleMap != null){
googleMap = ((SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
}
}
// event map
googleMap.setOnMapClickListener(this);
googleMap.setOnMapLongClickListener(this);
adapter_spinner_tujuan.setDropDownViewResource(android.R.layout.simple_spinner_drop
down_item);
spinner.setAdapter(adapter_spinner_tujuan);
spinner.setBackgroundColor(Color.WHITE);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
// your coordinate
double latUser = __global_yourCoordinate_exist.latitude;
double lngUser = __global_yourCoordinate_exist.longitude;
//
========================================================================
// CORE SCRIPT
// fungsi cari simpul awal dan tujuan, buat graph sampai
algoritma dijkstra
//
========================================================================
try {
startingScript(latUser, lngUser, lat_endposition,
lng_endposition);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
Toast.makeText(getApplicationContext(), "Tap pada peta
untuk menentukan posisi Anda", Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});//setOnItemSelectedListener
@Override
public void onMapLongClick(LatLng arg0) {
// TODO Auto-generated method stub
@Override
public void onMapClick(LatLng arg0) {
// TODO Auto-generated method stub
__global_yourCoordinate_exist = arg0;
if(endposition != null){
//
========================================================================
// CORE SCRIPT
// fungsi cari simpul awal dan tujuan, buat graph sampai algoritma
dijkstra
//
========================================================================
try {
startingScript(latUser, lngUser, lat_endposition, lng_endposition);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
Toast.makeText(getApplicationContext(), "pilih SMK dulu",
Toast.LENGTH_LONG).show();
}
/*
* ===========
* CORE SCRIPT
* ===========
*
* @fungsi utama
* (1) mendapatkan koordinat awal dan akhir di sekitar jalur angkutan umum
*
* (2) koordinat awal kemudian di konversi menjadi simpul awal
* dan koordinat akhir di konversi menjadi simpul akhir
*
* (3) simpul awal dan akhir kemudian dijadikan 'inputan' untuk perhitungan
algoritma dijsktra
*
* (4) setelah dilakukan perhitungan, didapatkan jalur terpendek lalu digambar
jalurnya menggunakan polyline
*
* @parameter
* latUser dan lngUser : koordinat posisi user
* lat_endposition dan lng_endposition : koordinat posisi SMK
*
* @return
* no return
*/
public void startingScript(double latUser, double lngUser, double
lat_endposition, double lng_endposition) throws JSONException{
// ALGORITMA DIJKSTRA
// ==========================================
Dijkstra algo = new Dijkstra();
algo.jalurTerpendek(__global_graphArray, __global_simpul_awal,
__global_simpul_akhir);
}else{
// return jalur terpendek; example 1->5->6->7
String[] exp = algo.jalur_terpendek1.split("->");
/*
* @fungsi
* menggambar jalur angkutan umum
* menentukan jenis angkutan umum yang melewati jalur tsb
* membuat marker untuk your position dan destination position
* @parameter
* exp[] : jalur terpendek; example 1->5->6->7
* @return
* no return
*/
public void drawJalur(String alg, String[] exp) throws JSONException{
int start = 0;
// GAMBAR JALURNYA
// ======================
dbHelper = new SQLHelper(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
// get JSON
JSONObject jObject = new JSONObject(json);
JSONArray jArrCoordinates = jObject.getJSONArray("coordinates");
// buat rute
PolylineOptions jalurBiasa = new PolylineOptions();
jalurBiasa.addAll(lat_lng).width(5).color(0xff4b9efa).geodesic(true);
googleMap.addPolyline(jalurBiasa);
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
// destination position
googleMap.addMarker(new MarkerOptions()
.position(endx)
.title("Destination position")
.snippet("Destination position")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
int ganti_a = 0;
int ganti_b = 0;
int simpulAwalDijkstra = Integer.parseInt(exp[0]);
// ada simpul baru di awal (10) dan di akhir (11), example 10-
>11
if( exp[0].equals(String.valueOf(__global_maxRow0)) &&
exp[1].equals(String.valueOf(__global_maxRow1)) ){
if(String.valueOf(__global_maxRow0).equals(akhir[0])){
ganti_b = Integer.parseInt(akhir[1]);
}else{
ganti_b = Integer.parseInt(akhir[0]);
}
if(String.valueOf(ganti_b).equals(awal[0])){
ganti_a = Integer.parseInt(awal[1]);
}else{
ganti_a = Integer.parseInt(awal[0]);
}
}
else{
// ada simpul baru di awal (10), example 10->5
// maka cari simpul awal yg oldnya
if( exp[0].equals(String.valueOf(__global_maxRow0)) ){
if(exp[1].equals(awal[1])){
ganti_a = Integer.parseInt(awal[0]);
}else{
ganti_a = Integer.parseInt(awal[1]);
}
ganti_b = Integer.parseInt(exp[1]);
}
// ada simpul baru di akhir (10), example 5->10
// maka cari simpul akhir yg oldnya
else if( exp[1].equals(String.valueOf(__global_maxRow0)) ){
if(exp[0].equals(akhir[0])){
ganti_b = Integer.parseInt(akhir[1]);
}else{
ganti_b = Integer.parseInt(akhir[0]);
}
ganti_a = Integer.parseInt(exp[0]);
}
// tidak ada penambahan simpul sama sekali
else{
ganti_a = Integer.parseInt(exp[0]);
ganti_b = Integer.parseInt(exp[1]);
}
}
/*
// 4 == 4
if(exp[0].equals(awal[0])){
ganti_a = Integer.parseInt(awal[0]);
//ganti_b = Integer.parseInt(awal[1]);
}else{
ganti_a = Integer.parseInt(awal[1]);
//ganti_b = Integer.parseInt(awal[0]);
}
if(String.valueOf(ganti_a).equals(akhir[0])){
ganti_b = Integer.parseInt(akhir[1]);
//ganti_b = Integer.parseInt(awal[1]);
}else{
ganti_b = Integer.parseInt(akhir[0]);
//ganti_b = Integer.parseInt(awal[0]);
}
*/
/*
* // 4 == 4
if(exp[0].equals(awal[0])){
ganti_a = Integer.parseInt(akhir[0]);
ganti_b = Integer.parseInt(awal[1]);
}else{
ganti_a = Integer.parseInt(awal[1]);
ganti_b = Integer.parseInt(akhir[0]);
}
*/
}
// hasil algo lebih dr 2 : 4->5->8->7-> etc ..
else{
if(exp[1].equals(awal[1])){ // 5 == 5
ganti_a = Integer.parseInt(awal[0]); // hasil 4
}else{
ganti_a = Integer.parseInt(awal[1]); // hasil 5
}
listAngkutanUmum.put("angkutan" + e, listAngkutan);
// get coordinate
cursor = db.rawQuery("SELECT jalur FROM graph where simpul_awal = '" +
simpulAwalDijkstra + "'", null);
cursor.moveToFirst();
String json_coordinate = cursor.getString(0).toString();
// manipulating JSON
JSONObject jObject = new JSONObject(json_coordinate);
JSONArray jArrCoordinates = jObject.getJSONArray("coordinates");
JSONArray latlngs = jArrCoordinates.getJSONArray(0);
// first latlng
Double lats = latlngs.getDouble(0);
Double lngs = latlngs.getDouble(1);
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(lats, lngs))
.title("Angkot")
.snippet(siAngkot)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.car))).showInfoWindow();
// die()
return;
}
// ada 2 atau lebih angkot yg melewati jalur dari awal sampek akhir
int banyakAngkot = 0;
int indexUrut = 0;
int indexSimpulAngkot = 1;
int lengthAngkutan = listAngkutanUmum.size();
Map<String, ArrayList> angkotFix = new HashMap<String, ArrayList>();
if(en > 0 ){
ArrayList listSekarang1 = listAngkutanUmum.get("angkutan0");
ArrayList listSelanjutnya1 = listAngkutanUmum.get("angkutan" + en);
// intersection
listSekarang1.retainAll(listSelanjutnya1);
listSimpulAngkot.remove(indexSimpulAngkot);
--indexSimpulAngkot;
listAngkutanUmum.remove("angkutan" + en);
//if(en == 1) break;
listAngkutanUmum.get("angkutan0").clear();
listAngkutanUmum.put("angkutan0", tempDalam);
++indexUrut;
++indexSimpulAngkot;
}
}
// get JSON
JSONObject jObject = new JSONObject(json);
JSONArray jArrCoordinates = jObject.getJSONArray("coordinates");
if(r == 0){
googleMap.addMarker(new MarkerOptions()
.position(simpulAngkot)
.title("Angkot")
.snippet(siAngkot)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.car))).showInfoWindow();
}else{
googleMap.addMarker(new MarkerOptions()
.position(simpulAngkot)
.title("Angkot")
.snippet(siAngkot)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.car)));
}
}
int fix_simpul_awal = 0;
if(statusObject == "awal"){
// return
__global_old_simpul_awal = node_simpul_awal0 + "-" +
node_simpul_awal1;
__global_simpul_awal = fix_simpul_awal; // misal 0
}else{
// return
__global_old_simpul_akhir = node_simpul_awal0 + "-" +
node_simpul_awal1;
__global_simpul_akhir = fix_simpul_awal; // misal 0
}
}
// jika koordinat berada diantara simpul 5 dan simpul 4 atau simpul 4 dan
simpul 5
// maka perlu menambahkan simpul baru
else if(status.equals("jalur_double")){
// return
if(statusObject == "awal"){
// return
__global_old_simpul_awal = obj_tambah.simpul_lama;
__global_simpul_awal = obj_tambah.simpul_baru; // misal 6
__global_graphArray = obj_tambah.modif_graph; // graph[][]
}else{
// cari simpul (5,4) dan (4-5) di Tambah_simpul.java
Tambah_simpul obj_tambah = new Tambah_simpul();
obj_tambah.dobelSimpul(node_simpul_awal0, node_simpul_awal1,
index_coordinate_json,
this, __global_graphArray, 501
); // 501 : row id yg baru
// return
__global_old_simpul_akhir = obj_tambah.simpul_lama;
__global_simpul_akhir = obj_tambah.simpul_baru; // misal 4
__global_graphArray = obj_tambah.modif_graph; // graph[][]
}
// jika koordinat hanya berada diantara simpul 5 dan simpul 4
// maka perlu menambahkan simpul baru
else if(status.equals("jalur_single")){
if(statusObject == "awal"){
// return
__global_old_simpul_awal = obj_tambah1.simpul_lama;
__global_simpul_awal = obj_tambah1.simpul_baru; // misal 6
__global_graphArray = obj_tambah1.modif_graph; // graph[][]
}else{
// return
__global_old_simpul_akhir = obj_tambah1.simpul_lama;
__global_simpul_akhir = obj_tambah1.simpul_baru; // misal 4
__global_graphArray = obj_tambah1.modif_graph; // graph[][]
}
}
}
/*
* @fungsi
* delete temporary record DB
* (temporary ini digunakan untuk menampung sementara simpul baru)
* @parameter
* no parameter
* @return
* no returen
*/
public void deleteTemporaryRecord(){
// delete DB
final SQLiteDatabase dbDelete = dbHelper.getWritableDatabase();
// return
__global_maxRow0 = (max_simpul_db+1);
__global_maxRow1 = (max_simpul_db+2);
}
}