我在Java EE项目上工作有这样的实体和实体:
@Entity
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long messageId;
@ManyToOne
private User user;
private String name;
private Float latitude;
private Float longitude;
}
如果这些位置的直径为1 km,我需要用中心点过滤这些位置。
我需要一个这样的方法,只返回A,B,C,E位置。
public List<Location> findLocations(Float longitude, Float latitude) {
List<Location> locations =
entityManager.createQuery("select l from Location where ???")
.setParameter("longitude", longitude)
.setParameter("latitude", latitude)
.getResultList();
return locations;
}
我找到了一些代码示例,但是我必须遍历db上的所有位置(这将是真正的成本)
我可以直接使用createQuery()
吗?
注意:我使用
MySQL
答案 0 :(得分:0)
假设对赤道附近的纬度值的粗略估计如下
我们可以通过将以下内容添加到您的sql语句中来消除大部分数据
DataSource
要获得更准确的结果,您仍需要使用Vincenty或Haversine公式过滤结果值。
或者您也可以直接在查询中实施Vincenty或Haversine公式。现在是否更有效率,我还没有测试过。我始终将数据库事务保持在最低限度。以非常小的计算存储和检索数据。