lawang code

lawang Code


Tanyakan kode disini

bagaimana menampilkan polyline?

ditanyakan oleh Fuad Sofi Muhajir 3 tahun yang lalu

Permisi Master" para lawang code, ane mau nanya sedkit ih om..om semua. ini tentang android. saya berharap sekali bisa di bantu dan dapat permecahan masalah yang saya alami. jadi begini saya kan membuat aplikasi Map bgtu, nah pada aplikasi map itu terdapat pencarian lokasi. jadi ketika saya klik tombol mencari dengan pilihan tujuan yang saya tuju itu harus terdapat polyline atau garis untuk menunjuk ke tempat tujuan akhir yang kita telah pilih.

saya mempunyai code seperti ini public void onClick(View klik){

        switch (klik.getId()) {
        case R.id.cari:
            if (actv.getText().toString().equals(tujuan[0])){
                double latitude = -6.198880;
                double longitude = 106.851783;
                final LatLng pos = new LatLng(-6.198880,106.851783);
                Marker Pos = googleMap.addMarker(new MarkerOptions().position(pos).title("Perpusnas").snippet("perpusnas"));
                googleMap.moveCamera(CameraUpdateFactory.newLatLng(pos));
            }

jika saya ingin membuat polyline ketika apa yang harus saya tambahkan yah?

mohon bantuan'a om..om master lawang Code, saya masin newbie

Menampilkan 1-2 dari 2 hasil
handita okviyanto menjawab 3 tahun yang lalu :

Kayak gini bukan maksudnya?

 // ... get a map.
 // Add a thin red line from London to New York.
 Polyline line = googleMap.addPolyline(new PolylineOptions()
 .add(new LatLng(51.5, -0.1), new LatLng(40.7, -74.0))
 .width(5)
 .color(Color.RED));


Fuad Sofi Muhajir menjawab 3 tahun yang lalu :

nah itu kan kalau secara manual kan ya? ane mau secara otomatis gitu.. jadi untuk membuat polyline'a itu make metode gitu. metode'a itu di taro di JSONParser. kaya begini nih.

public class MainActivity extends FragmentActivity implements LocationListener {

    GoogleMap mGoogleMap;
    ArrayList<LatLng> mMarkerPoints;
    double mLatitude=0;
    double mLongitude=0;

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

        // Getting Google Play availability status
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

        if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
            dialog.show();

        }else { // Google Play Services are available

            // Initializing 
            mMarkerPoints = new ArrayList<LatLng>();

            // Getting reference to SupportMapFragment of the activity_main
            SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

            // Getting Map for the SupportMapFragment
            mGoogleMap = fm.getMap();

            // Enable MyLocation Button in the Map
            mGoogleMap.setMyLocationEnabled(true);


            // Getting LocationManager object from System Service LOCATION_SERVICE
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            String provider = locationManager.getBestProvider(criteria, true);

            // Getting Current Location From GPS
            Location location = locationManager.getLastKnownLocation(provider);

            if(location!=null){
                onLocationChanged(location);
            }

            locationManager.requestLocationUpdates(provider, 20000, 0, this);           

            // Setting onclick event listener for the map
            mGoogleMap.setOnMapClickListener(new OnMapClickListener() {

                @Override
                public void onMapClick(LatLng point) {

                    // Already map contain destination location 
                    if(mMarkerPoints.size()>1){

                        FragmentManager fm = getSupportFragmentManager();   
                        mMarkerPoints.clear();
                        mGoogleMap.clear();
                        LatLng startPoint = new LatLng(mLatitude, mLongitude);
                        drawMarker(startPoint);
                    }

                    drawMarker(point);

                    // Checks, whether start and end locations are captured
                    if(mMarkerPoints.size() >= 2){                  
                        LatLng origin = mMarkerPoints.get(0);
                        LatLng dest = mMarkerPoints.get(1);

                        // Getting URL to the Google Directions API
                        String url = getDirectionsUrl(origin, dest);                

                        DownloadTask downloadTask = new DownloadTask();

                        // Start downloading json data from Google Directions API
                        downloadTask.execute(url);
                    }                   
                }
            });         
        }       
    }

    private String getDirectionsUrl(LatLng origin,LatLng dest){

        // Origin of route
        String str_origin = "origin="+origin.latitude+","+origin.longitude;

        // Destination of route
        String str_dest = "destination="+dest.latitude+","+dest.longitude;          

        // Sensor enabled
        String sensor = "sensor=false";         

        // Building the parameters to the web service
        String parameters = str_origin+"&"+str_dest+"&"+sensor;

        // Output format
        String output = "json";

        // Building the url to the web service
        String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;      

        return url;
    }

    /** A method to download json data from url */
    private String downloadUrl(String strUrl) throws IOException{
        String data = "";
        InputStream iStream = null;
        HttpURLConnection urlConnection = null;
        try{
                URL url = new URL(strUrl);

                // Creating an http connection to communicate with url 
                urlConnection = (HttpURLConnection) url.openConnection();

                // Connecting to url 
                urlConnection.connect();

                // Reading data from url 
                iStream = urlConnection.getInputStream();

                BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

                StringBuffer sb  = new StringBuffer();

                String line = "";
                while( ( line = br.readLine())  != null){
                        sb.append(line);
                }

                data = sb.toString();

                br.close();

        }catch(Exception e){
                Log.d("Exception while downloading url", e.toString());
        }finally{
                iStream.close();
                urlConnection.disconnect();
        }
        return data;
     }



    /** A class to download data from Google Directions URL */
    private class DownloadTask extends AsyncTask<String, Void, String>{         

        // Downloading data in non-ui thread
        @Override
        protected String doInBackground(String... url) {

            // For storing data from web service
            String data = "";

            try{
                // Fetching the data from web service
                data = downloadUrl(url[0]);
            }catch(Exception e){
                Log.d("Background Task",e.toString());
            }
            return data;        
        }

        // Executes in UI thread, after the execution of
        // doInBackground()
        @Override
        protected void onPostExecute(String result) {           
            super.onPostExecute(result);            

            ParserTask parserTask = new ParserTask();

            // Invokes the thread for parsing the JSON data
            parserTask.execute(result);

        }       
    }

    /** A class to parse the Google Directions in JSON format */
    private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{

        // Parsing the data in non-ui thread        
        @Override
        protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {

            JSONObject jObject; 
            List<List<HashMap<String, String>>> routes = null;                     

            try{
                jObject = new JSONObject(jsonData[0]);
                DirectionsJSONParser parser = new DirectionsJSONParser();

                // Starts parsing data
                routes = parser.parse(jObject);    
            }catch(Exception e){
                e.printStackTrace();
            }
            return routes;
        }

        // Executes in UI thread, after the parsing process
        @Override
        protected void onPostExecute(List<List<HashMap<String, String>>> result) {
            ArrayList<LatLng> points = null;
            PolylineOptions lineOptions = null;

            // Traversing through all the routes
            for(int i=0;i<result.size();i++){
                points = new ArrayList<LatLng>();
                lineOptions = new PolylineOptions();

                // Fetching i-th route
                List<HashMap<String, String>> path = result.get(i);

                // Fetching all the points in i-th route
                for(int j=0;j<path.size();j++){
                    HashMap<String,String> point = path.get(j);                 

                    double lat = Double.parseDouble(point.get("lat"));
                    double lng = Double.parseDouble(point.get("lng"));
                    LatLng position = new LatLng(lat, lng); 

                    points.add(position);                       
                }

                // Adding all the points in the route to LineOptions
                lineOptions.addAll(points);
                lineOptions.width(2);
                lineOptions.color(Color.RED);   

            }

            // Drawing polyline in the Google Map for the i-th route
            mGoogleMap.addPolyline(lineOptions);                            
        }           
    }   


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private void drawMarker(LatLng point){
        mMarkerPoints.add(point);

        // Creating MarkerOptions
        MarkerOptions options = new MarkerOptions();

        // Setting the position of the marker
        options.position(point);

        /** 
         * For the start location, the color of marker is GREEN and
         * for the end location, the color of marker is RED.
         */
        if(mMarkerPoints.size()==1){
            options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
        }else if(mMarkerPoints.size()==2){
            options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
        }

        // Add new marker to the Google Map Android API V2
        mGoogleMap.addMarker(options);      
    }

    @Override
    public void onLocationChanged(Location location) {
        // Draw the marker, if destination location is not set
        if(mMarkerPoints.size() < 2){

            mLatitude = location.getLatitude();
            mLongitude = location.getLongitude();
            LatLng point = new LatLng(mLatitude, mLongitude);

            mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(point));
            mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(12));        

            drawMarker(point);          
        } 

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub      
    }   
}  

