Java实现 传入一组经纬度 在数据库中查询离这个经纬度最近的三条数据并且升序排序
时间: 2023-06-12 13:06:18 浏览: 266
java计算两个经纬度之间的距离
实现这个功能,需要先计算出每个数据点与传入的经纬度的距离,然后选择距离最近的三个数据点,最后按照距离升序排序。
下面是一个 Java 示例代码:
```java
import java.sql.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
double lat = 31.23; // 传入的纬度
double lng = 121.47; // 传入的经度
int limit = 3; // 返回数据的条数
try {
// 连接数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
// 构造 SQL 查询语句
String sql = "SELECT id, lat, lng, " +
" 6371 * 2 * ASIN(SQRT(POWER(SIN((? - lat) * PI() / 180 / 2), 2) + COS(? * PI() / 180) * COS(lat * PI() / 180) * POWER(SIN((? - lng) * PI() / 180 / 2), 2))) AS distance " +
"FROM locations " +
"ORDER BY distance ASC " +
"LIMIT ?";
// 预编译 SQL 语句
PreparedStatement stmt = conn.prepareStatement(sql);
// 设置参数
stmt.setDouble(1, lat);
stmt.setDouble(2, lat);
stmt.setDouble(3, lng);
stmt.setInt(4, limit);
// 执行查询并获取结果集
ResultSet rs = stmt.executeQuery();
// 遍历结果集并输出
while (rs.next()) {
int id = rs.getInt("id");
double distance = rs.getDouble("distance");
System.out.println("id: " + id + ", distance: " + distance);
}
// 关闭连接
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
在这个代码中,我们首先连接数据库,然后构造 SQL 查询语句。其中,我们使用 Haversine 公式计算经纬度之间的距离。然后,我们预编译 SQL 语句并设置参数,执行查询并获取结果集。最后,我们遍历结果集并输出结果。
阅读全文