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 个位置之间的距离和时间的主要内容,如果未能解决你的问题,请参考以下文章