如何按经度/纬度查询最近的 10 个对象(在我的情况下为 Distributors)。
每个分销商都有经度/纬度坐标。我将 Spring Data 和 Spring Data 用于简单查询,但据我所知,没有选项可以将 Spring Data 用于此类查询。
最佳答案
如果可以在基础数据库中执行此操作,则可以将“命名 native 查询”添加到Entity类,然后使用Entity Manager执行该查询。
例如,我的 GeoUnit
类有一个地理围栏本地查询,采用纬度和经度的两个参数:
@NamedNativeQuery(name = "GeoUnit.geofencing", query = "SELECT * FROM GeoUnit g WHERE " +
"g.shape.STContains(geography::STPointFromText('POINT(' || :longitude" +
" || ' ' || :latitude || ')', 4326)", resultClass = GeoUnit.class)
public class GeoUnit {
// ...
}
调用它:
entityManager.createNativeQuery("GeoUnit.geofencing").setParameter("longitude", lon)
.setParameter("latitude", lat).getResultList();
要让您的实体类包含 Java 中的地理空间数据类型(不一定必须),您可以例如使用 hibernate 空间:http://www.hibernatespatial.org/