Jumat, 23 Desember 2016

rTeredekat Android CODE

<?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>



+++++++++++

maps.java
package com.example.damkar;

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 rterdekat extends Activity {
String myLati2,myLongi2,myNama,myAlamat,myKet,jarak;    
private WebView mWebView;
String myCity="",myLati="-6.184505",myLongi="106.797685";
    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, rterdekat.class));
        return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
    
    @Override
    public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
        setContentView(R.layout.rterdekat);
        
        
        Intent io = this.getIntent();
   myLati=io.getStringExtra("latitude");
   myLongi=io.getStringExtra("longitude");
   myCity=io.getStringExtra("posisi");
   
   myLati2=io.getStringExtra("latitudeDamkar");
   myLongi2=io.getStringExtra("longitudeDamkar");
   myNama=io.getStringExtra("nama");
   myAlamat=io.getStringExtra("alamat");
   myKet=io.getStringExtra("ket");
   jarak=io.getStringExtra("jarak");
   
       
        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(), "Mengambil peta..", 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(",11)");
     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(), "Mencari lokasi..", 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/maps.html");
        String path="javascript:loadAtStart("+myLati+","+myLongi+",11)";
mWebView.loadUrl(path);
    }
       
    public class Locater {
    Context mContext;
    Locater(Context c) {
            mContext = c;
        }
   
    public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
   

    public String getLocation() throws JSONException {          
    JSONObject json=new JSONObject();
        json.put("info0", "UNAS");
    json.put("lat0", "-6.378409");
            json.put("lon0", "106.825728");
        return(json.toString());
    }
    }
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
        finish();
                return true;
        }
    return super.onKeyDown(keyCode, event);
}
}
+++++++++++++++
maps.assets.html

<!DOCTYPE html>
<html>
<head>
<meta name="viewport"
content="target-densitydpi=medium-dpi">
<title>A-star</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" src="//maps.googleapis.com/maps/api/js?sensor=true"></script>

<script type="text/javascript">
var rev=new Array();var swCycleTime=50;var sw,swObj,swct,swnow,swcycle; 
var swObjAry=new Array();
(function() {
var tsp; 
var gebMap;
var directionsPanel;  
var gebDirections;    
var gebGeocoder;      
var maxTspSize = 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 currPath;
var bestPath;
var bestTrip;
var nextSet; 
var numActive;
var chunkNode;
var cachedDirections = false;
var limit;
var onSolveCallback = function(){};
var originalOnFatalErrorCallback = function(tsp, errMsg) { alert("Request failed: " + errMsg); }
var onFatalErrorCallback = originalOnFatalErrorCallback;
var doNotContinue = false;
var onLoadListener = null;
var onFatalErrorListener = null;
function astarApp(mode) {
  var alfa = 1.0; 
  var beta = 1.0; 
  var rho = 0.1;  
  var asymptoteFactor = 0.9; 
  var pher = new Array();
  var nextPher = new Array();
  var prob = new Array();
  var numAnts = 100;
  var numWaves = 10;
  
  locater.showToast('Loading A*...');
  
  for (var i = 0; i < numActive; ++i) {
    pher[i] = new Array();
    nextPher[i] = new Array();
  }
  for (var i = 0; i < numActive; ++i) {
    for (var j = 0; j < numActive; ++j) {
      pher[i][j] = 1;
      nextPher[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 wave = 0; wave < numWaves; ++wave) {
    for (var ant = 0; ant < numAnts; ++ant) {
      var curr = startNode;
      var currDist = 0;
      for (var i = 0; i < numActive; ++i) {
        visited[i] = false;
      }
      currPath[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]) {
            prob[next] = Math.pow(pher[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;
            }
          }
        }
        currDist += dur[curr][nextI];
        currPath[step+1] = nextI;
        curr = nextI;
      }
      currPath[numSteps+1] = lastNode;
      currDist += 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[currPath[i+1]][currPath[i+2]];
          var revCost = dur[currPath[i+2]][currPath[i+1]];
          var iCost = dur[currPath[i]][currPath[i+1]];
          var tmp, nowCost, newCost;
          for (var j = i+2; j < lastStep && !changed; ++j) {
nowCost = cost + iCost + dur[currPath[j]][currPath[j+1]];
            newCost = revCost + dur[currPath[i]][currPath[j]]
              + dur[currPath[i+1]][currPath[j+1]];
            if (nowCost > newCost) {
              currDist += newCost - nowCost;
              for (var k = 0; k < Math.floor((j-i)/2); ++k) {
                tmp = currPath[i+1+k];
                currPath[i+1+k] = currPath[j-k];
                currPath[j-k] = tmp;
              }
              changed = true;
              --i;
            }
            cost += dur[currPath[j]][currPath[j+1]];
            revCost += dur[currPath[j+1]][currPath[j]];
          }
        }
      }

      if (currDist < bestTrip) {
        bestPath = currPath;
        bestTrip = currDist;
      }
      for (var i = 0; i <= numSteps; ++i) {
nextPher[currPath[i]][currPath[i+1]] += (bestTrip - asymptoteFactor * bestTrip) / (numAnts * (currDist - asymptoteFactor * bestTrip));
      }
    }
    for (var i = 0; i < numActive; ++i) {
      for (var j = 0; j < numActive; ++j) {
pher[i][j] = pher[i][j] * (1.0 - rho) + rho * nextPher[i][j];
                nextPher[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) {
  //  alert("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) {
    doTsp(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;
    }
  }
  locater.showToast('Silakan tunggu...');
  // Roundtrip
  if (numActive > maxTspSize) {
    alert("Too many locations! You have " + numActive + ", but max limit is " + maxTspSize);
  } 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() {
      alert(myGebDirections.getStatus().code);
      locater.showToast('\''+myGebDirections.getStatus().code+'\'');
      var errorMsg = reasons[myGebDirections.getStatus().code];
      if (typeof errorMsg == 'undefined') errorMsg = 'Unknown error.';
      var doNotContinue = true;
      onFatalErrorCallback(tsp, 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 {
    readyTsp(mode);
  }
}

function readyTsp(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;
    }
  }
  doTsp(mode);
}

function doTsp(mode) {
  // hitung roundtrip:
  visited = new Array();
  for (var i = 0; i < numActive; ++i) {
    visited[i] = false;
  }
  currPath = new Array();
  bestPath = new Array();
  nextSet = new Array();
  bestTrip = maxTripSentry;
  visited[0] = true;
  currPath[0] = 0;
  cachedDirections = true;
  astarApp(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(tsp);
    });
  }

  if (onFatalErrorListener)
    GEvent.removeListener(onFatalErrorListener);
  onFatalErrorListener = GEvent.addListener(gebDirections, 'error', onFatalErrorCallback)
  locater.showToast('Membuat Jalur...');
  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 < maxTspSize) {
      waypoints.push(latLng);
      wpActive.push(true);
      freeInd = waypoints.length-1;
    } else {
      return(-1);
    }
  } else {
    waypoints[freeInd] = latLng;
    wpActive[freeInd] = true;
  }
  return(freeInd);
}

