2012-11-21 81 views
0

我正在开发Android谷歌地图在我的论文中,我可以问一些关于Android的驾驶方向吗?Android谷歌地图驾驶方向

这是我的问题。

“如何在安卓谷歌地图中生成一个随机行驶方向,点击按钮时,它会随机给出从起点到终点的路径。”

谢谢!

我问谷歌地图通过这个。

private void parsing(GeoPoint start, GeoPoint end) throws ClientProtocolException, IOException, JSONException, URISyntaxException{ 
    HttpClient httpclient = new DefaultHttpClient(); 
    StringBuilder urlstring = new StringBuilder(); 
    urlstring.append("https://maps.googleapis.com/maps/api/directions/json?origin=") 
    .append(Double.toString((double)start.getLatitudeE6()/1E6)).append(",").append(Double.toString((double)start.getLongitudeE6()/1E6)).append("&destination=") 
    .append(Double.toString((double)end.getLatitudeE6()/1E6)).append(",").append(Double.toString((double)end.getLongitudeE6()/1E6)) 
    .append("&sensor=false"); 
    //urlstring.append("http://maps.googleapis.com/maps/api/directions/json?origin=Toronto&destination=Montreal&sensor=true"); 
    url = new URI(urlstring.toString()); 

    HttpPost httppost = new HttpPost(url); 

    HttpResponse response = httpclient.execute(httppost); 
    HttpEntity entity = response.getEntity(); 
    InputStream is = null; 
    is = entity.getContent(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
    StringBuilder sb = new StringBuilder(); 
    sb.append(reader.readLine() + "\n"); 
    String line = "0"; 
    while ((line = reader.readLine()) != null) { 
     sb.append(line + "\n"); 
    } 
    is.close(); 
    reader.close(); 
    String result = sb.toString(); 
    JSONObject jsonObject = new JSONObject(result); 
    JSONArray routeArray = jsonObject.getJSONArray("routes"); 
    JSONObject routes = routeArray.getJSONObject(0); 
    JSONObject overviewPolylines = routes.getJSONObject("overview_polyline"); 
    String encodedString = overviewPolylines.getString("points"); 
    List<GeoPoint> pointToDraw = decodePoly(encodedString); 

    //Added line: 
    mv_mapview.getOverlays().add(new RoutePathOverlay(pointToDraw)); 
} 

在地图上点击。

class MapOverlay extends Overlay { 

     @Override 
     public boolean onTap(final GeoPoint p, MapView mapView) { 
      // TODO Auto-generated method stub 

      geop_Tpoint = p; 
      mcon_mapcontrol = mapView.getController(); 
      mcon_mapcontrol.animateTo(p); 

      mv_mapview.invalidate(); 

      longitude = (int)(p.getLongitudeE6()*1E6); 
      latitude = (int)(p.getLatitudeE6()*1E6); 



      new AlertDialog.Builder(ShowMap.this) 
        .setTitle("Routes") 
        .setMessage("Display Routes?") 
        .setNegativeButton("NO", 
          new DialogInterface.OnClickListener() { 

           public void onClick(DialogInterface dialog, 
             int which) { 
            // TODO Auto-generated method stub 

            textlocation.setText("Tap in the Map for Destination!"); 
            dialog.dismiss(); 


           } 
          }) 
        .setPositiveButton("YES", 
          new DialogInterface.OnClickListener() { 

           public void onClick(DialogInterface dialog, 
             int which) { 
            // TODO Auto-generated method stub 
            try{ 
             textlocation.setText(""); 
             parsing(geop_startpoint,geop_Tpoint); 
             geocodeExecuter(geop_startpoint,geop_Tpoint); 
             showButton.setEnabled(true); 


            }catch(Exception e){ 

             textlocation.setText(""+ e.getMessage()); 

            } 


           } 

          }).show(); 
      showButton.setEnabled(true); 
      return true; 
     } 

的出发点是通过GPS,它会给我哪里IM一

+1

这个问题太宽泛,请指定。你有什么尝试? – sschrass

+0

对不起,对于我的语法感到遗憾..我的观点是,我有一个起点和一个终点。现在我的应用程序可以绘制一条路径,使用JSON从出发点到目的地点,我的问题是,如何改变具有相同点的路径?例如在Google map v3中,我可以拖动路径,但在我的我会用一个按钮来产生这种情况。 – HaTeRs

回答

5

这将帮助你从A到B的方向获得指示。

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr=" + startLatitude + "," + startLongitude + "&daddr=" + destlat + "," + destlon)); 
startActivity(intent); 
0

这要看你如何问路到谷歌地图。 如果您使用的链接达指定源和目的地创建一个意图,你可以尝试调用是这样的:

https://maps.google.com/maps?saddr=START_POINT&daddr=MIDDLE_POINT+to:DESTINATION_POINT 

这也接受GPS坐标,所以你也可以拨打这样的事情:

https://maps.google.com/maps?saddr=START_POINT&daddr=XX.YYYYY,WW.ZZZZZ+to:DESTINATION_POINT 

如果起点和终点都是固定的,你可以尝试做这样的事情:

  • 获取GPS坐标的起点
  • 获取您的目的地
  • GPS坐标生成一对夫妇的坐标(XY)不超过源和目标定义的矩形

这将产生A和B.

之间的某个随机点

谷歌地图足够聪明,可以选择距离道路最近的点来生成方向,只要将中间点放置在玉米田或类似的地方。


UPDATE: 阅读代码后: 我认为,要实现你的结果,最快的方式是找到A和B的GPS位置,然后生成两个并有2个呼叫之间的随机点:一-RandomPoint B-RandomPoint。

总距离将是A-R行程和R-B行程的总和,当时相同。

关于中点的计算: 首先:设置边界。 如果你想计算X:取A点的X和B点的X. 在这一点上:minX将是最低的,maxX将是最高的(你可能要仔细考虑你在做什么,如果你的分数靠近greenwitch)。 现在在你的最大值和最小值之间生成一个随机值。这是一项微不足道的任务,对此有很多结果。只是一个例子:How do I generate random integers within a specific range in Java?

+0

在我的情况下,我通过GPS获取起点,我的目的地是当我在地图上点击。并有一个对话框,似乎要求生成一个路径/路径..但​​如果我必须生成另一个路径/路径,我怎么能通过点击另一个按钮来实现呢?..非常感谢。 – HaTeRs

+0

我可以发布我的代码吗? – HaTeRs

+0

另一个问题我如何计算中间点? – HaTeRs

0

这是我如何转换它在Java中。

public List<GeoPoint> findCoordinatesInACircle(double lat, double longi,double radius){ 



     double newLat; 
     double newLong; 

     List<GeoPoint> searchpoints = new ArrayList<GeoPoint>(); 


     double rLat=(radius/6371)*(180/Math.PI); 
     double rLon= rLat/Math.cos(longi * (Math.PI/180)); 

     for(int i =0 ; i < 181; i++){ 

      double iRad = i*(Math.PI/180); 
      newLat = lat + (rLat * Math.sin(iRad)); 
      newLong = longi + (rLon * Math.cos(iRad)); 

      GeoPoint onePoint = new GeoPoint((int)(float)(newLat),(int)(float)(newLong)); 

      if(i%pointInterval == 0){ 
       searchpoints.add(onePoint); 
      } 

     } 
     return searchpoints; 

    }