package service.servlet;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.Diary;
import service.NearbyPeople;
import service.utils.LocationUtil;
public class NearByPeopleServlet extends CommonServlet
{
@Override
protected void execute(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
List<NearbyPeople> peoples = new ArrayList<NearbyPeople>();
try
{
double latitude = Double.parseDouble(request.getParameter("latitude"));
double longitude = Double.parseDouble(request.getParameter("longitude"));
PreparedStatement preparedStatement = null;
String sql = "select u.*, RAND() as Random from t_kx_users u where "+
"latitude > ? -1 and " +
"latitude < ? +1 and " +
"longitude > ? -1 and " +
"longitude < ? +1 and " +
"u.email <> ? " +
"order by Random, ACOS(SIN((? * 3.1415) / 180 ) *SIN((latitude * 3.1415) / 180 ) +COS((? * 3.1415) / 180 ) * COS((latitude * 3.1415) / 180 ) *COS((? * 3.1415) / 180 - (longitude * 3.1415) / 180 ) ) * 6380 asc limit 10";
preparedStatement = mConnection
.prepareStatement(sql);
preparedStatement.setDouble(1, latitude);
preparedStatement.setDouble(2, latitude);
preparedStatement.setDouble(3, longitude);
preparedStatement.setDouble(4, longitude);
preparedStatement.setString(5, mUsername);
preparedStatement.setDouble(6, latitude);
preparedStatement.setDouble(7, latitude);
preparedStatement.setDouble(8, longitude);
ResultSet rs = preparedStatement.executeQuery();
while (rs.next())
{
NearbyPeople people = new NearbyPeople();
people.setUid(rs.getString("id"));
people.setName(rs.getString("name"));
people.setAvatar(rs.getString("avatar"));
people.setEmail(rs.getString("email"));
people.setLocation(rs.getString("location"));
people.setLatitude(rs.getString("latitude"));
people.setLongitude(rs.getString("longitude"));
double distance = LocationUtil.getDistance(longitude, latitude, rs.getDouble("longitude"), rs.getDouble("latitude"));
people.setDistance(distance);
peoples.add(people);
}
}
catch (Exception e)
{
e.printStackTrace();
}
sendJSON(peoples, response);
// sendObject(diaries, response);
}
}