BpTspSolver.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();
  currPath = new Array();
  bestPath = new Array();
  bestTrip = new Array();
  nextSet = new Array();
  numActive = 0;
  chunkNode = 0;
  addressRequests = 0;
  cachedDirections = false;
  onSolveCallback = function(){};
  doNotContinue = false;
}
    

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

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

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

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

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

BpTspSolver.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;
};

BpTspSolver.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;
};

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

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

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

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

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

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

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

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

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

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

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

  directions(0);
};

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

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

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

  directions(1);
};

window.BpTspSolver = BpTspSolver;
  
})();

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);
}

//drawMarker(al3,"posisi3",tsp.getWaypoints().length)
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));
}


function loadAtStart(lat, lng, zoom) {
  if (GBrowserIsCompatible()) {
        gebMap = new GMap2(document.getElementById("map"));
        directionsPanel = document.getElementById("my_textual_div");
        tsp = new BpTspSolver(gebMap, directionsPanel);    

var data=JSON.parse(locater.getLocation());
//var a0=data.info0; a1=data.info1; a2=data.info2; a3=data.info3; a4=data.info4;a5=data.info5;a6=data.info6;  a7=data.info7; a8=data.info8;a9=data.info9;        a10=data.info10; a11=data.info11; a12=data.info12; a13=data.info13;a14=data.info14;a15=data.info15; a16=data.info16;a17=data.info17;a18=data.info18; a19=data.info19;a20=data.info20;a21=data.info21; a22=data.info22;a23=data.info23;     
//var b0=data.lat0; b1=data.lat1; b2=data.lat2; b3=data.lat3; b4=data.lat4;b5=data.lat5;b6=data.lat6;b7=data.lat7; b8=data.lat8;b9=data.lat9; b10=data.lat10; b11=data.lat11; b12=data.lat12; b13=data.lat13; b14=data.lat14; b15=data.lat15; b16=data.lat16; b17=data.lat17; b18=data.lat18;b19=data.lat19; b20=data.lat20; b21=data.lat21; b22=data.lat22; b23=data.lat23;
//var c0=data.lon0; c1=data.lon1; c2=data.lon2; c3=data.lon3; c4=data.lon4; c5=data.lon5; c6=data.lon6; c7=data.lon7; c8=data.lon8; c9=data.lon9;c10=data.lon10; c11=data.lon11; c12=data.lon12; c13=data.lon13; c14=data.lon14; c15=data.lon15; c16=data.lon16; c17=data.lon17; c18=data.lon18; c19=data.lon19; c20=data.lon20; c21=data.lon21;c22=data.lon22;c23=data.lon23; 
//var locations = [['Posisi Anda:',    lat,lng],[a0,b0,c0],[a1,b1,c1],[a2,b2,c2],[a3,b3,c3],[a4,b4,c4],[a5,b5,c5],[a6,b6,c6],[a7,b7,c7],[a8,b8,c8],[a9,b9,c9],[a10,b10,c10],[a11,b11,c11],[a12,b12,c12],[a13,b13,c13],[a14,b14,c14],[a15,b15,c15],[a16,b16,c16],[a17,b17,c17],[a18,b18,c18],[a19,b19,c19],[a20,b20,c20],[a21,b21,c21],[a22,b22,c22],[a23,b23,c23]];
var locations = [['Posisi Anda:',-6.398923,106.839859],["ITC Depok",-6.392431,106.823198],["samsat depok",-6.396469,106.836600]];
        
gebMap.clearOverlays();
tsp.startOver(); 
        
gebMap.setCenter(new GLatLng(lat, lng), zoom);
    gebMap.addControl(new GLargeMapControl());
    gebMap.addControl(new GMapTypeControl());
    gebDirections = tsp.getGDirections();

locater.showToast("Proses Astar Jumlah Lokasi :"+locations.length);
    /*
    for (var i = 0; i < locations.length; i++) {           
                if (locations[i][1] != undefined){      
                var a = new GLatLng(locations[i][1], locations[i][2]);
                tsp.addWaypoint(a);
                                        
gebMap.addOverlay(drawMarker(a,locations[i][0],tsp.getWaypoints().length));
        }
    }
    */
    
    var al1 = new GLatLng(-6.423161, 106.828784);
    tsp.addWaypoint(al1);                                    
gebMap.addOverlay(drawMarker(al1,"posisi1",tsp.getWaypoints().length));
    
    var al2 = new GLatLng(-6.388360, 106.867236);
    tsp.addWaypoint(al2);                                    
gebMap.addOverlay(drawMarker(al2,"posisi2",tsp.getWaypoints().length));

    var al3 = new GLatLng(-6.345027, 106.777972);
    tsp.addWaypoint(al3);                                    
gebMap.addOverlay(drawMarker(al3,"posisi3",tsp.getWaypoints().length));
var al4 = new GLatLng(-6.401734, 106.756683);
    tsp.addWaypoint(al4);                                    
gebMap.addOverlay(drawMarker(al4,"posisi4",tsp.getWaypoints().length));
        
     var al5 = new GLatLng(-6.379037, 106.830873);
    tsp.addWaypoint(al5);                                    
gebMap.addOverlay(drawMarker(al5,"posisi5",tsp.getWaypoints().length));
document.getElementById("my_textual_div").innerHTML = "";
document.getElementById("path").innerHTML = "";
document.getElementById("ordering").innerHTML = "";

}//if browser COmpatible
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 = "";
  gebMap.clearOverlays();
  tsp.startOver(); 
}
//=================================
//onclick="directions(0, document.forms['myastar'].walking.checked, document.forms ['myastar'].avoidHighways.checked,'Proses')">
function directions(m, walking, avoid,toast) {
  locater.showToast("proses. walking="+walking+"/highway="+avoid); 
  swReset('beg2');
  swStart('beg2','+');
  gebMap.clearOverlays();
  tsp.setAvoidHighways(avoid);
  if (walking)
    tsp.setTravelMode(G_TRAVEL_MODE_WALKING);
  else
    tsp.setTravelMode(G_TRAVEL_MODE_DRIVING);
    
    
  gebMap.clearOverlays();
  tsp.solveAtoZ(onSolveCallback);
  
//0=rute balik ke awal lg
//1=rute 1 arah A:Z

  if (m == 0)
    tsp.solveRoundTrip(onSolveCallback);
  else
    tsp.solveAtoZ(onSolveCallback);
   
     exit();
}

