Jumat, 23 Desember 2016

getDirection dua koordinat


direction.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <fragment
        android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.SupportMapFragment"/>
     
</RelativeLayout>

+++++++++++++++++++++++++
direction.java

package com.example.damkar;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class direction extends FragmentActivity {


private GoogleMap map;
ProgressDialog pDialog;
    List<LatLng> polyz;
    JSONArray array;
 
    double lat=-6.192182;
    double lon=106.797495;
 
    double alat=-6.723161;
    double alon=106.548722;
 
    double latDamkar=-6.192182;
    double lngDamkar=106.797495;
     
    @SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.direction);

   Intent io = this.getIntent();
   String myLati=io.getStringExtra("latitude");
   String myLongi=io.getStringExtra("longitude");
   String myCity=io.getStringExtra("posisi");
 
   String myLati2=io.getStringExtra("latitudeDamkar");
   String myLongi2=io.getStringExtra("longitudeDamkar");
   String myNama=io.getStringExtra("nama");
   String myAlamat=io.getStringExtra("alamat");
   String myKet=io.getStringExtra("ket");
   String jarak=io.getStringExtra("jarak");
 
        try{
        lat=Double.parseDouble(myLati);
        lon=Double.parseDouble(myLongi);
        }
        catch(Exception e){  lat=-6.192585; lon=106.848722;}
     

        try{
        alat=Double.parseDouble(myLati2);
        alon=Double.parseDouble(myLongi2);
        }
        catch(Exception e){  alat=-6.192585; alon=106.848722;}

        map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
        map.addMarker(new MarkerOptions().position(new LatLng(lat, lon)).title("Target").snippet(myCity).icon(BitmapDescriptorFactory.fromResource(R.drawable.fire1)));
        map.addMarker(new MarkerOptions().position(new LatLng(alat, alon)).title(myNama).snippet(myAlamat+"\nKoordinat:"+myLati2+","+myLongi2+"\nJarak:"+jarak+"  Km").icon(BitmapDescriptorFactory.fromResource(R.drawable.pos2)));
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon),13));
        map.animateCamera(CameraUpdateFactory.zoomTo(12), 2000, null);
        new GetDirection().execute();
     

}
 
    class GetDirection extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
   super.onPreExecute();
   pDialog = new ProgressDialog(direction.this);
   pDialog.setMessage("Loading route. Please wait...");
   pDialog.setIndeterminate(false);
   pDialog.setCancelable(false);
   pDialog.show();
}

protected String doInBackground(String... args) {        
String stringUrl = "http://maps.googleapis.com/maps/api/directions/json?origin="+lat+","+lon+"&destination="+alat+","+alon+"&sensor=false&mode=driving";
           StringBuilder response = new StringBuilder();
           try {
               URL url = new URL(stringUrl);
               HttpURLConnection httpconn = (HttpURLConnection) url.openConnection();
               if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                   BufferedReader input = new BufferedReader(new InputStreamReader(httpconn.getInputStream()),8192);
                   String strLine = null;

                   while ((strLine = input.readLine()) != null) {
                       response.append(strLine);
                   }
                   input.close();
               }

               String jsonOutput = response.toString();
               JSONObject jsonObject = new JSONObject(jsonOutput);
               JSONArray routesArray = jsonObject.getJSONArray("routes");
               JSONObject route = routesArray.getJSONObject(0);

               JSONObject poly = route.getJSONObject("overview_polyline");
               String polyline = poly.getString("points");
               polyz = decodePoly(polyline);
           } catch (Exception e) {}
           return null;
       }protected void onPostExecute(String file_url) {
           for (int i = 0; i < polyz.size() - 1; i++) {
               LatLng src = polyz.get(i);
               LatLng dest = polyz.get(i + 1);
                Polyline line = map.addPolyline(new PolylineOptions()
                       .add(new LatLng(src.latitude, src.longitude), new LatLng(dest.latitude, dest.longitude))
                       .width(3).color(Color.rgb(20, 255, 255)).geodesic(true));
           }
           pDialog.dismiss();
       }
   }

