如何按经度/纬度查询最近的 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/

10-06 07:19