function onSolveCallback(tsp) {
  var dir = tsp.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 < tsp.getOrder().length; ++i) {
    orderStr += tsp.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)); 

locater.showToast(parseInt(swObj.cycle/1000/60/60)%60+':'+parseInt(swObj.cycle/1000/60)%60+':'+parseInt((swObj.cycle)/1000)%60+':'+parseInt(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(-6.192459, 106.837213,11);

}
</script>
</head>

<body onload='init()'
onunload='GUnload()'>

<div id="map" style="width: 400px; height: 400px" align="center"></div>
<form name="myastar">
<table>
    <tr>
    <td>
    <input id="walking" type="checkbox">Walking<br>
    </td>
    <input id="avoidHighways" type="checkbox">Highways<br>
    </td>
    </tr>
</table>
</form>

<table class="buttonTable">
    <tr>
    <td>
    <input id="button1"
    type="button"
    value="Round Trip"
    onclick="directions(0, document.forms['myastar'].walking.checked, document.forms ['myastar'].avoidHighways.checked,'Proses')">
    
    <input id="button2"
    type="button"
    value="One Way"
    onclick="directions(1, document.forms['myastar'].walking.checked, document.forms ['myastar'].avoidHighways.checked,'Proses')">
    </td>
    
    <td>
    <input id="button3"
    type="button"
    value="Reset"
    onclick="init()">
    </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>


   <permission android:name="com.example.damkar.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
<uses-permission android:name="com.example.damkar.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />




Tidak ada komentar:

Posting Komentar