当前位置: 首页 > 知识库问答 >
问题:

求两个地观测点之间驱动距离时的例外情况

齐嘉庆
2023-03-14

我想找出两个纬度和经度之间的行车距离。这是我的密码

private String GetDistance(LatLng origin, LatLng dest) {

        // Origin of route
        String str_origin = "origin=" + origin.latitude + ","
                + origin.longitude;
        // Destination of route
        String str_dest = "destination=" + dest.latitude + "," + dest.longitude;
        // Sensor enabled
        String sensor = "sensor=false";
        // Building the parameters to the web service
        String parameters = str_origin + "&" + str_dest + "&" + sensor;
        // Output format
        String output = "json";
        // Building the url to the web service
        String urlString = "https://maps.googleapis.com/maps/api/directions/"
                + output + "?" + parameters;

        // get the JSON And parse it to get the directions data.
        HttpURLConnection urlConnection = null;
        URL url = null;
        try {
            url = new URL(urlString.toString());
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            urlConnection.setDoInput(true);
            urlConnection.connect();

            InputStream inStream = urlConnection.getInputStream();
            BufferedReader bReader = new BufferedReader(new InputStreamReader(
                    inStream));

            String temp,response = "";
            while ((temp = bReader.readLine()) != null) {
                // Parse data
                response += temp;
            }
            // Close the reader, stream & connection
            bReader.close();
            inStream.close();
            urlConnection.disconnect();

            // Sort out JSONresponse
        //  JSONObject object = (JSONObject) new JSONTokener(response)
        //          .nextValue();
            JSONObject object = new JSONObject(response);
            JSONArray array = object.getJSONArray("routes");
            // Log.d("JSON","array: "+array.toString());

            // Routes is a combination of objects and arrays
            JSONObject routes = array.getJSONObject(0);
            // Log.d("JSON","routes: "+routes.toString());

            String summary = routes.getString("summary");
             Log.d("JSON","summary: "+summary);

            JSONArray legs = routes.getJSONArray("legs");
            // Log.d("JSON","legs: "+legs.toString());

            JSONObject steps = legs.getJSONObject(0);
            // Log.d("JSON","steps: "+steps.toString());

            JSONObject distance = steps.getJSONObject("distance");
            // Log.d("JSON","distance: "+distance.toString());

            sDistance = distance.getString("text");
            iDistance = distance.getInt("value");  

        } catch (Exception e) {
            // TODO: handle exception
            return e.toString();
        }

        return sDistance;
    }

我得到了一个例外

org.json.JSONException:Index 0 out of range [0..0)

这是我的stacktrace

Ljava.lang.StackTraceElement;@41019be8

请帮我解决问题是什么。

共有1个答案

祁聪
2023-03-14

首先,不要硬编码从数组中获得的任何位置(如0)。Bcs,数组可能为空。

你的案子就是这样。您的arraylegsJSONArray中的一个是空的,但您正在尝试获取它们的第0个位置。因此,它正在抛出索引超出范围的异常。

要从数组中获取值,更好地使用for循环。一个示例代码段是:

Log.v("array-length--", ""+array.length());

for(int i=0; i < array.length();i++)
{
    // Routes is a combination of objects and arrays
    JSONObject routes = array.getJSONObject(i);
    // Log.d("JSON","routes: "+routes.toString());

    String summary = routes.getString("summary");
    Log.d("JSON","summary: "+summary);

    JSONArray legs = routes.getJSONArray("legs");
    // Log.d("JSON","legs: "+legs.toString());

    Log.v("legs-length--", ""+legs.length());

    for(int j=0; j < legs.length(); j++)
    {
        JSONObject steps = legs.getJSONObject(j);
        // Log.d("JSON","steps: "+steps.toString());

        JSONObject distance = steps.getJSONObject("distance");
        // Log.d("JSON","distance: "+distance.toString());

        sDistance = distance.getString("text");
        iDistance = distance.getInt("value"); 
    }

}
 类似资料:
  • 问题内容: 我需要测量以字符串形式提供名称的两个地方之间的物理距离。由于有时名称的书写方式略有不同,因此我一直在寻找一个可以帮助我测量差异的库,然后将其与纬度和经度结合起来以选择正确的匹配项。首选语言:Java或PHP。 有什么建议? 问题答案: 看看Levenshtein距离。这是一种测量两个字符串彼此之间有多不同的方法。 希望我能正确理解你的问题;在与“经度”相同的句子中使用“距离”可能会造成

  • 问题内容: 我需要创建一个类来计算两点之间的距离。我被困住了,我是一个完全的初学者。这是我的课程: 第二课。 我不确定如何在两个定义的点之间获取点对象(中间点)。 我可以创建点对象,但不确定如何通过位于这两个点对象之间的方法返回点对象。 问题答案: 平面上的两个点(x1,y1)和(x2,y2)之间的距离为: 但是,如果您想要的只是两个点的中点,则应将中点函数更改为: 这将返回一个全新的点对象,其点

  • 返回两点之间的欧氏距离。 使用 Math.hypot() 计算两点之间的欧氏距离( Euclidean distance)。 const distance = (x0, y0, x1, y1) => Math.hypot(x1 - x0, y1 - y0); distance(1, 1, 2, 3); // 2.23606797749979

  • 问题内容: 我正在使用Python + Numpy(也可以使用Scipy)并具有三个2D点 我试图获得从P3垂直到P1和P2之间绘制的直线的距离。设,和 用矢量符号表示这很容易,但是我对python / numpy还是相当陌生,无法获得任何有效的方法(甚至是关闭方法)。 任何提示表示赞赏,谢谢! 问题答案: 尝试使用以下 规范 函数

  • 我试图找到树中两个节点之间的最大距离。这是我的程序: 程序似乎正在运行;但是没有为一些测试用例显示正确的输出。我采取的方法是: 求根节点的子节点数(我一直认为根节点为0)。 找到每个子树的最大深度(尽可能多的子树,因为有根节点的子节点)。 将每个子树的最大深度存储在中,对其进行排序并打印最后两个值的总和。 有人能指出我程序中的错误吗?

  • 问题内容: 假设我有x1,y1,还有x2,y2。 我如何找到它们之间的距离?这是一个简单的数学函数,但是此在线代码段吗? 问题答案: dist = sqrt( (x2 - x1)2 + (y2 - y1)2 ) 正如其他人指出的那样,您也可以使用等效的内置函数: