Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 计算经度和纬度阵列的道路距离_Android_Google Maps_Google Maps Android Api 2_Haversine - Fatal编程技术网

Android 计算经度和纬度阵列的道路距离

Android 计算经度和纬度阵列的道路距离,android,google-maps,google-maps-android-api-2,haversine,Android,Google Maps,Google Maps Android Api 2,Haversine,我有一个Android应用程序,每15秒捕获一次lat long,我们使用这组lat long来查找起点和终点之间的道路距离(第一个和最后一个lat long按时间戳排序) 实际上,该应用程序适用于在城市中运行微型卡车的客户,他们的卡车司机将使用该应用程序标记行程的开始/结束、丢包等。我们将根据行程中的公里数向客户收费 在我们的场景中,车辆将在充满转弯、环岛和一次又一次穿越同一路径的殖民地/小区域内传送数据包 因此,我试图找到一种计算所有收集到的lat-long距离的最佳方法 我选择了两种方法:

我有一个Android应用程序,每15秒捕获一次lat long,我们使用这组lat long来查找起点和终点之间的道路距离(第一个和最后一个lat long按时间戳排序)

实际上,该应用程序适用于在城市中运行微型卡车的客户,他们的卡车司机将使用该应用程序标记行程的开始/结束、丢包等。我们将根据行程中的公里数向客户收费

在我们的场景中,车辆将在充满转弯、环岛和一次又一次穿越同一路径的殖民地/小区域内传送数据包

因此,我试图找到一种计算所有收集到的lat-long距离的最佳方法

我选择了两种方法:

  • 使用“haversine”公式计算两个板条之间的接地距离,将连续距离相加。在这里,距离缩短了10%
  • 另一个是谷歌地图api,但它在笔直的道路上是成功的,在我的场景中是失败的
  • 请提出一些方法,该方法的准确率至少为96-97%,业界普遍接受。我们不希望在车辆上部署VTS设备,因为驾驶员必须使用Android应用程序,这将使成本增加一倍。

    distanceTo()方法将在鸟类飞行时返回距离,而不是在公路上。可以使用以下方法获得两点之间的距离(通过道路):

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

    我的问题是,我如何才能获得我自己的一组横向长度或一条特定的路径的准确距离,Z字型和充分的转弯?我也在我的问题中提到过,我已经尝试过这个解决方案作为一种选择。只要谷歌有它的地图,(它在道路上等等),它就应该适合你。如果谷歌没有为你的路线绘制地图,据我所知,我认为没有办法通过公路获得一段距离。