JSONParsernya

public class JsonParser {

    /** Receives a JSONObject and returns a list of lists containing latitude and longitude */
    public List<List<HashMap<String,String>>> parse(JSONObject jObject){

        List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ;
        JSONArray jRoutes = null;
        JSONArray jLegs = null;
        JSONArray jSteps = null;    

        try {           

            jRoutes = jObject.getJSONArray("routes");

            /** Traversing all routes */
            for(int i=0;i<jRoutes.length();i++){            
                jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
                List path = new ArrayList<HashMap<String, String>>();

                /** Traversing all legs */
                for(int j=0;j<jLegs.length();j++){
                    jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps");

                    /** Traversing all steps */
                    for(int k=0;k<jSteps.length();k++){
                        String polyline = "";
                        polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
                        List<LatLng> list = decodePoly(polyline);

                        /** Traversing all points */
                        for(int l=0;l<list.size();l++){
                            HashMap<String, String> hm = new HashMap<String, String>();
                            hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude) );
                            hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude) );
                            path.add(hm);                       
                        }                               
                    }
                    routes.add(path);
                }
            }

        } catch (JSONException e) {         
            e.printStackTrace();
        }catch (Exception e){           
        }


        return routes;
    }   


    /**
     * Method to decode polyline points 
     * Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java 
     * */
    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;
    }
}

