2015-02-03 35 views
5

Kullanıcının konumunu gösterecek ve bu konuma bir işaretçi yerleştirecek bir Uygulama oluşturuyorum. Kullanıcı hareket ettikten sonra. İşaretleyici kaldırılacak ve yeni bir işaretçi oluşturulacaktı. Şimdi. Uygulamanın içine kodlanmış ve haritada rotayı gösterecek Nokta A ve B Noktası üzerinde işaretçiler yapmak istiyorum. Haritadaki en yakın yolu kullanacaktır. Biraz araştırma yaptım ama 5 yıl öncesine ait eski kodu buldum. Bu konuda bana rehberlik edecek kadar nazik olabilir.Android Googlemaps'te işaretçiler arasında rota nasıl gösterilir

A Noktası ve B Noktası, LocationChanged yönteminde.

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.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 

import android.content.Context; 
import android.content.Intent; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.provider.Settings; 
import android.support.v4.app.FragmentActivity; 
import android.widget.Toast; 

public class MainActivity extends FragmentActivity implements LocationListener { 
    private GoogleMap map; 
    private LocationManager locationManager; 
    private String provider; 
    LatLng coordinate; 
    Marker startPerc; 

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


     LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); 
     boolean enabledGPS = service 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 
     boolean enabledWiFi = service 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     // Check if enabled and if not send user to the GSP settings 
     // Better solution would be to display a dialog and suggesting to 
     // go to the settings 
     if (!enabledGPS) { 
      Toast.makeText(this, "GPS signal not found", Toast.LENGTH_LONG).show(); 
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(intent); 
     } 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    // Define the criteria how to select the location provider -> use 
    // default 
    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(provider); 

    // Initialize the location fields 
    if (location != null) { 
     Toast.makeText(this, "Selected Provider " + provider, 
       Toast.LENGTH_SHORT).show(); 
     onLocationChanged(location); 
    } else { 

     //do something 
    } 


} 

/* Request updates at startup */ 
@Override 
protected void onResume() { 
    super.onResume(); 
    locationManager.requestLocationUpdates(provider, 300, 1, this); 
} 

/* Remove the locationlistener updates when Activity is paused */ 
@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

@Override 
public void onLocationChanged(Location location) { 

    double lat = location.getLatitude(); 
    double lng = location.getLongitude(); 
    Toast.makeText(this, "Location " + lat+","+lng, 
      Toast.LENGTH_LONG).show(); 
    LatLng coordinate = new LatLng(lat, lng); 
    Toast.makeText(this, "Location " + coordinate.latitude+","+coordinate.longitude, 
      Toast.LENGTH_LONG).show(); 
    if(map!=null){ 
     map.clear(); 
    } 
    //map.clear(); 
    GoogleMap map; 
    if(startPerc!=null){ 
     startPerc.remove(); 
    } 
    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
    startPerc = map.addMarker(new MarkerOptions() 
    .position(coordinate) 
     .title("Start") 
     .snippet("Your Position") 
     .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))); 
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinate, 20)); 



    map.addMarker(new MarkerOptions() 
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) 
        .position(new LatLng(3.214732, 101.747047)) 
        .title("Point A") 
        .snippet("Bus Stop") 
        .flat(true)); 

    map.addMarker(new MarkerOptions() 
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) 
        .position(new LatLng(3.214507, 101.749697)) 
        .title("Point B") 
        .snippet("Bus Stop") 
        .flat(true)); 



startPerc.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)); 

} 


@ Override 
public void onProviderDisabled(String provider) { 
    Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 


@Override 
public void onProviderEnabled(String provider) { 
    Toast.makeText(this, "Disabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 


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

} 
void Delay(int Seconds){ 
    long Time = 0; 
    Time = System.currentTimeMillis(); 
    while(System.currentTimeMillis() < Time+(Seconds*1000)); 
} 
} 

Yeni kod K Neeraj tarafından sağlanmaktadır. Hala üzülüyor lütfen kontrol edin.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import org.json.JSONObject; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
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.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.google.android.gms.maps.model.PolylineOptions; 

import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.provider.Settings; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.widget.Toast; 

public class MainActivity extends FragmentActivity implements LocationListener { 
    private GoogleMap map; 
    private LocationManager locationManager; 
    private String provider; 
    LatLng coordinate; 
    Marker startPerc; 

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



     LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); 
     boolean enabledGPS = service 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 
     boolean enabledWiFi = service 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     // Check if enabled and if not send user to the GSP settings 
     // Better solution would be to display a dialog and suggesting to 
     // go to the settings 
     if (!enabledGPS) { 
      Toast.makeText(this, "GPS signal not found", Toast.LENGTH_LONG).show(); 
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(intent); 
     } 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     // Define the criteria how to select the location provider -> use 
     // default 
     Criteria criteria = new Criteria(); 
     provider = locationManager.getBestProvider(criteria, false); 
     Location location = locationManager.getLastKnownLocation(provider); 



     // Initialize the location fields 
     if (location != null) { 
      Toast.makeText(this, "Selected Provider " + provider, 
        Toast.LENGTH_SHORT).show(); 
      onLocationChanged(location); 
     } else { 

     //do something 
    } 


} 


/* Request updates at startup */ 
@Override 
protected void onResume() { 
    super.onResume(); 
    locationManager.requestLocationUpdates(provider, 300, 1, this); 
} 

/* Remove the locationlistener updates when Activity is paused */ 
@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

