在Android中谷歌地图中找到两个位置之间距离的更准确方法是什么?距离或距离?

时间:2015-11-03 09:59:23

标签: android google-maps

我正在尝试制作一个Android应用来查找驾驶的起点和终点之间的距离。所以我需要找到我开车路径的准确距离。为实现此目的,我每隔5秒获取一次位置,并使用Location类Google地图的POST https://www.googleapis.com/gmail/v1/users/me/messages?internalDateSource=dateHeader&key={YOUR_API_KEY} { "raw": "RGF0ZTogVGh1LCAxIEphbiAxOTcwIDEyOjAwOjAwIC0wMDAwCkZyb206IGVtdGhvbGluQGdtYWlsLmNvbQpUbzogZW10aG9saW5AZ21haWwuY29tClN1YmplY3Q6IEV4YW1wbGUgU3ViamVjdAoKVGhpcyBpcyB0aGUgYm9keSBvZiB0aGUgbWFpbA==" } distanceTo()方法计算距离。请帮我决定使用哪种方法。

4 个答案:

答案 0 :(得分:1)

旧线程然后回复向任何人提供帮助。

在Android SDK中,distanceTo和distanceBetween返回基于Inverse / Vincenty公式的距离,请参阅details here,这与半身距离公式相比更准确。

除此之外,上述返回的距离不会返回可行驶的距离[即不够准确导航]。因此,使用基于距离矩阵API [webservice/restful and JS apis]的谷歌地图来获得可旅行的准确距离。但请注意,此api的免费版本具有局限性,并且它们具有商业用途的高级版本。

答案 1 :(得分:0)

这两种方法都会显示鸟类飞行时的距离,而不是道路。要通过公路获得距离,您需要以这种方式询问Google:

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变量将为您提供两个给定点之间的距离(以千米为单位)。

修改

或者,您可以通过以下方式将控件提供给Google地图应用程序:

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

这样,手机就会打开Goog​​le地图应用并显示两个设定点之间的路线。

答案 2 :(得分:0)

我不知道哪种方法更准确,但根据我之前的经验 distanceBetween()效果很好。我已经使用这种方法获得了与你相同的观点。我建议你使用这个。

答案 3 :(得分:0)

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

  • 正如distanceBetween()文档所述,它为我们提供了以米为单位的距离以及它们之间最短距离的方位。它有一个加分点,为我们提供distanceTo()不给予的方位。

  • 根据distanceBetween()文档 -

      

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

    所以你将获得这个功能的距离和方位。

  • 但另一方面,当我们需要一个方便的工具来获得两个位置之间的距离与做大量的工作。我们将使用distanceTo()

  • 此功能直接以米为单位返回两个位置之间的距离作为浮动值。

  

哪种方法可以更准确地找到两者之间的距离   Android中google地图的位置? distanceTo还是Distance?

你的问题的答案是两个函数的结果都是一样的。它有不同的建议但从未给出不同的结果。

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