Senin, 20 Mei 2019

PHP MLearning TF IDF Deteksi Bahasa

dataset.csv

sentence language
Hello, do you know what time the movie is tonight? english
I am calling to make reservations english
I would like to know if it is at all possible to check in english
What time does the swimming pool open? english
Where is the games room? english
We must call the police. english
How many pupils are there in your school? english
Twenty litres of unleaded, please. english
Is it near here? english
Do I have to change? english
Which counter do I go to to change money? english
I would like two postcards, please. english
There was a big explosion. english
Where is the television room? english
Where's the nearest railway station? english
The storms caused flooding. english
Where is the duty free shop? english
I witnessed it happening. english
I would like two postcards, please. english
How about going to the cinema? english
Où est la boulangerie? french
Je voudrais une boîte de chocolats. french
Y a-t-il un autre hôtel près d'ici? french
Vérifiez la batterie, s'il vous plaît. french
La banque ouvre à quelle heure? french
Est-ce que je peux l'écouter? french
Vous devez faire une déclaration de perte. french
Combien d'élèves y a-t-il dans votre collège? french
Est-ce qu-il y a un car qui va à l'aéroport? french
Nous voudrions rester jusqu'à dimanche prochain. french
Je ne comprends pas. french
Voici une ordonnance pour des comprimés. french
Je n'ai qu'un billet de cinquante francs. french
À quelle heure commence la dernière séance? french
Faut-il changer? french
Il n'avait pas la priorité. french
Puis-je prendre les places à l'avance? french
Elle a trente et un ans. french
Pour aller à la pharmacie, s'il vous plaît? french
Voulez-vous me peser ce colis, s'il vous plaît. french
Ciao, ti va di andare al cinema? italian
Mi sai dire quando aprono il negozio? italian
Quando c'è l'ultimo autobus? italian
Lo posso provare addosso? italian
C'è una presa elettrica per il nostro caravan? italian
Vorrei una scatola di cioccolatini. italian
Non e' stata colpa mia. italian
Sono molto scarso in fisica. italian
Vorrei del vino bianco. italian
Me lo puo' spiegare, per piacere. italian
Vorrei chiamare a spese del ricevente. italian
Ho perso il mio passaporto. italian
Posso avere i biglietti del cinema per favore? italian
Vorrei un pacchetto di biscotti. italian
Quali materie studi (studia)? italian
Quanto frequenti sono gli autobus? italian
A che ora sara' la prossima raccolta? italian
Vorrei prenotare un posto. italian
Per favore, quanto costa spedire una lettera in Germania? italian
Mio padre e' un programmatore. italian



code sbb:
<?php 

declare(strict_types=1);
namespace PhpmlExamples;

include 'vendor/autoload.php';

use Phpml\Dataset\CsvDataset;
use Phpml\Dataset\ArrayDataset;
use Phpml\FeatureExtraction\TokenCountVectorizer;
use Phpml\Tokenization\WordTokenizer;
use Phpml\CrossValidation\StratifiedRandomSplit;
use Phpml\FeatureExtraction\TfIdfTransformer;
use Phpml\Metric\Accuracy;
use Phpml\Classification\SVC;
use Phpml\SupportVectorMachine\Kernel;

$dataset = new CsvDataset('data/languages.csv', 1);
$vectorizer = new TokenCountVectorizer(new WordTokenizer());
$tfIdfTransformer = new TfIdfTransformer();
$samples = [];
foreach ($dataset->getSamples() as $sample) {
    $samples[] = $sample[0];
 //echo $sample[0]."<br>";
}
$vectorizer->fit($samples);//samples=array
cetak0($samples);

$vectorizer->transform($samples);
//cetak($samples);

$tfIdfTransformer->fit($samples);
$tfIdfTransformer->transform($samples);
//cetak($samples);

$dt=$dataset->getTargets();//english,italia,french
//cetak0($dt);

$dataset = new ArrayDataset($samples, $dt);//object
//vard($dataset);

$randomSplit = new StratifiedRandomSplit($dataset, 0.1);
//vard($randomSplit);

$classifier = new SVC(Kernel::RBF, 10000);

$AA=$randomSplit->getTrainSamples();
$BB=$randomSplit->getTrainLabels();

echo"<h1>Samples - Label</h1>";
//cetak($AA);
//echo"<hr>";
//cetak0($BB);

$CC=$randomSplit->getTestSamples();
//echo"<hr>";
//cetak($CC);

$DD=$randomSplit->getTestLabels();
echo"<hr>";
cetak0($DD);



$classifier->train($AA, $BB);
$predictedLabels = $classifier->predict($CC);
echo"<hr>";
cetak0($predictedLabels);

echo 'Accuracy: '.Accuracy::score($DD, $predictedLabels);



function tipe($x){
 echo gettype($x)."<hr>";
 return "";
}

function vard($x){
 echo  var_dump($x)."<hr>";
  return "";
}

function cetak($x){
 $p=count($x);
 for($i=0;$i<$p;$i++){
  $q=count($x[$i]);
  for($j=0;$j<$q;$j++){
   echo $x[$i][$j]."#";
  }
  echo"<br>";
 }
 return "";
}



function cetak0($x){
 $p=count($x);
 for($i=0;$i<$p;$i++){
   echo $x[$i]."#";
 }
 return "";
}
?>

Samples - Label

download code
english#english#french#french#italian#italian#
english#english#french#french#italian#italian#Accuracy: 1




Kamis, 04 April 2019

Alternatif Judul WEB + havershine



aplikasi pengiriman barang menggunakan web berbasis jarak 
metode : havershine (penghitungan jarak) dan bubblesort (pengurutan jarak dari dekat ke jauh)
aktornya ada: admin, kurir, customer
1.admin mendata list barang yang hendak dikirim dan alamat tujuan
2.jadi nanti admin akan menunjuk kurir A akan mengirim barang apa sj, kurir B akan mengirim barang apa sj dst
3.kurir akan mengecek di aplikasi, manakah yang akan dia kirim dahulu berdasarkan jaraj terdekat dengannya (menggunakan metode pengurutan jarak / havershine)
4.customer yang telah menerima barang, akan melalukan verifikasi bahwa barang sudah sampai
5.jika customer tiadk melakukan verifikasi, maka kurir bisa juga melalukan verifikasi bahwa barang sudah sampai


aplikasi informasi loaksi wisata berbasis jarak 
metode : havershine (penghitungan jarak) dan bubblesort (pengurutan jarak dari dekat ke jauh)
aktornya ada: admin, guest

1.admin input data objek objek wisata.....berdasarkan kategori:kuliner, bahari, religi, shooping dll
2.guest dapat melihat peta lokasi wisata
3.guest dapat mensorting / mengurutkan objek wisata tsb berdasarkan kategori/ jarak
4.guest dapat melihat detail objek wisata yang dia pilih
5.guest dapat melihat posisi dia di peta




