Android - 沿街 2 个位置之间的距离和时间

Posted

技术标签:

【中文标题】Android - 沿街 2 个位置之间的距离和时间【英文标题】:Android - distance and time between 2 location along the street 【发布时间】:2016-12-16 11:09:32 【问题描述】:

我正在开发一个简单的公共交通应用程序,包括公共汽车和车站。 公交车没有gps。每个公交车站都是位置类型的对象。

如何根据路标(2个公交车站之间的距离)规划每辆公交车沿街道的路线,如何步行到公交车站?

因为使用

 location1.distanceBetweenTo(location2)

返回乌鸦飞过的距离。

是否也可以在 2 个位置(巴士站)之间设置时间?因为巴士公司没有每个站点和时间的计划,而是从出发站到到达站的通用时间。

我已经创建了地图,在谷歌控制台上获取了 api 密钥,我想每个公交车站都可以用一个标记来表示。

--编辑--

这段代码似乎可以工作,但如何创建结果?

final JSONObject json = new JSONObject(result);
JSONArray routeArray = json.getJSONArray("routes");
JSONObject routes = routeArray.getJSONObject(0);

JSONArray newTempARr = routes.getJSONArray("legs");
JSONObject newDisTimeOb = newTempARr.getJSONObject(0);

JSONObject distOb = newDisTimeOb.getJSONObject("distance");
JSONObject timeOb = newDisTimeOb.getJSONObject("duration");

Log.i("Distance :", distOb.getString("text"));
Log.i("Time :", timeOb.getString("text"));

我使用了一些 jsonParser,但没有任何效果。如何从纬度和经度开始创建它?

这种方式我已经试过了。

String url =" https://maps.googleapis.com/maps/api/directions/json?origin=41.221298,16.286054&destination=41.217956,16.2988407&key="my api key"

这个字符串被传递给

 private String getResponseText(String stringUrl) throws IOException
     
    StringBuilder response  = new StringBuilder();

    URL url = new URL(stringUrl);
    HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
    if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK)
    
        BufferedReader input = new BufferedReader(new InputStreamReader(httpconn.getInputStream()),8192);
        String strLine = null;
        while ((strLine = input.readLine()) != null)
        
            response.append(strLine);
        
        input.close();
    
    return response.toString();

但没有任何变化。

【问题讨论】:

见***.com/questions/18310126/… @Serg 阅读我的编辑,谢谢。 请显示谷歌路由服务返回的 JSON。 @Serg 检查新的编辑。我已经试过了。 【参考方案1】:

这种从 url 获取 Json 的方法对我有用

public JSONObject getJson(String url) 
    String responce = null;
    HttpURLConnection conn = null;
    try 
        URL jUrl = new URL(url);
        conn = (HttpURLConnection)jUrl.openConnection();
        InputStream is = (InputStream)conn.getContent();
        java.util.Scanner scanner = new java.util.Scanner(is).useDelimiter("\\A"); 
        responce = scanner.hasNext() ? scanner.next() : "";
        //log.debug( " responce " + responce);
        return new JSONObject(responce);
     catch (IOException ex)
        String errTxt = "Internet access failure";
        if (conn != null && (ex instanceof java.io.FileNotFoundException))
            try
                // Read the first line of err message the site possibly returned. Kind of
                // "cod":401,"message":"Invalid API key. Please see http://openweathermap.org/faq#error401 for more info."
                errTxt = (new BufferedReader(new InputStreamReader(conn.getErrorStream())))
                        .readLine();
                if (errTxt == null)
                    errTxt ="(Server provided no ErrorStream)";
             catch (Exception ex2)
                log.error(errTxt + " when retrieving ErrorStream", ex2);
            
        log.error(errTxt, ex);
     catch (JSONException ex) 
        log.error("Invalid responce from " + url, ex);
     catch (Exception ex)
        log.error("Failed to get responce from " + url, ex);
    
    finally 
        if (conn != null)
            conn.disconnect();
    
    return null;

【讨论】:

以及如何设置从纬度和对数开始的url? 好的,谢谢你现在工作!如何在地图上显示路线? 显示为折线,参见示例折线示例github.com/googlemaps/android-samples/blob/master/ApiDemos/app/… 现在可以了。我创建了一个新的异步任务。我研究折线并找到一种从 json 绘制路径的方法。但是我怎样才能绘制多个json?巴士从一个巴士站到另一个巴士站的路线。 我不确定我是否了解您项目的架构。除了 SO 答案之外,还需要时间和精力才能提出合理的建议。例如,您可以尝试从 Google 地图收集信息并将路线存储在某些(本地?您的站点?)数据库中。可能会根据 GM 未考虑的某些因素来编辑此路线。

以上是关于Android - 沿街 2 个位置之间的距离和时间的主要内容,如果未能解决你的问题,请参考以下文章

2个位置之间的iOS GPS距离计算

计算几个位置之间的全局距离

查找超过 100K 个位置之间的距离

使用距位置的距离有效地计算最近的 5 个位置

如何在谷歌地图 api 中计算从 1 个位置到许多其他位置的距离? [复制]

带有2个位置的Android点方向