2015-10-08 20 views
7

Android cihazında yeni. Birden fazla işaretçi arasında rota çizmek istiyorum. Ben sunucudan enlem, boylam ve datetime alma. Şimdi noktaları arasında rotayı göstermek istiyorum. Onları arraillide sakladım. İşte ben asenkron görev doInBackground() içindeki noktaları nasıl ediniyorum. Haritadaki çok nokta arasındaki güzergahlar çizili

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

ve postExecute() içinde

Yöntem I gösteren am markörler

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

cevap

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

Evet ben bunu biliyorum. ama ben arraylist içinde enlem ve boylam var, onlara rota göstermek için nasıl erişilir? –

+0

listenizi hash haritası var? – USKMobility

2

PostanızdaExecute haritada ploilin eklemek için aşağıdaki kodu ekleyin.

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

Mutlu kodlama ...

+0

Çok teşekkürler. Ancak düz çizgi –

+1

yeni Latt boyutunu günlüğe kaydeder. Düz bir çizgi alıyoruz, muhtemelen sadece iki lat lngs var. –

+0

ok. ama waht burada mı ?? –

İlgili konular