Sabtu, 30 Maret 2019

Kode Limited, Unlimited dan AJAX


Kode Autogenerate yang jumlahnya sedikit (<100):

  $sql="select `kd_user` from `$tbuser` order by `kd_user` desc";
  $jum= getJum($conn,$sql);
  $kd="ADM";
if($jum > 0){
$d=getField($conn,$sql);
    $idmax=$d['kd_user'];
$urut=substr($idmax,3,2)+1;//01
if($urut<10){$idmax="$kd"."0".$urut;}
else{$idmax="$kd".$urut;}
}
else{$idmax="$kd"."01";}
$kd_user=$idmax;

jadinya:
ADM01
ADM02
ADM03
dst...


Kode Autogenerate yang jumlahnya Unlimited (>100 ~):

 $sql="select `kd_daftar` from `$tbdaftar` order by `kd_daftar` desc";
  $q=mysqli_query($conn, $sql);
  $jum=mysqli_num_rows($q);
  $th=date("y");
  $bl=date("m")+0;if($bl<10){$bl="0".$bl;}

  $kd="REG".$th.$bl;
  if($jum > 0){
   $d=mysqli_fetch_array($q);
   $idmax=$d["kd_daftar"];
 
   $bul=substr($idmax,5,2);
   $tah=substr($idmax,3,2);
    if($bul==$bl && $tah==$th){
     $urut=substr($idmax,7,3)+1;
     if($urut<10){$idmax="$kd"."00".$urut;}
     else if($urut<100){$idmax="$kd"."0".$urut;}
     else{$idmax="$kd".$urut;}
    }//==
    else{
     $idmax="$kd"."001";
     } 
   }//jum>0
  else{$idmax="$kd"."001";}
  $kd_daftar=$idmax;

jadinya:
REG1903001
REG1903002
REG1903003
...
REG1904001
REG1904002
REG1904003
...
REG2001001
REG2001002
...



Konversi Tanggal ke Hari:

$tgl="2019-03-01";

$dayofweek = date('l', strtotime($tgl));//w =angka, l=nama hari dalam inggris
$hari="Senin";
if($dayofweek=="Sunday"){$hari="Minggu";}
else if($dayofweek=="Monday"){$hari="Senin";}
else if($dayofweek=="Tuesday"){$hari="Selasa";}
else if($dayofweek=="Wednesday"){$hari="Rabu";}
else if($dayofweek=="Thrusday"){$hari="Kamis";}
else if($dayofweek=="Friday"){$hari="Jumat";}
else if($dayofweek=="Saturday"){$hari="Sabtu";}



Konvversi Tanggal ke YMD

function BAL($tanggal){
$arr=split(" ",$tanggal);
if($arr[1]=="Januari" || $arr[1]=="January"){$bul="01";}
else if($arr[1]=="Februari" || $arr[1]=="February"){$bul="02";}
else if($arr[1]=="Maret" || $arr[1]=="March"){$bul="03";}
else if($arr[1]=="April" || $arr[1]=="April"){$bul="04";}
else if($arr[1]=="Mei"  || $arr[1]=="May"){$bul="05";}
else if($arr[1]=="Juni"  || $arr[1]=="June"){$bul="06";}
else if($arr[1]=="Juli"  || $arr[1]=="July"){$bul="07";}
else if($arr[1]=="Agustus"  || $arr[1]=="August"){$bul="08";}
else if($arr[1]=="September"  || $arr[1]=="September"){$bul="09";}
else if($arr[1]=="Oktober"  || $arr[1]=="October"){$bul="10";}
else if($arr[1]=="November"  || $arr[1]=="November"){$bul="11";}
else if($arr[1]=="Nopember"  || $arr[1]=="November"){$bul="11";}
else if($arr[1]=="Desember"  || $arr[1]=="December"){$bul="12";}
return "$arr[2]-$bul-$arr[0]";
}



Konversi YMD ke Indonesia

function WKT($sekarang){
$tanggal = substr($sekarang,8,2)+0;
$bulan = substr($sekarang,5,2);
$tahun = substr($sekarang,0,4);

$judul_bln=array(1=> "Januari", "Februari", "Maret", "April", "Mei","Juni", "Juli", "Agustus", "September","Oktober", "November", "Desember");
$wk=$tanggal." ".$judul_bln[(int)$bulan]." ".$tahun;
return $wk;
}



Konversi Nominal Ke Rupiah:
<?php function RP($rupiah){return number_format($rupiah,"2",",",".");}?> 


AJAX

Artinya:
saat saya pilih tanggal 13 maret 2019, lalu pilih klinik Umum, maka
pilihan jadwal yang dimunculkan hanyalah
data semua jadwal yang ada di hari tsb ( 13 maret 2019= SABTU), dan klinik yang di sediakan hanya yang kategori UMUM.


<script type="text/javascript">
var xmlHttp

function showKlinik(str){ 
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null){
 alert ("Browser tidak support HTTP Request")
 return
 } 
var tgl=document.getElementById("tanggal_periksa").value;

var url="getjadwal.php"
url=url+"?q="+str+"&tgl="+tgl+"&ket=ok"
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=SC1 
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function SC1() { 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ 
 document.getElementById("txtHint").innerHTML=xmlHttp.responseText 
 } 
}

function GetXmlHttpObject(){
var xmlHttp=null;
try{xmlHttp=new XMLHttpRequest();}
catch (e){
try{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}
  catch (e){xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}
 }
return xmlHttp;
}
</script>


PADA GUI/ LAYOUT:

<select class="form-control" name="klinik" id="klinik"  onChange="showKlinik(this.value)">
    <option>Pilih Klinik</option>
    <option value="Umum" <?php if($klinik=="Umum"){echo"selected";}?>>Umum</option>
    <option value="Gigi" <?php if($klinik=="Gigi"){echo"selected";}?>>Gigi</option>
  </select>

<div id="txtHint">
  <select class="form-control" name="kd_jadwal" id="kd_jadwal">
    <option>Pilih Jadwal</option>
  <?php
  $s="select * from `tb_jadwal`";
$q=getData($conn,$s);
foreach($q as $d){
$kd_jadwal0=$d["kd_jadwal"];
$jadwal=$d["hari"]." | ".$d["jam"];
echo"<option value='$kd_jadwal0' ";if($kd_jadwal0==$kd_jadwal){echo"selected";} echo">$kd_jadwal0 - $jadwal  </option>";
}
?>
  </select>
  </div>

+++++++++++++++++++++++++++++++++++++++++++++
getjadwal.php
  <?php
date_default_timezone_set("Asia/Jakarta");
require_once"konmysqli.php";

$q=$_GET["q"];
$tgl=BAL($_GET["tgl"]);

$dayofweek = date('l', strtotime($tgl));//w l
$hari="Senin";
if($dayofweek=="Sunday"){$hari="Minggu";}
else if($dayofweek=="Monday"){$hari="Senin";}
else if($dayofweek=="Tuesday"){$hari="Selasa";}
else if($dayofweek=="Wednesday"){$hari="Rabu";}
else if($dayofweek=="Thrusday"){$hari="Kamis";}
else if($dayofweek=="Friday"){$hari="Jumat";}
else if($dayofweek=="Saturday"){$hari="Sabtu";}
?>


  <select class="form-control" name="kd_jadwal" id="kd_jadwal">
    <option>Pilih Jadwal <?php echo $hari;?></option>
  <?php
  $s="select * from `tb_jadwal` where klinik='$q' and hari='$hari'";
$q=getData($conn,$s);
foreach($q as $d){
$kd_jadwal0=$d["kd_jadwal"];
$jadwal=$d["jam"];
$dokter=getDokter($conn,$d["nip_dokter"]);
echo"<option value='$kd_jadwal0' ";echo">$jadwal :$dokter </option>";
}
?>
  </select>
  
  <?php
  function getDokter($conn,$kode){
$field="nama_dokter";
$sql="SELECT `$field` FROM `tb_dokter` where `nip_dokter`='$kode'";
$rs=$conn->query($sql);
$rs->data_seek(0);
$row = $rs->fetch_assoc();
$rs->free();
    return $row[$field];
}
  
function getData($conn,$sql){
$rs=$conn->query($sql);
$rs->data_seek(0);
$arr = $rs->fetch_all(MYSQLI_ASSOC);
//foreach($arr as $row) {
//  echo $row['nama_kelas'] . '*<br>';
//}
$rs->free();
return $arr;
}

?>


<?php
function BAL($tanggal){
$arr=split(" ",$tanggal);
if($arr[1]=="Januari" || $arr[1]=="January"){$bul="01";}
else if($arr[1]=="Februari" || $arr[1]=="February"){$bul="02";}
else if($arr[1]=="Maret" || $arr[1]=="March"){$bul="03";}
else if($arr[1]=="April" || $arr[1]=="April"){$bul="04";}
else if($arr[1]=="Mei"  || $arr[1]=="May"){$bul="05";}
else if($arr[1]=="Juni"  || $arr[1]=="June"){$bul="06";}
else if($arr[1]=="Juli"  || $arr[1]=="July"){$bul="07";}
else if($arr[1]=="Agustus"  || $arr[1]=="August"){$bul="08";}
else if($arr[1]=="September"  || $arr[1]=="September"){$bul="09";}
else if($arr[1]=="Oktober"  || $arr[1]=="October"){$bul="10";}
else if($arr[1]=="November"  || $arr[1]=="November"){$bul="11";}
else if($arr[1]=="Nopember"  || $arr[1]=="November"){$bul="11";}
else if($arr[1]=="Desember"  || $arr[1]=="December"){$bul="12";}
return "$arr[2]-$bul-$arr[0]";
}
?>




Jumat, 15 Februari 2019

PHP AUTOCODE

 $sql="select `kode_ta` from `$tbtahunakademik` order by `kode_ta` desc";
  $q=mysqli_query($conn, $sql);
  $jum=mysqli_num_rows($q);
  $th=date("y");
  $bl=date("m")+0;if($bl<10){$bl="0".$bl;}

  $kd="THA".$th.$bl;//KEG1610001
  if($jum > 0){
   $d=mysqli_fetch_array($q);
   $idmax=$d["kode_ta"];
 
   $bul=substr($idmax,5,2);
   $tah=substr($idmax,3,2);
    if($bul==$bl && $tah==$th){
     $urut=substr($idmax,7,3)+1;
     if($urut<10){$idmax="$kd"."00".$urut;}
     else if($urut<100){$idmax="$kd"."0".$urut;}
     else{$idmax="$kd".$urut;}
    }//==
    else{
     $idmax="$kd"."001";
     } 
   }//jum>0
  else{$idmax="$kd"."001";}
  $kode_ta=$idmax;





atau

 $sql="select `kode_user` from `$tbuser` order by `kode_user` desc";
  $q=mysqli_query($conn, $sql);
  $jum=mysqli_num_rows($q);
  $kd="USR";
if($jum > 0){
$d=mysqli_fetch_array($q);
$idmax=$d["kode_user"];
$urut=substr($idmax,3,2)+1;//01
if($urut<10){$idmax="$kd"."0".$urut;}
else{$idmax="$kd".$urut;}
}
else{$idmax="$kd"."01";}

  $kode_user=$idmax;



Senin, 07 Januari 2019

APP HILL CLIMBING

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:apiKey="0Qnjnnx4kebwXWubnCMTZFF8ODK-v30euGnyIfw"
    >
<WebView
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    />
<ProgressBar android:id="@+id/ProgressBar" android:layout_centerInParent="true"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    style="?android:attr/progressBarStyleLarge"
    android:visibility="gone"/>
</LinearLayout>





package com.shifa.latihan1;


import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Toast;


public class SHC extends Activity {
private WebView mWebView;
String myCity="Posisi Anda",myLati="-6.353416,",myLongi="106.832510";
String myCity2="Posisi Anda",myLati2="-6.353416,",myLongi2="106.832510";
    LocationManager myLocationManager=null;
    ProgressDialog  dialog = null;
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.refresh, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.refresh:
        if (!myLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){   
                createGpsDisabledAlert();   
            }else{
              getLocation();
            }
        return true;
        case R.id.OfflineMode:
        startActivity(new Intent (this, SHC.class));
        return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
    
    @Override
    public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
        setContentView(R.layout.SHC);
           
      Intent io = this.getIntent();
    myLati=io.getStringExtra("myLati");
    myLongi=io.getStringExtra("myLongi");
    myCity=io.getStringExtra("myPosisi");
    
    myLati2=io.getStringExtra("latitude");
    myLongi2=io.getStringExtra("longitude");
    myCity2=io.getStringExtra("tujuan");
    
       
        dialog=new ProgressDialog(this);
        mWebView = (WebView) findViewById(R.id.webview);
       
        myLocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
        if (!myLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){   
           createGpsDisabledAlert();   
        } else{
        getLocation();
         }
        
    }
      
    @Override
    public void onResume() {
    super.onResume();
    }
    
    @Override
    public void onPause() {
      super.onPause();
    }
    
    @Override
    public void onStop() {
      super.onPause();
      remove();
    }
    
    public void remove() {
        myLocationManager.removeUpdates(onLocation);
    }
 
    LocationListener onLocation = new LocationListener() {
      public void onLocationChanged(Location location) {
      if (location != null) {
      Toast.makeText(getBaseContext(), "Take Of Map..", Toast.LENGTH_SHORT).show();
      StringBuilder buf=new StringBuilder("javascript:loadAtStart(");        
      buf.append(String.valueOf(location.getLatitude()));
      buf.append(",");
      buf.append(String.valueOf(location.getLongitude()));
      buf.append(",13)");
      mWebView.loadUrl(buf.toString());
      remove();
      Toast.makeText(getBaseContext(), "Lokasi didapatkan", Toast.LENGTH_SHORT).show();
      }
      }
      
      public void onProviderDisabled(String provider) {
      
      }
      
      public void onProviderEnabled(String provider) {
        // required for interface, not used
      }
      
      public void onStatusChanged(String provider, int status,Bundle extras) {
        // required for interface, not used
      }
    };
    
    private void createGpsDisabledAlert(){   
        AlertDialog.Builder builder = new AlertDialog.Builder(this);   
        builder.setMessage("GPS tidak aktif. Aktifkan sekarang?")   
             .setCancelable(false)
             .setPositiveButton("Aktifkan GPS",new DialogInterface.OnClickListener(){   
                  public void onClick(DialogInterface dialog, int id){
                       showGpsOptions();
                       getLocation();
                  }   
             });   
             builder.setNegativeButton("Batalkan",   
                  new DialogInterface.OnClickListener(){   
                  public void onClick(DialogInterface dialog, int id){   
                       dialog.cancel(); 
                  }   
             });   
        AlertDialog alert = builder.create();
        alert.show();
        }  
    
    private void showGpsOptions(){   
       Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);   
       startActivity(gpsOptionsIntent);   
    }  
    
    private void getLocation(){
    myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,onLocation);
   
    if (myLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){   
    //Toast.makeText(getBaseContext(), "GPS Sudah Aktif.....", Toast.LENGTH_SHORT).show();
        }
   
    WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setSupportZoom(true);
        mWebView.addJavascriptInterface(new Locater(this), "locater");
        

        mWebView.loadUrl("file:///android_asset/appSHC.php");
        String path="javascript:loadAtStart("+myLati+","+myLongi+",13)";
mWebView.loadUrl(path);
    }
       
    public class Locater {
    Context mContext;
    Locater(Context c) {
            mContext = c;
        }
   
    public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_LONG).show();
        }
   

    public String getLocation() throws JSONException {          
    JSONObject json=new JSONObject();
   
    json.put("info0", "Posisi Anda "+myCity);
    json.put("lat0", myLati);
            json.put("lon0", myLongi);

    json.put("info1", myCity2);
    json.put("lat1",myLati2);
            json.put("lon1", myLongi2);
           
        return(json.toString());
    }
    }
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
        finish();
                return true;
        }
    return super.onKeyDown(keyCode, event);
}
}





<!DOCTYPE html>
<html>
<head>
<meta name="viewport"
content="target-densitydpi=medium-dpi">
<title>APP-Hill Climbing</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAn4NVWkwfZqc6apKmk-YM-RTVksykdAS1hWJqLSw6oiFjM-DzvhR66TBi1NnEIxX6d6krYaiiLDFUTw"
type="text/javascript">
</script>
<script type="text/javascript">
var MLATI=-6.368351;
var MLONGI=106.830127;

var MLATI2=-6.353614;
var MLONGI2=106.831799;

var rev=new Array();
var swCycleTime=50;var sw,swObj,swct,swnow,swcycle; 
var swObjAry=new Array();
(function() {
var shcsp; 
var gebMap;
var directionsPanel;  
var gebDirections;    
var gebGeocoder;      
var maxshcspSize = 24;  
var maxSize = 10;     
var maxTripSentry = 2000000000; 
var avoidHighways = false; 
var travelMode = G_TRAVEL_MODE_DRIVING; 
var distIndex;
var isDone = false;
var reasons = new Array();
reasons[G_GEO_SUCCESS]            = "Success";
reasons[G_GEO_BAD_REQUEST]        = "Bad Request: A directions request could not be successfully parsed.";
reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";
reasons[G_GEO_MISSING_QUERY]      = "Missing Query: The HTTP q parameter was either missing or had no value.";
reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
reasons[G_GEO_UNKNOWN_DIRECTIONS] = "Unknown Directions: The GDirections object could not compute directions between the points mentioned in the query.";
var waypoints = new Array();
var addresses = new Array();
var addr = new Array();
var wpActive = new Array();
var addressRequests = 0;
var wayStr;
var distances;
var durations;
var dist;
var dur;
var visited;
var distancematrix;
var bestPath;
var bestTrip;
var nextSet; 
var numActive;
var chunkNode;
var cachedDirections = false;
var limit;
var onSolveCallback = function(){};
var originalOnFatalErrorCallback = function(shcsp, errMsg) { alert("Request failed: " + errMsg); }
var onFatalErrorCallback = originalOnFatalErrorCallback;
var doNotContinue = false;
var onLoadListener = null;
var onFatalErrorListener = null;
 
function shcApp(mode) {//shcWarshall
  var alfa = 1.0; 
  var beta = 1.0; 
  var rho = 0.1;  
  var asymptoteFactor = 0.9; 
  var rute = new Array();
  var nextRute = new Array();
  var prob = new Array();
  var numVertices = 100;
  var numEdges = 10;
  
  for (var i = 0; i < numActive; ++i) {
    rute[i] = new Array();
    nextRute[i] = new Array();
  }
  for (var i = 0; i < numActive; ++i) {
    for (var j = 0; j < numActive; ++j) {
      rute[i][j] = 1;
      nextRute[i][j] = 0.0;
    }
  }

  var lastNode = 0;
  var startNode = 0;
  var numSteps = numActive - 1;
  var numValidDests = numActive;
  if (mode == 1) {
    lastNode = numActive - 1;
    numSteps = numActive - 2;
    numValidDests = numActive - 1;
  }
  for (var edge = 0; edge < numEdges; ++edge) {
    for (var vertices = 0; vertices < numVertices; ++vertices) {
      var curr = startNode;
      var currdistance = 0;
      for (var i = 0; i < numActive; ++i) {
        visited[i] = false;
      }
      distancematrix[0] = curr;
      for (var step = 0; step < numSteps; ++step) {
        visited[curr] = true;
        var cumProb = 0.0;
        for (var next = 1; next < numValidDests; ++next) {
          if (!visited[next]) {
          //hitung jarak dua koordinat
            prob[next] = Math.pow(rute[curr][next], alfa) * Math.pow(dur[curr][next], 0.0 - beta);
            cumProb += prob[next];
          }
        }
        var guess = Math.random() * cumProb;
        var nextI = -1;
        for (var next = 1; next < numValidDests; ++next) {
          if (!visited[next]) {
            nextI = next;
            guess -= prob[next];
            if (guess < 0) {
              nextI = next;
              break;
            }
          }
        }
        currdistance += dur[curr][nextI];
        distancematrix[step+1] = nextI;
        curr = nextI;
      }
      distancematrix[numSteps+1] = lastNode;
      currdistance += dur[curr][lastNode];
      
      // k2-rewire:
      var lastStep = numActive;
      if (mode == 1) {
        lastStep = numActive - 1;
      }
      var changed = true;
      var i = 0;
      while (changed) {
        changed = false;
        for (; i < lastStep - 2 && !changed; ++i) {
          var cost = dur[distancematrix[i+1]][distancematrix[i+2]];
          var revMatrix = dur[distancematrix[i+2]][distancematrix[i+1]];
          var iMatrix = dur[distancematrix[i]][distancematrix[i+1]];
          var tmp, nowMatrix, newMatrix;
          for (var j = i+2; j < lastStep && !changed; ++j) {
nowMatrix = cost + iMatrix + dur[distancematrix[j]][distancematrix[j+1]];
            newMatrix = revMatrix + dur[distancematrix[i]][distancematrix[j]]+ dur[distancematrix[i+1]][distancematrix[j+1]];
            if (nowMatrix > newMatrix) {
              currdistance += newMatrix - nowMatrix;
              for (var k = 0; k < Math.floor((j-i)/2); ++k) {
                tmp = distancematrix[i+1+k];
                distancematrix[i+1+k] = distancematrix[j-k];
                distancematrix[j-k] = tmp;
              }
              changed = true;
              --i;
            }
            cost += dur[distancematrix[j]][distancematrix[j+1]];
            revMatrix += dur[distancematrix[j+1]][distancematrix[j]];
          }
        }
      }

      if (currdistance < bestTrip) {
        bestPath = distancematrix;
        bestTrip = currdistance;
      }
      for (var i = 0; i <= numSteps; ++i) {
nextRute[distancematrix[i]][distancematrix[i+1]] += (bestTrip - asymptoteFactor * bestTrip) / (numVertices * (currdistance - asymptoteFactor * bestTrip));
      }
    }
    for (var i = 0; i < numActive; ++i) {
      for (var j = 0; j < numActive; ++j) {
rute[i][j] = rute[i][j] * (1.0 - rho) + rho * nextRute[i][j];
                nextRute[i][j] = 0.0;
      }
    }
  }
}

function nextSetOf(num) {
  var count = 0;
  var ret = 0;
  for (var i = 0; i < numActive; ++i) {
    count += nextSet[i];
}
  if (count < num) {
    for (var i = 0; i < num; ++i) {
      nextSet[i] = 1;
    }
    for (var i = num; i < numActive; ++i) {
      nextSet[i] = 0;
    }
  } else {
    // temukan satu yang pertama
    var firstOne = -1;
    for (var i = 0; i < numActive; ++i) {
      if (nextSet[i]) {
        firstOne = i;
        break;
      }
    }

    var firstZero = -1;
    for (var i = firstOne + 1; i < numActive; ++i) {
      if (!nextSet[i]) {
        firstZero = i;
        break;
      }
    }
    if (firstZero < 0) {
      return -1;
    }
    for (var i = 0; i < firstZero - firstOne - 1; ++i) {
      nextSet[i] = 1;
    }
    for (var i = firstZero - firstOne - 1; i < firstZero; ++i) {
      nextSet[i] = 0;
    }
  }
  for (var i = 0; i < numActive; ++i) {
    ret += (nextSet[i]<<i);
  }
  return ret;
}


function makeLatLng(latLng) {
  return(latLng.toString().substr(1,latLng.toString().length-2));
}

function getWayStr(curr) {
  var nextAbove = -1;
  for (var i = curr + 1; i < waypoints.length; ++i) {
    if (wpActive[i]) {
      if (nextAbove == -1) {
        nextAbove = i;
      } else {
        wayStr.push(makeLatLng(waypoints[i]));
        wayStr.push(makeLatLng(waypoints[curr]));
      }
    }
  }
  if (nextAbove != -1) {
    wayStr.push(makeLatLng(waypoints[nextAbove]));
    getWayStr(nextAbove);
    wayStr.push(makeLatLng(waypoints[curr]));
  }
}

function getDistTable(curr, currInd) {
  var nextAbove = -1;
  var index = currInd;
  for (var i = curr + 1; i < waypoints.length; ++i) {
    if (wpActive[i]) {
      index++;
      if (nextAbove == -1) {
        nextAbove = i;
      } else {
        dist[currInd][index] = distances[distIndex];
        dur[currInd][index] = durations[distIndex++];
        dist[index][currInd] = distances[distIndex];
        dur[index][currInd] = durations[distIndex++];
      }
    }
  }
  if (nextAbove != -1) {
    dist[currInd][currInd+1] = distances[distIndex];
    dur[currInd][currInd+1] = durations[distIndex++];
    getDistTable(nextAbove, currInd+1);
    dist[currInd+1][currInd] = distances[distIndex];
    dur[currInd+1][currInd] = durations[distIndex++];
  }
}

function directions(mode) {
        document.getElementById("my_textual_div").innerHTML = "";
        document.getElementById("path").innerHTML = "";  
        document.getElementById("ordering").innerHTML = "";  
if (cachedDirections) {
    doshcsp(mode);
  }
  wayStr = new Array();
  numActive = 0;
  for (var i = 0; i < waypoints.length; ++i) {
    if (wpActive[i]) ++numActive;
  }

  for (var i = 0; i < waypoints.length; ++i) {   
    if (wpActive[i]) {   
      wayStr.push(makeLatLng(waypoints[i]));
      getWayStr(i);
      break;
    }
  }

  // Roundtrip
  if (numActive > maxshcspSize) {
    alert("Too many locations! You have " + numActive + ", but max limit is " + maxshcspSize);
  } else {  
    distances = new Array();
    durations = new Array();
    chunkNode = 0;    
    nextChunk(mode);
  }     
}

function nextChunk(mode) {
  if (chunkNode < wayStr.length) {    ///..........tambah 1
 
    var wayStrChunk = new Array();
    for (var i = 0; i < maxSize && i + chunkNode < wayStr.length; ++i) {
      wayStrChunk.push(wayStr[chunkNode+i]);
    }
    chunkNode += maxSize;
    if (chunkNode < wayStr.length-1) {
      chunkNode--;
    }                                 ///............

    var myGebDirections = new GDirections(gebMap, directionsPanel);
    GEvent.addListener(myGebDirections, "error", function() {
    //   locater.showToast('\''+myGebDirections.getStatus().code+'\'');
      var errorMsg = reasons[myGebDirections.getStatus().code];
      if (typeof errorMsg == 'undefined') errorMsg = 'Unknown error.';
      var doNotContinue = true;
      onFatalErrorCallback(shcsp, errorMsg);
    });
    
    GEvent.addListener(myGebDirections, "load", function() {
for (var i = 0; i < myGebDirections.getNumRoutes(); ++i) {   
durations.push(myGebDirections.getRoute(i).getDuration().seconds);    distances.push(myGebDirections.getRoute(i).getDistance().meters);
        }
        nextChunk(mode);
    });
        
    GEvent.addListener(myGebDirections, "addoverlay", function() {      
        // hilangkan standard google maps icons:
        gebMap.clearOverlays();
        directionsPanel.innerHTML = "";
      });
myGebDirections.loadFromWaypoints(wayStrChunk, { getSteps:false, getPolyline:false, preserveViewport:true, avoidHighways:avoidHighways, travelMode:travelMode });
  }else {
    readyshcsp(mode);
  }
}

function readyshcsp(mode) {
  distIndex = 0;
  dist = new Array();
  dur = new Array();
  numActive = 0;
  for (var i = 0; i < waypoints.length; ++i) {
    if (wpActive[i]) {
      dist.push(new Array());
      dur.push(new Array());
      addr[numActive] = addresses[i];
      numActive++;
    }
  }
  for (var i = 0; i < numActive; ++i) {
    dist[i][i] = 0;
    dur[i][i] = 0;
  }
  for (var i = 0; i < waypoints.length; ++i) {
    if (wpActive[i]) {
      getDistTable(i, 0);
      break;
    }
  }
  doshcsp(mode);
}

function doshcsp(mode) {
  // hitung roundtrip:
  visited = new Array();
  for (var i = 0; i < numActive; ++i) {
    visited[i] = false;
  }
  distancematrix = new Array();
  bestPath = new Array();
  nextSet = new Array();
  bestTrip = maxTripSentry;
  visited[0] = true;
  distancematrix[0] = 0;
  cachedDirections = true;
  shcApp(mode);

  wayStrChunk = new Array();
  var wpIndices = new Array();
  for (var i = 0; i < waypoints.length; ++i) {
    if (wpActive[i]) {
      wpIndices.push(i);
    }
  }
  var bestPathLatLngStr = "";
  
  if(mode==1){
    for (var i = 0; i < 2; ++i) {
        //alert(bestPath[i]);
        wayStrChunk.push(makeLatLng(waypoints[wpIndices[bestPath[i]]]));
        bestPathLatLngStr += makeLatLng(waypoints[wpIndices[bestPath[i]]]) + "\n";
    }
  }
  else
    for (var i = 0; i < bestPath.length; ++i) {
        //alert(bestPath[i]);
        wayStrChunk.push(makeLatLng(waypoints[wpIndices[bestPath[i]]]));
        bestPathLatLngStr += makeLatLng(waypoints[wpIndices[bestPath[i]]]) + "\n";
  }

  if (typeof onSolveCallback == 'function') {
    if (onLoadListener)
      GEvent.removeListener(onLoadListener);

    onLoadListener = GEvent.addListener(gebDirections, 'addoverlay', function(){
      onSolveCallback(shcsp);
    });
  }

  if (onFatalErrorListener)
    GEvent.removeListener(onFatalErrorListener);
    onFatalErrorListener = GEvent.addListener(gebDirections, 'error', onFatalErrorCallback)
    google.maps.Event.addListener(gebDirections, "addoverlay", function() {swStop('beg2');});
gebDirections.loadFromWaypoints(wayStrChunk, {getSteps:true, getPolyline:true, preserveViewport:false, avoidHighways:avoidHighways, travelMode:travelMode});
}

function addWaypoint(latLng) {
  var freeInd = -1;
  for (var i = 0; i < waypoints.length; ++i) {
    if (!wpActive[i]) {
      freeInd = i;
      break;
    }
  }
  if (freeInd == -1) {
    if (waypoints.length < maxshcspSize) {
      waypoints.push(latLng);
      wpActive.push(true);
      freeInd = waypoints.length-1;
    } else {
      return(-1);
    }
  } else {
    waypoints[freeInd] = latLng;
    wpActive[freeInd] = true;
  }
  return(freeInd);
}

BpshcspSolver.prototype.startOver = function() {
  waypoints = new Array();  addresses = new Array();
  addr = new Array();  wpActive = new Array();
  wayStr = ""; distances = new Array();
  durations = new Array();
  dist = new Array();
  dur = new Array();
  visited = new Array();
  distancematrix = new Array();
  bestPath = new Array();
  bestTrip = new Array();
  nextSet = new Array();
  numActive = 0;
  chunkNode = 0;
  addressRequests = 0;
  cachedDirections = false;
  onSolveCallback = function(){};
  doNotContinue = false;
}
    

function BpshcspSolver(map, panel, onFatalError) {
  if (shcsp) {
    alert('Hanya Bisa membuat satu BpshcspSolver.');
    return;
  }

  gebMap               = map;
  directionsPanel      = panel;
  gebGeocoder          = new GClientGeocoder();
  gebDirections        = new GDirections(gebMap, directionsPanel);
  onFatalErrorCallback = onFatalError; // only for errors fatal errors, not geocoding errors
  shcsp                  = this;
}

BpshcspSolver.prototype.addWaypoint = function(latLng) {
  addWaypoint(latLng);
};

BpshcspSolver.prototype.getWaypoints = function() {
  var wp = [];
  for (var i = 0; i < waypoints.length; i++) {
    if (wpActive[i])
      wp.push(waypoints[i]);
  }
  return wp;
};

BpshcspSolver.prototype.getAddresses = function() {
  var addrs = [];
  for (var i = 0; i < addresses.length; i++) {
    if (wpActive[i])
      addrs.push(addresses[i]);
  }
  return addrs;
};

BpshcspSolver.prototype.removeWaypoint = function(latLng) {
  for (var i = 0; i < waypoints.length; ++i) {
    if (wpActive[i] && waypoints[i].equals(latLng)) {
      wpActive[i] = false;
      return true;
    }
  }
  return false;
};

BpshcspSolver.prototype.removeAddress = function(addr) {
  for (var i = 0; i < addresses.length; ++i) {
    if (wpActive[i] && addresses[i] == addr) {
      wpActive[i] = false;
      return true;
    }
  }
  return false;
};

BpshcspSolver.prototype.getGDirections = function() {
  return gebDirections;
};

BpshcspSolver.prototype.getOrder = function() {
  return bestPath;
}

BpshcspSolver.prototype.getAvoidHighways = function() {
  return avoidHighways;
}

BpshcspSolver.prototype.setAvoidHighways = function(avoid) {
  avoidHighways = avoid;
}

BpshcspSolver.prototype.getTravelMode = function() {
  return travelMode;
}

BpshcspSolver.prototype.setTravelMode = function(travelM) {
  travelMode = travelM;
}

BpshcspSolver.prototype.getDurations = function() {
  return dur;
}

BpshcspSolver.prototype.getTotalDuration = function() {
  return gebDirections.getDuration().seconds;
}

BpshcspSolver.prototype.isReady = function() {
  return addressRequests == 0;
};

BpshcspSolver.prototype.solveRoundTrip = function(callback) {
  if (doNotContinue) {
    alert('fatal errors.');
    return;
  }

  if (!this.isReady()) {
    setTimeout(function(){ shcsp.solveRoundTrip(callback) }, 20);
    return;
  }
  if (typeof callback == 'function')
    onSolveCallback = callback;

  directions(0);
};

BpshcspSolver.prototype.solveAtoZ = function(callback) {
  if (doNotContinue) {
    alert('Cannot continue after fatal errors.');
    return;
  }

  if (!this.isReady()) {
    setTimeout(function(){ shcsp.solveAtoZ(callback) }, 20);
    return;
  }

  if (typeof callback == 'function')
    onSolveCallback = callback;

  directions(1);
};

window.BpshcspSolver = BpshcspSolver;
  
})();

