2016-02-13 6 views
1

Я начал разрабатывать приложение для Android, где мне нужен поиск на расстоянии. Пользователь должен иметь возможность выбрать максимальное расстояние, скажем, 3 км. Я уже написал код, в котором я получаю текущее местоположение каждого пользователя (Lat, Lng) и сохраняю его в базе данных mysql. Затем приложение извлекает позицию каждого пользователя и находит расстояние между пользователем и другими. С помощью цикла if приложение проверяет, меньше ли введенное пользователем значение для каждого пользовательского расстояния.Как реализовать поисковый запрос, основанный на расстоянии в Android?

Я тестировал его, и он работает хорошо, но проблема в том, что я задаюсь вопросом, будет ли это работать с тысячами пользователей?

Если у вас есть какие-либо советы или ответ на этот вопрос, сообщите мне!

+0

вы можете посмотреть на [гаверсинус формулы] (https://en.wikipedia.org/wiki/Haversine_formula) для вычисления фактическое расстояние между двумя точками. Затем проверьте, есть ли 'result = KarelG

+0

hii @David вы нашли какое-нибудь хорошее решение для этого, мне нравится ваш вопрос, я хочу что-то вроде этого .. вы можете подробно объяснить свой вопрос, а также с помощью какого-то кода !? –

ответ

0

Позволить текущему местоположению пользователя присвоить значение currentLocation.

 Location databaseLocation = new Location("databaseLocation"); 
     databaseLocation.setLatitude(database_latitude); 
     databaseLocation.setLongitude(database_longitude); 
     //< 3000 meters = 3km 
     if (currentLocation.distanceTo(databaseLocation) < 3000) { 
     //**This entry is within limits** 
     } 
+0

Спасибо, но я уже сделал что-то подобное. Я хочу знать, будет ли это работать с большим количеством пользователей, например, 50 000. Потому что, если приложение должно вычислить 50 000 расстояний, то сколько времени это займет. –

+0

Для этого вы можете сделать, давайте скажем 5 асинхронных вызовов за раз. Пока вы не получите все результаты, скажем в списке, вы можете показать загрузчик. Но наилучшим подходом будет отправка ваших координат в бэкэнд, который даст результаты быстро. Это не займет много времени. –

+0

Охх ... Я просто перечитал ваш вопрос и понял, что все ваши местоположения находятся в базе данных. Для такого случая это не займет много времени. Идем дальше и реализуем его (y) –

0

Вот полный метод для нахождения расстояния между двумя точками просто дать два латы лонги в качестве параметров и возвращают расстояние в строке.

public static String distFrom(double current_lat, double current_long, double latst, double longst) { 
    double earthRadius = 3958.75; 
    double dLat = Math.toRadians(latst-current_lat); 
    double dLng = Math.toRadians(longst-current_long); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat)) * Math.cos(Math.toRadians(latst)) * Math.sin(dLng/2) * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double dist = earthRadius * c; 
    double meterConversion = 1.609344;  //Kilometer 
    //for two digits float value: 
    String s = String.format("%.2f", (dist * meterConversion)); 

    return s; 

    } 

Ответное расстояние в километрах можно дальше тайный его в мили

 Смежные вопросы

  • Нет связанных вопросов^_^