Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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 distanceBetween()返回不准确的结果?_Android_Google Maps_Android Location - Fatal编程技术网

Android distanceBetween()返回不准确的结果?

Android distanceBetween()返回不准确的结果?,android,google-maps,android-location,Android,Google Maps,Android Location,我使用Location类的distanceBetween()计算两点之间的距离,如下所示: private float getDistanceInMiles(GeoPoint p1, GeoPoint p2) { double lat1 = ((double)p1.getLatitudeE6()) / 1e6; double lng1 = ((double)p1.getLongitudeE6()) / 1e6; double lat2 = ((double)p2.get

我使用Location类的
distanceBetween()
计算两点之间的距离,如下所示:

private float getDistanceInMiles(GeoPoint p1, GeoPoint p2) {

    double lat1 = ((double)p1.getLatitudeE6()) / 1e6;
    double lng1 = ((double)p1.getLongitudeE6()) / 1e6;
    double lat2 = ((double)p2.getLatitudeE6()) / 1e6;
    double lng2 = ((double)p2.getLongitudeE6()) / 1e6;
    float [] dist = new float[1];
    Log.i("destination coordinates", "Latitude:" + lat2 + ", Longitude: " + lng2);
        Location.distanceBetween(lat1, lng1, lat2, lng2, dist);

    return dist[0] * 0.000621371192f;
}
distanceBetween()表示:“计算两个位置之间的近似距离(以米为单位),以及它们之间最短路径的初始和最终方位。”然而,distanceBetween()返回的结果与真实的GPS设备或谷歌导航应用程序之间的差异相当大。例如,我的方法将返回6.2英里,而谷歌地图显示相同位置的10英里。我仔细检查了起点p1和终点p2的坐标,它们似乎是正确的。DistanceBeween()方法就是这样工作的,还是我做错了什么?顺便问一下,有没有一种方法可以使用GooglePlaceAPI作为JSON响应来检索距离

谷歌地图计算的距离:6.1英里

以及

Location.distanceBetween(41.742964, -87.995971, 41.811511, -87.967923, dist) is 

4.947700

谷歌导航通常会报告沿方向列表中的一组台阶行驶或步行的距离,而不是直线距离,这是
distanceBetween()
报告的距离。

要获得我使用过的谷歌地图的距离 和JSON解析器来检索距离值:

private double getDistanceInfo(double lat1, double lng1, String destinationAddress) {
            StringBuilder stringBuilder = new StringBuilder();
            Double dist = 0.0;
            try {

            destinationAddress = destinationAddress.replaceAll(" ","%20");    
            String url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lng1 + "&destination=" + destinationAddress + "&mode=driving&sensor=false";

            HttpPost httppost = new HttpPost(url);

            HttpClient client = new DefaultHttpClient();
            HttpResponse response;
            stringBuilder = new StringBuilder();


                response = client.execute(httppost);
                HttpEntity entity = response.getEntity();
                InputStream stream = entity.getContent();
                int b;
                while ((b = stream.read()) != -1) {
                    stringBuilder.append((char) b);
                }
            } catch (ClientProtocolException e) {
            } catch (IOException e) {
            }

            JSONObject jsonObject = new JSONObject();
            try {

                jsonObject = new JSONObject(stringBuilder.toString());

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

                Log.i("Distance", distance.toString());
                dist = Double.parseDouble(distance.getString("text").replaceAll("[^\\.0123456789]","") );

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return dist;
        }

哦,好的。这是直线距离。我如何检索谷歌应用程序计算的距离?GooglePlaceAPI似乎没有在JSON响应中包含距离。谢谢你的回答。@MarcinS.:“我如何检索谷歌应用程序计算的距离?”——Android中没有API。我不知道是否有谷歌的Web服务API,我发现类似的东西可能是非官方的。谢谢。@commonware,刚刚测试了Location.distanceBetween()与LFLL(r17)的计算结果,结果是3041m与3032m-->0.3%的差异。地点在一座城市的对面。两个计算都在0毫秒内完成。Android MapView不使用Google Maps API V3。(标记已移除)Marcin S.,41.742964与41.742972不相同,-87.995971也与-87.996068不相同…为什么要除以e6?Thanx,我搜索了一会儿这个解决方案!这是因为您正在主UI线程上调用此方法。您必须在另一个线程或AsyncTask中调用此方法如果我们希望脱机执行此操作,那么如何实现它?