function formatTime(seconds) {
  var days;
  var hours;
  var minutes;
  days = parseInt(seconds / (24*3600));
  seconds -= days * 24 * 3600;
  hours = parseInt(seconds / 3600);
  seconds -= hours * 3600;
  minutes = parseInt(seconds / 60);
  seconds -= minutes * 60;
  var ret = "";
  if (days > 0) 
    ret += days + " days ";
  if (days > 0 || hours > 0) 
    ret += hours + " hrs ";
  if (days > 0 || hours > 0 || minutes > 0) 
    ret += minutes + " min ";
  if (days == 0 && hours == 0)
    ret += seconds + " sec";
  return(ret);
}


function formatLength(meters) {
  var km = parseInt(meters / 1000);
  meters -= km * 1000;
  var ret = "";
  if (km > 0) 
    ret += km + " km ";
  if (km < 10)
    ret += meters + " m";
  return(ret);
}


function drawMarker(latlng,tit, num) {
  var letter = num == 1 ? '' : '1';
  var marker = new GMarker(latlng);    
  GEvent.addListener(marker, 'click', function() {              
        var info = tit; 
        gebMap.openInfoWindowHtml(latlng ,info);
  });     
  return marker;
}

function setViewportToCover(waypoints) {
  var bounds = new GLatLngBounds();
  for (var i = 0; i < waypoints.length; ++i) {
    bounds.extend(waypoints[i]);
  }
  gebMap.setCenter(bounds.getCenter());
  gebMap.setZoom(gebMap.getBoundsZoomLevel(bounds));
}
///................................................................................ ditambah dari sini ini yg buat peta ga bisa munculXXXX



