Selasa, 15 Agustus 2017

Android myDirection

package app.tracking.anak;


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.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 mydirection extends FragmentActivity {
private GoogleMap map;
ProgressDialog pDialog;
    List<LatLng> polyz;
    JSONArray array;
String mylatitude="-6.354167";
String mylongitude="106.843761";
String mylocation="Kampus Gunadarma, Indonesia (default)";
    double slat,slon;
 
    String mylatitude2="-6.354167";
String mylongitude2="106.843761";
String mylocation2="Kampus Gunadarma Indonesia (default)";
String nama="Kamus Gunadarma";

    double dlat,dlon;
 
    @SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.mydirection);


Intent io = this.getIntent();
nama=io.getStringExtra("nama");
       mylatitude=io.getStringExtra("myLati");
       mylongitude=io.getStringExtra("myLongi");
       mylocation=io.getStringExtra("myPosisi");

       mylocation2=io.getStringExtra("tujuan");
       mylatitude2=io.getStringExtra("latitude");
       mylongitude2=io.getStringExtra("longitude");
 
        slat=-6.354167;
        slon=106.843761;
        try{
        slat=Double.parseDouble(mylatitude);
        slon=Double.parseDouble(mylongitude);
        }
        catch(Exception e){  slat=-6.354167; slon=106.843761;}
     
        dlat=-6.354167;
        dlon=106.843761;
        try{
        dlat=Double.parseDouble(mylatitude2);
        dlon=Double.parseDouble(mylongitude2);
        }
        catch(Exception e){  dlat=-6.354167; dlon=106.843761;}

        map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
        map.addMarker(new MarkerOptions().position(new LatLng(slat, slon)).title("Posisi Anda").snippet(mylocation));
        map.addMarker(new MarkerOptions().position(new LatLng(dlat, dlon)).title(nama).snippet(mylocation2+"\nKoordinat:"+mylatitude2+","+mylongitude2));
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(slat, slon),10));
        map.animateCamera(CameraUpdateFactory.zoomTo(13), 2000, null);
        new GetDirection().execute();
     

}
 
    class GetDirection extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
   super.onPreExecute();
   pDialog = new ProgressDialog(mydirection.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="+mylatitude+","+mylongitude+"&destination="+mylatitude+","+mylongitude+"&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;
           }
        }

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

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




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

Code Multi:
-6.371830, 106.863044
-6.362788, 106.859568
-6.343509, 106.868752
-6.307272, 106.867147

code default maps.google.com
https://www.google.co.id/maps/dir/-6.371830,+106.863044/-6.362788,+106.859568/-6.343509,+106.868752/-6.307272,+106.867147/@-6.3403104,106.829124,13z/data=!3m1!4b1!4m18!4m17!1m3!2m2!1d106.863044!2d-6.37183!1m3!2m2!1d106.859568!2d-6.362788!1m3!2m2!1d106.868752!2d-6.343509!1m3!2m2!1d106.867147!2d-6.307272!3e0

atau disederhanakan sbb: 
https://www.google.co.id/maps/dir/-6.371830,+106.863044/-6.362788,+106.859568/-6.343509,+106.868752/-6.307272,+106.867147


Tidak ada komentar:

Posting Komentar