{50.78361600, 6.07003500},
{50.76066667, 6.08866667},
{50.77683333, 6.08466667},
{50.77650000, 6.08416667},
} ) {
em.persist( new POI( cnt, "Test_" + cnt, c[0], c[1], "" ) );
++cnt;
}
em.getTransaction().commit();
em.getTransaction().begin();
double centerLatitude = 50.7753455;
double centerLongitude = 6.083886799999959;
final QueryBuilder builder = em.getSearchFactory().buildQueryBuilder().forEntity( POI.class ).get();
org.apache.lucene.search.Query luceneQuery = builder.spatial().onCoordinates( "location" )
.within( 1.8097233616663808, Unit.KM )
.ofLatitude( centerLatitude )
.andLongitude( centerLongitude )
.createQuery();
FullTextQuery hibQuery = em.createFullTextQuery( luceneQuery, POI.class );
Sort distanceSort = new Sort( new DistanceSortField( centerLatitude, centerLongitude, "location" ) );
hibQuery.setSort( distanceSort );
hibQuery.setMaxResults( 1000 );
hibQuery.setProjection( FullTextQuery.THIS, FullTextQuery.SPATIAL_DISTANCE );
hibQuery.setSpatialParameters( centerLatitude, centerLongitude, "location" );
List<Object[]> results = hibQuery.getResultList();
for ( Object[] result : results ) {
POI poi = (POI)result[0];
String message = poi.getName() + " (" + poi.getLatitude() + ", " + poi.getLongitude() + ") is not at "
+ centerLatitude + ", " + centerLongitude;
Assert.assertThat( message, ( (Double) result[1] ).doubleValue(), is( not( 0.0 ) ) );
}