function loadAtStart2(lat, lng, lat2, lng2, zoom) {  
  if (GBrowserIsCompatible()) {
        gebMap = new GMap2(document.getElementById("map"));
        directionsPanel = document.getElementById("my_textual_div");
        shcsp = new BpshcspSolver(gebMap, directionsPanel);    
  shcsp.startOver(); 
        
    gebMap.setCenter(new GLatLng(lat, lng), zoom);
    gebMap.addControl(new GLargeMapControl());
    gebMap.addControl(new GMapTypeControl());
    gebDirections = shcsp.getGDirections();

  var posisi1 = new GLatLng(lat, lng);
    shcsp.addWaypoint(posisi1);                                        
gebMap.addOverlay(drawMarker(posisi1,'Posisi Anda',shcsp.getWaypoints().length));
  
  var posisi2 = new GLatLng(lat2, lng2);
    shcsp.addWaypoint(posisi2);                                        
gebMap.addOverlay(drawMarker(posisi2,'Tujuan Anda',shcsp.getWaypoints().length));
             
//document.getElementById("my_textual_div").innerHTML = "";
                //document.getElementById("path").innerHTML = "";
                //document.getElementById("ordering").innerHTML = "";
 directions(1, false, true,'Proses');
                  
  }
  else {
alert('Your browser is not compatible with this technology.\nPlease consider upgrading.');
  }
}


function loadAtStart(lat, lng, zoom) {
//locater.showToast('Load loadAtStart:'+lat+','+lng+'/'+zoom);
  
  if (GBrowserIsCompatible()) {
        gebMap = new GMap2(document.getElementById("map"));
        directionsPanel = document.getElementById("my_textual_div");
        shcsp = new BpshcspSolver(gebMap, directionsPanel);    

var data=JSON.parse(locater.getLocation());  
var a0=data.info0;
var b0=data.lat0;
var c0=data.lon0;

b0=b0.replace(",", "");
c0=c0.replace(",", "");
var b02 = parseFloat(b0);
var c02 = parseFloat(c0);
MLATI=b02;
MLONGI=c02;        

lat=b02;
lng=c02;  


var a1=data.info1;  
var b1=data.lat1; 
var c1=data.lon1; 
b1=b1.replace(",", "");
c1=c1.replace(",", "");
var b12 = parseFloat(b1);
var c12 = parseFloat(c1);
MLATI2=b12;
MLONGI2=c12;   


  locater.showToast(a0+' to '+a1);      
  //gebMap.clearOverlays();////
  shcsp.startOver(); 
        
    gebMap.setCenter(new GLatLng(lat, lng), zoom);
    gebMap.addControl(new GLargeMapControl());
    gebMap.addControl(new GMapTypeControl());
    gebDirections = shcsp.getGDirections();

  var posisi1 = new GLatLng(lat, lng);
    shcsp.addWaypoint(posisi1);                                        
gebMap.addOverlay(drawMarker(posisi1,a0,shcsp.getWaypoints().length));
  
  var posisi2 = new GLatLng(b12, c12);
    shcsp.addWaypoint(posisi2);                                        
gebMap.addOverlay(drawMarker(posisi2,a1,shcsp.getWaypoints().length));
             
//document.getElementById("my_textual_div").innerHTML = "";
                //document.getElementById("path").innerHTML = "";
                //document.getElementById("ordering").innerHTML = "";
                
//directions(0, document.forms['travelOpts'].walking.checked, document.forms ['travelOpts'].avoidHighways.checked,'Proses');
directions(1, false, true,'Proses');
                  
  }
  else {
alert('Your browser is not compatible with this technology.\nPlease consider upgrading.');
  }
}



function startOver() {
  document.getElementById("my_textual_div").innerHTML = "";
  document.getElementById("path").innerHTML = "";
  document.getElementById("ordering").innerHTML = "";
  gebMap.clearOverlays();
  shcsp.startOver(); 
}

