2015-10-08 13 views
7

Sono nuovo ad Android. Voglio tracciare percorsi tra più marcatori. I a, ottenendo latitudine, longitudine e datetime dal server. Ora voglio mostrare il percorso tra i punti. Li ho memorizzati nell'arrayist. Ecco come ottengo i punti nel task asincrono doInBackground().Tracciare percorsi tra più punti sulla mappa

newLatt= new ArrayList<String>(); 
    newLongg= new ArrayList<String>(); 
    newdatTime= new ArrayList<String>(); 

    JSONArray arr = new JSONArray(strServerResponse); 
    for (int i = 0; i < arr.length(); i++) { 
     JSONObject jsonObj1 = arr.getJSONObject(i); 
     String status = jsonObj1.optString("status"); 
     if (status!="false"){ 
      Pojo pojo = new Pojo(); 
      String latitude = jsonObj1.optString("Latitude"); 
      String longitude = jsonObj1.optString("Longitude"); 
      String date_time = jsonObj1.optString("date_time"); 
      newLatt.add(latitude); 
      newLongg.add(longitude); 
      newdatTime.add(date_time); 
     }else { 
       Handler handler = new Handler(Looper.getMainLooper()); 
       handler.post(new Runnable() { 
       @Override 
       public void run() { 
        AlertDialog alertDialog = new AlertDialog.Builder(
        MapActivity.this).create(); 
        alertDialog.setMessage("Locations Not Available"); 
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
        } 
        }); 
        alertDialog.show(); 
        } 
       } 
     ); 
    } 

e in postExecute() Metodo sto mostrando marcatori

 SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     map = supportMapFragment.getMap(); 
     map.setMyLocationEnabled(true); 
     if (newLatt.size()>0){ 
      for (int i = 0; i < newLatt.size(); i++) { 
       Double lati = Double.parseDouble(newLatt.get(i)); 
       Double longi = Double.parseDouble(newLongg.get(i)); 
       String dattme = newdatTime.get(i); 
       dest = new LatLng(lati, longi); 
       if (map != null) { 
        MarkerOptions markerOptions = new MarkerOptions(); 
        markerOptions.position(dest); 
        map.moveCamera(CameraUpdateFactory.newLatLng(dest)); 
        map.animateCamera(CameraUpdateFactory.zoomTo(15)); 

        markerOptions.icon(BitmapDescriptorFactory 
          .defaultMarker(BitmapDescriptorFactory.HUE_RED)); 
        markerOptions.title("" + dattme); 
        map.addMarker(markerOptions); 
        map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
         @Override 
         public boolean onMarkerClick(Marker marker) { 
          marker.showInfoWindow(); 
          return false; 
         } 
        }); 

UPDATE

PolylineOptions rectOptions = new PolylineOptions(); 
     //this is the color of route 
     rectOptions.color(Color.argb(255, 85, 166, 27)); 
     LatLng startLatLng = null; 
     LatLng endLatLng = null; 
     SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     map = supportMapFragment.getMap(); 
     map.setMyLocationEnabled(true); 
     if (newLatt.size()>0){ 
      for (int i = 0; i < newLatt.size(); i++) { 
       Double lati = Double.parseDouble(newLatt.get(i)); 
       Double longi = Double.parseDouble(newLongg.get(i)); 
       String dattme = newdatTime.get(i); 
       dest = new LatLng(lati, longi); 
       if (map != null) { 
        MarkerOptions markerOptions = new MarkerOptions(); 
        markerOptions.position(dest); 
        map.moveCamera(CameraUpdateFactory.newLatLng(dest)); 
        map.animateCamera(CameraUpdateFactory.zoomTo(15)); 

        markerOptions.icon(BitmapDescriptorFactory 
          .defaultMarker(BitmapDescriptorFactory.HUE_RED)); 
        markerOptions.title("" + dattme); 
        map.addMarker(markerOptions); 
        map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
         @Override 
         public boolean onMarkerClick(Marker marker) { 
          marker.showInfoWindow(); 
          return false; 
         } 
        }); 

         LatLng latlng = new LatLng(lati, 
           longi); 
         if (i == 0) { 
          startLatLng = latlng; 
         } 
         if (i == newLatt.size() - 1) { 
          endLatLng = latlng; 
         } 
         rectOptions.add(latlng); 
        String url = getDirectionsUrl(startLatLng, endLatLng); 
        DownloadTask downloadTask = new DownloadTask(); 
        downloadTask.execute(url); 
       } 

      } 
      map.addPolyline(rectOptions); 

getDirections:

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

risposta

0
Android does not provide embedded direction service in google map api. To draw route between points you must use google direction services REST API . 
You can get complete code and description from http://wptrafficanalyzer.in/blog/drawing-driving-route-directions-between-two-locations-using-google-directions-in-google-map-android-api-v2/ 


ArrayList<LatLng> points = null; 
      PolylineOptions lineOptions = null; 
      MarkerOptions markerOptions = new MarkerOptions(); 

      // 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 
      map.addPolyline(lineOptions); 
+0

Sì, lo so questo. ma ho latitudine e longitudine in arraylist, come accedervi per mostrare il percorso ?? –

+0

la tua lista ha una mappa hash? – USKMobility

2

Nel tuo postEsegui aggiungere il seguente codice per aggiungere ploylines sulla mappa.

   PolylineOptions rectOptions = new PolylineOptions(); 
       //this is the color of route 
       rectOptions.color(Color.argb(255, 85, 166, 27)); 

       LatLng startLatLng = null; 
       LatLng endLatLng = null; 
       for (int i = 0; i < newLatt.size(); i++) { 
       Double lati = Double.parseDouble(newLatt.get(i)); 
       Double longi = Double.parseDouble(newLongg.get(i)); 
        LatLng latlng = new LatLng(lati, 
          longi); 
        if (i == 0) { 
         startLatLng = latlng; 
        } 
        if (i == jArr.length() - 1) { 
         endLatLng = latlng; 
        } 
        rectOptions.add(latlng); 
       } 
       map.addPolyline(rectOptions); 

codifica Felice ...

+0

Grazie mille. Ma mostra la linea retta –

+1

Registra la dimensione di newLatt. U sta prendendo una linea retta perché probabilmente ha solo due lat lng. –

+0

ok. ma cosa è jArr qui ?? –

Problemi correlati