2015-11-03 41 views

回答

0

这两种方法都会告诉你鸟儿飞行的距离,而不是公路。要通过公路获取的距离,你要问谷歌,这种方式:

public String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){ 
String parsedDistance; 
String response; 
    Thread thread=new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 

       URL url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric&mode=driving"); 
       final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setRequestMethod("POST"); 
       InputStream in = new BufferedInputStream(conn.getInputStream()); 
       response = org.apache.commons.io.IOUtils.toString(in, "UTF-8"); 

       JSONObject jsonObject = new JSONObject(response); 
       JSONArray array = jsonObject.getJSONArray("routes"); 
       JSONObject routes = array.getJSONObject(0); 
       JSONArray legs = routes.getJSONArray("legs"); 
       JSONObject steps = legs.getJSONObject(0); 
       JSONObject distance = steps.getJSONObject("distance"); 
       parsedDistance=distance.getString("text"); 

      } catch (ProtocolException e) { 
       e.printStackTrace(); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
thread.start(); 
try { 
    thread.join(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
return parsedDistance; 
} 

parsedDistance变量会给你的距离,以公里,两个特定点之间。

编辑

或者,你可以给控制权交给谷歌地图应用程序,如果已安装,这样一来:

String uri = "http://maps.google.com/maps?f=d&hl=en&saddr=" + origin.getLatitude() + "," + origin.getLongitude() + "&daddr=" + destination.getLatitude() + "," + destination.getLongitude(); 
       Uri urimap = Uri.parse(uri); 
       Intent mapIntent = new Intent(Intent.ACTION_VIEW, urimap); 
       mapIntent.setPackage("com.google.android.apps.maps"); 
       if (mapIntent.resolveActivity(getPackageManager()) != null) { 
        startActivity(mapIntent); 
       } 

这样一来,手机会打开谷歌地图应用,并显示两个设定点之间的路线。

+0

重要的是要注意,这种方法会给出由Google计算的路线中的距离。这可能不是什么OP之后,因为他/她的路线可能不同于谷歌的 –

+0

是的,的确如此。但是,Google会将您送回最短路线。看起来对我很好。 – Fustigador

0

我不知道哪种方法更准确,但根据我以前的经验distanceBetween()效果很好。我已经使用这种方法来达到和你一样的观点。我建议你使用这个。

+0

谢谢,我会尝试 –

+0

正如我在我的回答中所说的,你所要求的两种方法不会让你远离公路。如果直线距离是您所追求的,请使用其中一种方法。如果你需要通过公路行驶,它会给你错误的结果。 – Fustigador

0

老线程但是在未来回复任何人的帮助。

在Android SDK中,distanceTo和distanceBetween返回基于Inverse/Vincenty公式的距离,参见details here,这与半岛距离公式相比更精确一些。

除了这些,上面返回的距离不返回旅行距离[即对导航不够准确]。因此,使用基于距离矩阵API [webservice/restful and JS apis]的谷歌地图来获得旅行精确的距离。但请注意,此api的免费版本有限制,并且它们有商业用途的高级版本。

0
  • 两种方法distanceBetween()distanceTo()有 不同的目的。

  • 由于distanceBetween()文档说,它为我们提供了以米为单位的距离以及它们之间最短距离的方位。它为我们提供了一个方向,distanceTo()不给予。

  • 根据distanceBetween() docs-

    所计算的距离被存储在结果[0]。如果结果长度为2 或更大,则初始方位存储在结果[1]中。如果结果 的长度大于等于3,则最终方位存储在结果[2]中。

    所以你会得到这个函数的距离和方位。

  • 但是,另一方面,当我们需要一个方便的工具来获取两个位置之间的距离并完成很多工作。我们将使用distanceTo()

  • 该函数直接返回两个位置之间的距离,以米为单位的浮点值。

这对于Android的发现在谷歌手机地图的两个 位置之间的距离更准确的方法是什么?距离或距离?

您的问题的答案是结果将在两个函数中相同。它有不同的建议但决不会给出不同的结果。

所以你必须决定你需要哪些功能。并使用适当的功能。希望这个答案可以帮助你。