2014-09-25 90 views
0

我想在我的当前位置(如印多尔)到沙特阿拉伯之间画路线。 我可以绘制indore之间的路线德里..但不是从indore到沙特阿拉伯。Google地图V2不允许绘制路线?

我尝试使用意图通过传递我的拉特长和沙特阿拉伯的lat长,但谷歌地图应用程序显示没有路线。 我该怎么做?

回答

0

您应该打电话到谷歌方向api,并手动在地图上绘制折线。您可以使用此方法:

public void setRoute() { 
    String url = getDirectionsUrl(origin, dest); 
    DownloadTask downloadTask = new DownloadTask(); 
    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"; 

    // Mode travel 
    //String mode = "mode=" + modeT; Uncomment this if you want choose a travel mode (driving, walking or transit) 

    // Departure Time, its neccesary to public transport 
    String departureTime = ""; 
    if (modeT.equals("transit")) { 
     long seconds = (System.currentTimeMillis()/1000); 
     departureTime = "&departure_time=" + seconds; 
    } 

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

    // 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 = ActFullMapOne.this.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]); 
      ApiDirectionsParser parser = new ApiDirectionsParser(); 

      // 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(); 
     String distance = ""; 
     String duration = ""; 

     if (result.size() < 1) { 
      Toast.makeText(ActFullMapOne.this.getBaseContext(), "No Points", Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     // 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); 
       if (j == 0) { 
        distance = point.get("distance"); 
        continue; 
       } else if (j == 1) { 
        duration = point.get("duration"); 
        continue; 
       } 
       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(7); 
      lineOptions.color(Color.parseColor("#CC0060FF")); 
     } 

     // Drawing polyline in the Google Map for the i-th route 
     if (polyline != null) 
      polyline.remove();    

     polyline = ActFullMapOne.this.nMap.addPolyline(lineOptions); 
    } 

} 

EDIT 1。我刚刚阅读您的文章,我已经看到您只想在Google地图上打开路线。如果你想显示在谷歌地图应用程序的路径,使用此方法:

public void goToNavigation() { 
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("google.navigation:q=" + modLugar.latitud + "," + modLugar.longitud)); 
    startActivity(Intent.createChooser(i, "Elige una aplicación")); 
} 
+0

我尝试了我的网址是这个https://maps.googleapis.com/maps/api/directions/json?waypoints=optimize :true | 22.725425,75.894697 | 24.016270,45.217712&sensor = false..when当我更改纬度时长它工作 – Meenal 2014-09-25 07:49:12

+0

如果我使用意图是显示没有路线发现 – Meenal 2014-09-25 07:52:33