2017-02-21 11 views
0

送信元から宛先まで複数のパスを表示したいが、方向APIのURLにパラメータ"alternatives=true"を使用している。しかし、私は複数のルートを表示することはできません。私はonPostExecute()の私の方法の表示部分に問題があると思う。私の問題に対処してください。Google Direction APIで複数のパスが表示されない

public void MapPoints(double SourceOne, double DestinationOne, double SourceTwo, double DestinationTwo){ 




     //LatLng origin = points.get(0); 
     //LatLng dest = points.get(1); 
     double SourceOneDraw = SourceOne; 
     double DestinationOneDraw = DestinationOne; 
     double SourceTwoDraw = SourceTwo; 
     double DestinationTwoDraw = DestinationTwo; 



     LatLng origin = new LatLng(SourceOneDraw,DestinationOneDraw); 
     LatLng dest = new LatLng(SourceTwoDraw,DestinationTwoDraw); 

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

     //Adding Alternative parameter 
     String alternative = "alternatives=true"; 

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

     // 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()); 
      Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show(); 
     }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(5); 
       lineOptions.color(Color.RED); 
      } 

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

答えて

0

あなたのコードを見ると、私はその問題を見ると思います。あなたは結果を介してあなたのループforループがあります。

for(int i=0;i<result.size();i++) 

しかし、ポリラインを描画するコードの行は、このループの内側ではありません。

mMap.addPolyline(lineOptions); 

私は「なら、私を修正してくださいmは間違っていますが、上記の行はループ内にないので一度だけ実行されるようです。これにより、マップ上に描画されるパスは1つだけになります。 forループ内でこのコード行を移動しようとすると、マップ上に複数のパスがありますか?関数全体は次のようになります:

@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(5); 
      lineOptions.color(Color.RED); 

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


    } 
+0

これは本当にありがとうございました:D今代替経路が表示されています。 –

関連する問題