nah itu codingan kan untuk menarik polyline dari tempat posisi kita ke marker tujuan, dengan markernya itu bsa di sentuh dimana saja yang kita inginkan.

nah jadi gni, ane mau gabungin antara codingan itu dengan codingan ane yang dimana codingan ane untuk menentukan tmpat tujuan melalui search dengan data yang ane udah sediain. jadi pas bgtu ane udah pilih tujuan ane lalu ane klik tomobol mencari kan langsung muncul marker'a tuh. marker tempat tujuan ane. nah di map itu ada mode driving. jadi pas bgtu ane klik mode driving. langusng ada tuh polyline antara posisi kita berada sekarang dengan tujuan akhir kita. ya hampir mirip dengan google maps lah. itu gmna ya??

ini codingan ane, yang ane mau gabungin sama codigan di atas. codingan ane milih tujuannya pake switch

public void onClick(View klik){

        switch (klik.getId()) {
        case R.id.cari:
            if (actv.getText().toString().equals(tujuan[0])){
                double latitude = -6.198880;
                double longitude = 106.851783;
                final LatLng pos = new LatLng(-6.198880,106.851783);
                Marker Pos = googleMap.addMarker(new MarkerOptions().position(pos).title("Perpusnas").snippet("perpusnas"));
                googleMap.moveCamera(CameraUpdateFactory.newLatLng(pos));
            }
            else if (actv.getText().toString().equals(tujuan[1])) {
                final LatLng pos1 = new LatLng(-6.175392 , 106.827153);
                Marker Pos1 = googleMap.addMarker(new MarkerOptions().position(pos1).title("Monas").snippet("Monas"));
                googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {

                    @Override
                    public void onCameraChange(CameraPosition position) {
                        // TODO Auto-generated method stub
                        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(pos1, 10));
                    }
                });
            }else if (actv.getText().toString().equals(tujuan[2])) {
                final LatLng pos2 = new LatLng(-6.163142 ,106.833092);
                Marker Pos2 = googleMap.addMarker(new MarkerOptions().position(pos2).title("Toko Buku Gramedia").snippet("Gramedia"));
                googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {

                    @Override
                    public void onCameraChange(CameraPosition position) {
                        // TODO Auto-generated method stub
                        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(pos2, 10));
                    }
                });
            }else if (actv.getText().toString().equals(tujuan[3])) {
                final LatLng pos3 = new LatLng(-6.208763, 106.845599);
                Marker Pos3 = googleMap.addMarker(new MarkerOptions().position(pos3).title("Perpusda").snippet("Perpusda"));
                googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {

                    @Override
                    public void onCameraChange(CameraPosition position) {
                        // TODO Auto-generated method stub
                        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(pos3,10));
                    }




Anda harus login terlebih dahulu untuk memberikan komentar

Recent Tag

X 6
X 48
X 14
X 10
X 1
X 5
X 4
X 15
X 10

Bantuan

Help

Feedback

Help