Получение пробега - слишком много данных
В моем приложении я пытаюсь показать ближайшие объекты вокруг местоположения пользователя. Я могу сделать это, показывая и сравнивая прямые расстояния без проблем.
Но я хочу показать расстояние вождения. Для этого я создал рабочую функцию:
private double getDistance(double latFrom, double lngFrom, double latTo, double lngTo) throws JSONException {
StringBuilder stringBuilder = new StringBuilder();
Double dist = 0.0;
HttpHandler shx = new HttpHandler();
String urlx = "http://maps.googleapis.com/maps/api/directions/json?origin=" + latFrom + "," + lngFrom + "&destination=" + latTo + "," + lngTo + "&mode=driving&sensor=false";
String jsonStrx = shx.makeServiceCall(urlx);
Log.e(TAG, "Response from url: " + urlx);
stringBuilder = new StringBuilder();
if (jsonStrx != null) {JSONObject jsonObj = new JSONObject(jsonStrx);
JSONArray actorsx = jsonObj.getJSONArray("routes");
try {
//jsonObject = new JSONObject(stringBuilder.toString());
JSONObject routes = actorsx.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 (final JSONException e) {
Okoli.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Okoli.this.getApplicationContext(),
"Data error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}); }
return dist;
} else {
Okoli.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Okoli.this.getApplicationContext(),
"Network err.",
Toast.LENGTH_LONG).show();
}
});
return dist;
}
}
Таким образом, проблема в том, что у меня есть сотни элементов в моем json (достопримечательностях), и мне нужно показать только некоторые из них, которые находятся рядом с местоположением пользователя. Поэтому мне нужно сравнить все сотни данных с местоположением пользователя и сотни раз вызвать Google Apis.
Также мне нужно сделать это снова, когда пользователь перемещается, так как местоположение обновляется ок. каждые 5 минут
И именно поэтому иногда случается, что некоторые расстояния не рассчитываются (они показывают ошибку данных), а json пуст - поэтому соединение было неправильным, так как каждый раз возникает огромный запрос к google api.
Поэтому я попытался работать с этим URL: http://maps.googleapis.com/maps/api/distancematrix/json?origins=...
что кажется более простым, и сейчас я тестирую его, пока без ошибок, но не уверен, что это хорошая идея с такими огромными данными.
Как я могу получить расстояние вождения другим способом? Или лучше показать пользователям прямое расстояние и, может быть, после того, как он нажмет на элемент из списка, всегда будет показывать расстояние проезда только для этого одного элемента? Однако это не то, что я хочу изначально.