如何按经度/纬度查询最近的10个对象(在我的情况下为经销商)。
每个经销商都有经度/纬度坐标。我正在使用Spring Data进行简单查询,但据我所知,没有选项可以将Spring数据用于此类查询。
答案 0 :(得分:0)
如果您可以在基础数据库中执行此操作,则可以向实体类添加命名本机查询,并使用实体管理器执行该查询。
例如,我的GeoUnit
类有一个Geofencing Native Query,它有两个纬度和经度参数:
@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();
要让您的Entity类包含Java中的地理空间数据类型(它不一定非必须),您可以例如使用Hibernate Spatial:http://www.hibernatespatial.org/