/* Method to decode polyline points */
           private List<LatLng> decodePoly(String encoded) {
               List<LatLng> poly = new ArrayList<LatLng>();
               int index = 0, len = encoded.length();
               int lat = 0, lng = 0;

               while (index < len) {
                   int b, shift = 0, result = 0;
                   do {
                       b = encoded.charAt(index++) - 63;
                       result |= (b & 0x1f) << shift;
                       shift += 5;
                   } while (b >= 0x20);
                   int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
                   lat += dlat;

                   shift = 0;
                   result = 0;
                   do {
                       b = encoded.charAt(index++) - 63;
                       result |= (b & 0x1f) << shift;
                       shift += 5;
                   } while (b >= 0x20);
                   int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
                   lng += dlng;

                   LatLng p = new LatLng((((double) lat / 1E5)), (((double) lng / 1E5)));
                   poly.add(p);
               }
               return poly;
           }
        }

+++++++++++++++++++++++++++++

package com.yusuf.mencarijarak;

import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.location.Location;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.maps.model.LatLng;

public class MainActivity extends Activity implements OnClickListener{
EditText lat_asal, lon_asal, lat_tujuan, lon_tujuan;
Button hitung;
TextView hasil;
double latasal, lonasal, lattujuan,lontujuan;
LatLng lok_jakarta, lok_bandung;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

lok_jakarta= new LatLng(-6.199264,106.8591);
lok_bandung= new LatLng(-6.92779,107.595777);

lat_asal=(EditText)findViewById(R.id.lat_asal);
lon_asal=(EditText)findViewById(R.id.lon_asal);
lat_tujuan=(EditText)findViewById(R.id.lat_tujuan);
lon_tujuan=(EditText)findViewById(R.id.lon_tujuan);

lat_asal.setText("-6.199264");
lon_asal.setText("106.8591");
lat_tujuan.setText("-6.92779");
lon_tujuan.setText("107.595777");

hitung =(Button)findViewById(R.id.hitung);
hasil=(TextView)findViewById(R.id.hasil);

hitung.setOnClickListener(this);
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v==hitung){

Location jakarta =new Location("jakarta");
jakarta.setLatitude(lok_jakarta.latitude);
jakarta.setLongitude(lok_jakarta.longitude);

Location bandung =new Location("Bandung");
bandung.setLatitude(lok_bandung.latitude);
bandung.setLongitude(lok_bandung.longitude);


double jarak  = getDistanceInfo(lok_jakarta.latitude, lok_jakarta.longitude,
lok_bandung.latitude, lok_bandung.longitude);

Double distance = (double)
Math.floor(jakarta.distanceTo(bandung) / 1000 * 100)
/100;

Toast.makeText(getApplicationContext(), jarak/1000+"km -"+distance+" km", Toast.LENGTH_LONG).show();
hasil.setText("Jarak Dengan Google Map API : "+ jarak/1000+" km\n"+"Jarak dengan DistanceTo : "+distance+" km");

}
}


private double getDistanceInfo(double lat1, double lng1,double lat2, double lng2) {
        StringBuilder stringBuilder = new StringBuilder();
        Double dist = 0.0;
        try {
        String url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lng1 + "&destination=" + lat2+","+lng2 + "&mode=driving&sensor=false";

        HttpPost httppost = new HttpPost(url);

        HttpClient client = new DefaultHttpClient();
        HttpResponse response;
        stringBuilder = new StringBuilder();


            response = client.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }

        JSONObject jsonObject = new JSONObject();
        try {

            jsonObject = new JSONObject(stringBuilder.toString());

            JSONArray array = jsonObject.getJSONArray("routes");

            JSONObject routes = array.getJSONObject(0);

            JSONArray legs = routes.getJSONArray("legs");

            JSONObject steps = legs.getJSONObject(0);

            JSONObject distance = steps.getJSONObject("distance");

            dist = Double.parseDouble(distance.getString("value"));

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return dist;
    }





}



Tidak ada komentar:

Posting Komentar