2013-08-27 2 views
2

В базе данных я сохранил около 500 записей, каждый из которых имеет широту и долготу.Получить места в радиусе

В осуществлении деятельности я реализую LocationListener и в методе onLocationChanged. Мне нужно показать записи, находящиеся в радиусе XX метров от местоположения, полученного от этого слушателя.

Есть ли (простой) способ сделать это, как в SQL, так и в Java?

+0

Проверить это http://stackoverflow.com/a/8050255/603744 –

ответ

3

Попробуйте этот пример кода,

rs = st.executeQuery("SELECT longititude,latitude FROM location"); 
       while (rs.next()) { 
       double venueLat =rs.getDouble("latitude"); 
       double venueLng = rs.getDouble("longititude"); 

       double latDistance = Math.toRadians(userLat - venueLat); 
       double lngDistance = Math.toRadians(userLng - venueLng); 
       double a = (Math.sin(latDistance/2) * Math.sin(latDistance/2)) + 
           (Math.cos(Math.toRadians(userLat))) * 
           (Math.cos(Math.toRadians(venueLat))) * 
           (Math.sin(lngDistance/2)) * 
           (Math.sin(lngDistance/2)); 

       double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 

       double dist = 6371 * c;    
       if (dist<50){ 
        /* Include your code here to display your records */ 
       } 
+0

Могли бы вы в простом английском языке объяснить немного о том, что делает этот код? UserLat и UserLng - текущая позиция, не так ли? dist <50, это в метрах? Что такое константа 6371? – perene

+0

userLat и userLng - текущая позиция пользователей, место встречи и место проведения - это местоположение из базы данных. dist - расстояние между этими двумя положениями в KM. 6371 - радиус Земли (средний радиус = 6 371 км) – ponraj

+0

Внедрены теперь, и похоже, что он работает ... Спасибо. – perene

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