@Override 
public void onLocationChanged(Location location) { 

    double lat = location.getLatitude(); 
    double lng = location.getLongitude(); 
    Toast.makeText(this, "Location " + lat+","+lng, 
      Toast.LENGTH_LONG).show(); 
    LatLng coordinate = new LatLng(lat, lng); 
    Toast.makeText(this, "Location " + coordinate.latitude+","+coordinate.longitude, 
      Toast.LENGTH_LONG).show(); 



    if(map!=null){ 
     map.clear(); 
    } 

    GoogleMap map; 
    if(startPerc!=null){ 
     startPerc.remove(); 
    } 
    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
    startPerc = map.addMarker(new MarkerOptions() 
    .position(coordinate) 
     .title("Start") 
     .snippet("Your Position") 
     .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))); 
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinate, 12)); 




    startPerc.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)); 

// Assign your origin and destination 
// These points are your markers coordinates 
LatLng origin = new LatLng(3.214732, 101.747047); 
LatLng dest = new LatLng(3.214507, 101.749697); 

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

// Fetches data from url passed 
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 Places 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; 
     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); 
    } 
} 




@ Override 
public void onProviderDisabled(String provider) { 
    Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 


@Override 
public void onProviderEnabled(String provider) { 
    Toast.makeText(this, "Disabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 


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

} 
void Delay(int Seconds){ 
    long Time = 0; 
    Time = System.currentTimeMillis(); 
    while(System.currentTimeMillis() < Time+(Seconds*1000)); 
} 
} 

Sonra yeni bir DirectionJSONParser.java İki arasındaki Rota harita çizmek nasıl gösterir

Drawing Driving Route Directions Between Two Locations Using Google Directions In Google Map Android Api v2

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

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

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

public class DirectionsJSONParser { 

    /** 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; 
} 
} 
+0

bir [Eğitimi] Bkz (http://javapapers.com/android/draw-path-on-google-maps-android-api/) –

+0

dosyasını içe aktarırken bu hatayı alıyorum. Ne yapmalıyım? [2015-02-03 - Yol Google Haritalar API'sı v2] Hedef çözülemiyor 'Google Inc.: Google API'leri: 18' –

+0

Sağ tıklama Proje> Özellikler> Android> Bir sürüm seçin> Uygula –

cevap

11
@Override 
public void onLocationChanged(Location location) { 
.... 
startPerc.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)); 

// Assign your origin and destination 
// These points are your markers coordinates 
LatLng origin = new LatLng(3.214732, 101.747047); 
LatLng dest = new LatLng(3.214507, 101.749697); 

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

// Fetches data from url passed 
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 Places 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; 
     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); 
    } 
} 

Bu eğitimde göz at yarattı puan.

+0

Bunun için çok yeniyim. Koduma ne koyabileceğime dair bana rehberlik edebilir misin? Kod iyi çalışıyor. 2 işaretçiyi elle yazabilirim ama nasıl uygulayacağımı bilmiyorum. proje –

+0

Cevabımı düzenledim, bir baksana ... –

+0

Kazaya çarptı. Birkaç saniye ve çarpışmayı gösteren haritayı gösterecek 2 hızlı soru 1) Yol TarifleriJSONParser.class dosyasını oluşturmalı ve LinkJSONParser sınıfının kodunu sağdan ? 2) Tutulduğu zaman yapıştırarak yapıştırdım. Sadece MarkerOptions işaretçisinde = yeni MarkerOptions(); bir uyarı verir. Uyarı "Yerel değişken işaretçisinin değeri kullanılır" –

2

İşte küçük kodlu tam kod burada. Sadece daha güzel.

import android.app.Activity; 
import android.os.AsyncTask; 
import android.util.Log; 

import com.eddress.R; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.PolylineOptions; 

import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class GoogleMapsPath { 

    public GoogleMap map; 

    public GoogleMapsPath(Activity context, GoogleMap map, LatLng origin, LatLng dest){ 
     this.map = map; 

     String url = getDirectionsUrl(origin,dest); 
     FetchUrl FetchUrl = new FetchUrl(); 
     FetchUrl.execute(url); 

    } 

    // Fetches data from url passed 
    private class FetchUrl extends AsyncTask<String, Void, String> { 

     @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]); 
       Log.d("Background Task data", data.toString()); 
      } catch (Exception e) { 
       Log.d("Background Task", e.toString()); 
      } 
      return data; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 

      ParserTask parserTask = new ParserTask(); 

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

     } 
    } 


    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(); 
      Log.d("downloadUrl", data.toString()); 
      br.close(); 

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


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


    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]); 
       Log.d("ParserTask",jsonData[0].toString()); 
       DirectionsJSONParser parser = new DirectionsJSONParser(); 
       Log.d("ParserTask", parser.toString()); 

       // Starts parsing data 
       routes = parser.parse(jObject); 
       Log.d("ParserTask","Executing routes"); 
       Log.d("ParserTask",routes.toString()); 

      } catch (Exception e) { 
       Log.d("ParserTask",e.toString()); 
       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; 
      PolylineOptions lineOptions = null; 

      // Traversing through all the routes 
      for (int i = 0; i < result.size(); i++) { 
       points = new ArrayList<>(); 
       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(8); 
       lineOptions.color(R.color.globalRedLight); 

       Log.d("onPostExecute","onPostExecute lineoptions decoded"); 

      } 

      // Drawing polyline in the Google Map for the i-th route 
      if(lineOptions != null) { 
       map.addPolyline(lineOptions); 
      } 
      else { 
       Log.d("onPostExecute","without Polylines drawn"); 
      } 
     } 
    } 
} 
+1

bu http://wptrafficanalyzer.in/blog/drawing-driving-route-directions-between-two-locations-using-google-directions-in-google-map-android-api-v2/ adresine bir göz atın. – Zoffa

İlgili konular