BAB IV IMPLEMENTASI DAN PEMBAHASAN SISTEM 4.1 Implementasi dan Uji Coba Sistem Berdasarkan analisis dan perancangan sistem yang telah dibuat pada bab sebelumnya, maka untuk bab ini akan dibahas mengenai implementasi dan pembahasan secara menyeluruh dengan menyertakan tampilan aplikasi dan potongan kode program. 4.1.1 Implementasi Aplikasi Android Pada implemntasi aplikasi android, proses mengambil data maupun pengiriman data dari web service dilakukan oleh kelas JSONParser. public class JSONParser { String charset = "UTF-8"; HttpURLConnection conn; DataOutputStream wr; StringBuilder result; URL urlObj; JSONObject jObj = null; StringBuilder sbParams; String paramsString; public JSONObject makeHttpRequest(String url, String method,HashMap<String, String> params) { sbParams = new StringBuilder(); int i = 0; for (String key : params.keySet()) { try { if (i != 0){ sbParams.append("&"); } sbParams.append(key).append("=") .append(URLEncoder.encode(params.get(key), charset)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); Gambar 4.1 Cuplikan Program JSONParser 24 25 Gambar 4.1 menunjukan potongan program untuk proses mengambil data dari web service melalui URL, hasilnya berupa Object JSON. Kelas ini digunakan di kelas-kelas lain untuk mengambil data. Untuk program php terdapat pada lampiran halaman 41. 4.1.2 Implementasi Ambil Survei Untuk mengimplementasikan lokasi yang akan di survei mengacu gambar ..dimana pengguna akan memilih menu ambil survei kemudian akan mengambil gambar pertama dan kedua sekaligus latitude longetude. Gambar 4.2 Tampilan Menu Ambil Survei Gambar 4.2 pengguna akan melakukan pengambilan gambar dengan memfoto kerusakan jalan, lokasi pertama dan lokasi kedua. Aplikasi akan otomatis menangkap titik lokasi lat long yang nantinya akan dikirimkan ke web service kemudian ditambilkan membentuk garis yang akan menunjukan kerusakan jalan. Berikut adalah potongan program untuk proses pengambilan gambar pada android. 26 public int hasilCapture(int requestCode, int Intent data){ REQ_CODE = requestCode; RES_CODE = resultCode; DATA = data; int hasil=0; // if the result is capturing Image if (requestCode CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { if (resultCode == act.RESULT_OK) { hasil = 1; resultCode, == Gambar 4.3 Cuplikan Program Proses Pengambilan Gambar Cuplikan program gambar 4.3 menunjukan proses pemanggilan fitur camera pada aplikasi ini yang kemudian akan digunakan untuk proses pengambilan gambar. Android akan mengambil gambar kerusakan jalan dan sekaligus latitude dan longitude lokasi kerusakan jalan, kemudian mengirimkannya ke web service. Setelah itu web service akan mengambil parameter latitude dan longitude yang dikirimkan android, kemudian akan disimpan dalam ArrayLis. 27 private void updateWithNewLocation(Location location) { TextView myLocationText = (TextView) findViewById(R.id.tvLokasi); String latLongString; if (location != null) { double lat = location.getLatitude(); double lng = location.getLongitude(); double iLat = lat * 1000000000; double iLng = lng * 1000000000; _Lat = (long) iLat; _Lng = (long) iLng; latLongString = "Posisi Anda : \n Lat:" + lat + "\nLong:" + lng; pDialog.dismiss(); } else { _Lat = 0; _Lng = 0; pDialog.dismiss(); latLongString = "Lokasi Tidak Ditemukan"; showAlertGps("Aktifkan GPS"); } Log.i("lokasi", "Latitude : "+_Lat+" Longitude : "+_Lng); myLocationText.setText(latLongString); } Gambar 4.4 Cuplikan Program Mengambil Latitude Longitude Cuplikan program gambar 4.4 digunakan sebagai proses untuk menangkap atau mengambil titik lokasi saat pengambilan foto yang nantinya akan di kirimkan disimpan kemudian dengan web service akan ditampilkan kembali. 4.1.3 Implementasi Hasil Survei Mengacu gambar 3.9 sesuai rancangan pengguna atau admin kantor akan dapat memilih menu hasil survei dimana akan terdapat list lokasi-lokasi dari survei yang dilakukan. 28 Gambar 4.5 Tampilan Menu List Lokasi Hasil Survei Gambar 4.5 menunjukan list hasil survei yang merupakan nama-nama lokasi survei, untuk melihat detai hasil survei ini pengguna dapat klik salah satu list yang akan menuju pada maps sekaligus akan melihat lokasi kerusakan jalan yang ditandai dengan warna-warna kerusakan jalan. 29 private ArrayList<DataSurvei.Lokasi>getLokasiById(ArrayList<DataSurv ei.Lokasi> datalokasi, String idsurvei){ DataSurvei oSurvei = new DataSurvei(); ArrayList<DataSurvei.Lokasi> lokasi = new ArrayList<>(); int n=datalokasi.size(); for(int i=0; i<n; i++){ Log.d("isi lokasi-"+i, "= "+datalokasi.get(i).getIdsurvei()); DataSurvei.Lokasi oLokasi = oSurvei.new Lokasi(); if(datalokasi.get(i).getIdsurvei().equalsIgnoreCase(idsurvei )){ oLokasi.setIdSurvei(datalokasi.get(i).getIdsurvei()); oLokasi.setNamalokasi(datalokasi.get(i).getNamalokasi()); oLokasi.setFoto(datalokasi.get(i).getFoto()); oLokasi.setLatitude(datalokasi.get(i).getLatitude()); oLokasi.setLongitude(datalokasi.get(i).getLongitude()); oLokasi.setKetlokasi(datalokasi.get(i).getKetlokasi()); lokasi.add(oLokasi); } } Log.d("idsurvei lokasi ", ""+idsurvei); Log.d("hasil filter lokasi ", ""+lokasi); return lokasi; } } Gambar 4.6 Cuplikan Program Menyimpan Hasil Survei Pada List Potongan kode program gambar 4.6 adalah class TampilActivity extends ListActivity digunakan untuk mengambil id masing masing variabel yang nantinya akan ditampilkan dengan mengambil dari ArrayList kemudian menggunakan parsing data dari JSON dan dengan kelas HashMap akan menampilkan dalam tampilan map. 30 4.1.4 Implementasi Menciptakan Garis Warna Untuk mengimplementasikan detail lokasi mengacu pada rancangan gambar 3.9 pengguna dapat melihat lokasi kerusakan jalan, kondisi jalan dan panjang kerusakan jalan. Gambar 4.7 Tampilan Lokasi Kerusakan Jalan Gambar 4.7 menunjukan tampilan yang akan terlihat oleh user lokasi kerusakan jalan beserta keterangannya. Warna yang tampil akan berbeda sesuai panjang kerusakan. Pada penelitian ini untuk menentukan warna berdasarkan jarak mengacu Tabel 2.3 Kriteria kerusakan jalan memanjang. Log.d("jarak ", ""+jaraknya); String[] jaraks = jaraknya.split(" "); double jarak = Double.parseDouble(jaraks[0]); Log.d("ambil jarak km ", ""+jarak); if(jarak <= 1.0){ lineOptions.color(Color.YELLOW); }else if(jarak >= 1.0 && jarak <=2.0){ lineOptions.color(Color.GREEN); }else { lineOptions.color(Color.RED);} Gambar 4.8 Cuplikan Program Untuk Menciptakan Warna Garis 31 Potongan program gambar 4.8 digunkana untuk menciptkan garis yang berwarna beda berdasarkan panjang kerusakan jalan, garis yang tampil berwarna kuning berarti kerusakan ringan berdasarkan panjang kerusakan kurang dari 1 km, untuk warna hijau kerusakan sedang berdasarkan panjang kerusakan lebih dari 1 km – kurang dari 2 km, kemudian untuk warna merah kerusakn berat berdasarkan panjang kerusakan lebih dari 3 km. private List<LatLng> decodePoly(String encoded) { List<LatLng> 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 p = new LatLng((((double) lat / 1E5)), (((double) lng / 1E5))); poly.add(p); } return poly; } } Gmabar 4.9 Cuplikan Program Membuat Garis PolyLine 32 Cuplikan program gambar 4.9 digunakan untuk menciptakan atau mengkonversi polyline yang dikodekan dan poligon sebelum ditampilkan menjadi garis yang berwarna dalam google maps , lintang dan bujur yang menentukan polyline atau polygon disimpan sebagai string kemudian akan di transfer oleh json yang kemudian google maaps akan meresponnya kemudian ditampilkan dalam tampilan garis. 4.2 Pembahasan Sistem Pada tahap ini akan dijabarkan pembahasan sistem yang telah diimplementasikan sesuai kebutuhan sistem. 4.2.1 Proses Pertukaran Data Dengan JSON Dalam penelitian ini untuk proses mengambil data menggunakan JSONParser dari web service melalui URL, hasilnya berupa Object JSON. Kelas ini digunakan di kelas-kelas lain untuk mengambil data. Data dari android berupa longitude latitude dan foto akan digenerik menjadi kode-kode bineri yang nantinya akan terbaca oleh web service kemudian ditampilkan kembali pada aplikasi android. 4.2.2 Proses Ambil Gambar Pada proses ambil gambar seperti gambar 4.1 user akan melakukan survei dengan memilih menu buat survei kemudian aplikasi akan siap untuk mengambil gambar. Pada tahap ini pada saat user memilih menu buat survei aplikasi akan langsung memunculkan fitur camera, pada fitur ini tipe camera maupun ukuran file gambar tidak berpengaruh pada aplikasi ini, hanya saja jika untuk gambar dengan ukuran resolusi besar kemungkian dalam proses ulpoad akan lebih lama 33 proses ini juga akan bergantung pada kecepatan koneksi internet pada smartphone. Merujuk gambar 4.1 terlihat pengambilan gambar akan dilakukan dua kali, pengambilan pada titik pertama dan titik kedua. Pada saat pengambilan gambar titik pertama latitude longitude akan otomatis tertangkap dan terlihat begitu pula untuk pengambilan gambar yang kedua. Setelah kedua titik lokasi dari lokasi awal dan lokasi akhir didapatkan kemudian user melakukan upload to server yang nantinya data lat long dan foto akan tersimpan pada databse. Latitude longitude itu sendiri akan digunakan untuk menciptakan garis memanjang dari dua titik lotitude longitude itu nantinya akan menciptakan tarikan garis polyline yang nantinya juga akan mempunyai warna berbeda sesuai dengan panjangnya. 4.2.3 Proses Simpan Data Data berupa gambar dan latitude longitude yang sudah diambil akan disimpan terlebih dahulu ke dalam database sebelum ditampilkan pada menu Hasil Survei. 34 Gambar 4.10 Tampilan Tabel Data Gambar dan Lokasi Pada Databse Gambar 4.10 menunjukan tabel database yang menyimpan data dari hasil survei data tersebut diantaranya seperti latitude longitude, foto kondisi jalan, keterangan kerusakan jalan, tanggal dan jam pengambilan survei. Semua data yang telah disimpan akan ditampilkan bersamaan dengan lokasi kerusakan jalan, seperti foto kondisi jalan akan tampil pada marker pada lokasi dan keterangan kerusakan jalan akan tampil pada list. Pada tahap penyimpanan data JSON dan web service sangat berbperan penting, karena untuk mengirimkan data diperlukan parsing data dari json yang akan diterma web service. 4.2.4 Proses Menampilkan Hasil Survei Pada proses ini akan ditampilkan hasil survei yang berupa warna garis sesuai panjang kerusakan jalan, garis yang tampil akan berwarna berbeda sesuai panjang kerusakan. Proses menciptakan garis dengan warna yang berbeda berdasarkan panjang kerusakan jalan merupakan proses utama pada aplikasi ini. Gambar 4.7 menunjukan bahwa akan muncul tiga warna yang berbeda, warna tersebut akan terbuat sesuai panjang kerusakan jika panjang kurang dari 35 satu kilometer maka akan tampil warna kuning, jika kerusakan jalan panjang lebih dari satu kilometer dan kurang dari dua kilometer maka akan tampil warna hijau dan jika panjang kerusakan lebih dari tiga kilometer maka akan tampil warna merah. Perbedaan warna yang tampil pada lokasi kerusakan jalan akan menunjukan kategori kerusakan ringan, sedang dan berat, untuk warna kuning akan digabarkan dengan warna kuning untuk warna hijau menunjukan kerusakan sedang dan untuk warna merah untuk kerusakan berat. 4.2.5 Proses Menampilkan Jarak dari Google Map Pada aplikasi ini seperti pada tampilan hasil akhir akan menampilkan garis warna marker beserta jarak pengukuran, dalam menampilkan jarak dalam satuan kilometer disini menggunakan webservice google map dan memanfaatkan parsing data menggunakan json. Untuk mendapatkan hasilnya maka perlu juga menggunakan poin sistem World Geodetic System (WGS84) titik pada dunia. private String getDirectionsUrl(LatLng origin,LatLng dest){ String str_origin = "origin="+origin.latitude+","+origin.longitude; String str_dest = "destination="+dest.latitude+","+dest.longitude; String sensor = "sensor=false"; String parameters = str_origin+"&"+str_dest+"&"+sensor; String output = "json"; String url = "https://maps.googleapis.com/maps/api/directions/"+output+"? "+parameters; return url; } Gambar 4.11 Cuplikan Program menampilkan Jarak 36 Pada method gambar 4.11 cuplikan program menampilkan jarak memiliki parameter origin dan destination, origin maksudnya adalah titik latitude dan longitude lokasi asal atau lokasi awal, sedangkan destination adalah titik latitude dan longitude lokasi tujuan lokasi kedua. Dalam method ini terdapat url API google maps yang berfungsi sebagai web service yang menyediakan sumber data terhadap lokasi tersebut. Kemudian method getDirectionsUrl() tersebut dipanggil dengan cara seperti berikut : LatLng origin = markerPoints.get(0); //diperoleh dari hasil survei LatLng dest = markerPoints.get(1); // diperoleh dari hasil survei // Getting URL to the Google Directions API String url = getDirectionsUrl(origin, dest); //Log.d("getDirectionUrl = ", ""+url); DownloadTask downloadTask = new DownloadTask(); // Start downloading json data from Google Directions API downloadTask.execute(url); Gambar 4.12 Cuplikan Program Method getDirectionsUrl() Kemudian hasil dari method getDirectionsUrl tersebut digunakan untuk mengambil data dari google API menggunakan method download.execute(url); hasil dari proses ini nantinya akan menghasilkan data berupa jarak dari google map yang kemudian digunakan untuk menentukan warna garis pada peta menggunakan method pada gambar 4.8, yang dimana akan dipanggil menggunakan protected void onPostExecute() yang didalamnya terdapat method seperti berikut: 37 if(j==0){ // Ambil jarak dari API google distance = point.get("distance"); continue; }else if(j==1){ // Ambil Estimasi dari API google duration = point.get("duration"); continue;} Gambar 4.13 Cuplikan program onPostExecute() 4.3 Hasil Pengujian Aplikasi / Kuesioner Aplikasi Pada penelitian ini pengujian aplikasi akan dilakukan kepada beberapa orang untuk menjadi semple hasil aplikasi dengan penilaian huruf sangat baik, baik, cukup dan kurang. Pengujian ini melibatkan tiga penguji yang melakukan survei kemudian memberikan penilaian pada fitur-fitur aplikasi dari pengujian terbut didapat kesimpulan dari tiga pengguna pada fitur ambil foto dua pengguna menilai sangat baik SB dan satu pengguna baik B, untuk fitur koordinat semua pengguna menilai baikB, fitur upload server dua pngguna menilai baik B dan satu pengguna cukup C, fitur hasil survei dua pengguna menilai SB, dan satu pengguna B dan untuk penggunaan aplikasi semua pengguna menilai B. Untuk melihat hasil kuesioner aplikasi terdapat pada halaman lampiran Tabel lampiran 1.1.