function directions(m, walking, avoid,toast) {
 // locater.showToast(toast); 
 swReset('beg2');
 swStart('beg2','+');
 
  gebMap.clearOverlays();
  shcsp.setAvoidHighways(avoid);
  if (walking)
    shcsp.setTravelMode(G_TRAVEL_MODE_WALKING);
  else
    shcsp.setTravelMode(G_TRAVEL_MODE_DRIVING);
  gebMap.clearOverlays();
  if (m == 0)
    shcsp.solveRoundTrip(onSolveCallback);
  else
    shcsp.solveAtoZ(onSolveCallback);
}

function onSolveCallback(shcsp) {
  var dir = shcsp.getGDirections();
  // tampilkan roundtrip terdekat:
  var pathStr = "<p>Trip duration: " + formatTime(dir.getDuration().seconds) + "<br>";
  pathStr += "Trip length: " + formatLength(dir.getDistance().meters) + "</p>";
 document.getElementById("path").innerHTML = pathStr;

  var bestPathLatLngStr = "";
  for (var i = 0; i < gebDirections.getNumGeocodes(); ++i) {
    bestPathLatLngStr += "(" + gebDirections.getGeocode(i).Point.coordinates[1]
      + ", " + gebDirections.getGeocode(i).Point.coordinates[0] + ")\n";
  }

  orderStr = "";
  for (var i = 0; i < shcsp.getOrder().length; ++i) {
    orderStr += shcsp.getOrder()[i] + " ";
  }
  document.getElementById("ordering").innerHTML = orderStr;

  isDone = true;
}

function isDone() {
  return isDone;
}

function def(){
        swReset('beg2');
        swStart('beg2','+');
        gebMap.clearOverlays(); 
        document.getElementById("my_textual_div").innerHTML = "";
        document.getElementById("path").innerHTML = "";
        document.getElementById("ordering").innerHTML = "";
        
        var distance=[];
        var sortti=[];
        myDir=new GDirections(gebMap,directionsPanel);
        
        sortti.length=0;
        for(i=1;i<rev.length;i++){
                rev[i].dist=rev[0].distanceFrom(rev[i]);
        }
                rev= rev.sort(function (a,b) {return (a.dist- b.dist)});
google.maps.Event.addListener(myDir, "addoverlay", function() {
                swStop('beg2');
        });
        
        for(i=0;i<2;i++){
                myDir.loadFromWaypoints([rev[0],rev[1]]);
        }
}

function swStart(id,ud){  
        swObj=document.getElementById(id); 
        swObj.style.color = "white";
        swct=swObj.innerHTML.split(':');  
        swnow=new Date();  
        swObj.now=swnow.getTime(); 
        swObj.reset=swObj.innerHTML; 
        swObj.ud=ud;  
        if (!isNaN(swObj.innerHTML)){  
                swObj.time=parseInt(swObj.innerHTML); 
        } 
        else if (swct.length==4){  
swObj.time=(swct[0]*1000*60)+(swct[1]*1000*60)+(swct[2]*1000)+parseInt(swct[3]); 
        } 
        else if (swct.length==3){  
                swObj.time=(swct[0]*1000*60)+(swct[1]*1000)+parseInt(swct[2]);  
        } 
        else if (swct.length==2){  
                swObj.time=(swct[0]*1000)+parseInt(swct[1]); 
        } 
        else if (swct.length==1){  
                swObj.time=parseInt(swct[1]); 
        } 
        if (!swObj.time){ 
                swObj.time=1; 
        } 
        if (!swObj.c){  
                swObj.c=ud; 
                swObjAry[swObjAry.length]=swObj; 
        } 
}

function swStop(id){  
        swObj=document.getElementById(id);  
        swObj.style.color = "red";
        if (!swObj.time){ return; } 
                swObj.time=null;  
                sw=new Date().getTime();
                swObj.cycle+=(sw-swcycle); 
        if (swObj.ud=='-'){ 
                swObj.cycle-=(sw-swcycle); 
                if (swObj.cycle<0){ swObj.cycle=0; } 
        } 
swObj.innerHTML=(parseInt(swObj.cycle/1000/60/60)%60)+':'+(parseInt(swObj.cycle/1000/60)%60)+':'+((parseInt((swObj.cycle)/1000)%60)+':'+(swObj.cycle%1000)); 
}

function swReset(id,dt){ 
        swObj=document.getElementById(id); 
        swObj.innerHTML=swObj.reset; 
        swObj.time=null; 
}

function swCycle(){ 
        swcycle=new Date().getTime(); 
        for (sw0=0;sw0<swObjAry.length;sw0++){ 
                if (swObjAry[sw0].time){ 
swObjAry[sw0].cycle=swObjAry[sw0].time+(swcycle-swObjAry[sw0].now); 
                        if (swObjAry[sw0].ud=='-'){ 
swObjAry[sw0].cycle=swObjAry[sw0].time-(swcycle-swObjAry[sw0].now); 
if (swObjAry[sw0].cycle<0){ swObjAry[sw0].cycle=0; swObjAry[sw0].time=0; } 
                        } 
swObjAry[sw0].innerHTML=(parseInt(swObjAry[sw0].cycle/1000/60/60)%60)+':'+(parseInt(swObjAry[sw0].cycle/1000/60)%60)+':'+((parseInt((swObjAry[sw0].cycle)/1000)%60)+':'+(swObjAry[sw0].cycle%1000)); 
                } 
        } 
}

setInterval('swCycle()',swCycleTime);
        
function init() {
  isDone = false;
  loadAtStart(MLATI,MLONGI,13);
}

function init2() {
  isDone = false;
  loadAtStart2(MLATI,MLONGI,MLATI2,MLONGI2,13);
}

</script>
</head>

<body onload='init()' onunload='GUnload()' bgcolor='#ff9999'>
<div id="map" style="width:100%; height: 320px"></div>

<br><br>


<form name="travelOpts">
<table>

<tr>
<td>
<input id="walking" type="radio" name="pilihdunk" >avoid Walking<br>
</td>
<td>
<input id="avoidHighways" type="radio" name="pilihdunk" checked="checked">avoid Highways<br>
</td>
</tr>


</table>
</form>
<table class="buttonTable">
<tr>

<td>
<input id="button1" type="button" value="Proses" onclick="directions(1, document.forms['travelOpts'].walking.checked, document.forms ['travelOpts'].avoidHighways.checked,'Proses')">
</td>

<td>
<input id="button2"
type="button"
value="Reset"
onclick="init2()">
</td>


<td>
</td>
</tr>
</table>


<div id="path">
</div>
<div id="ordering">
</div>
<div id="my_textual_div">
</div>
<div id="beg2"
style="color:#ffffff">
</div>
</body>
</html>

Sweet Alert

Download library weetalert.min.js, letakkan dalam satu folder sejajar index !  https://drive.google.com/drive/folders/1uXhLjQv998HlVhtzObOPC...