<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