/**
* Wyszukuje wydarzenia w zadanej odległości od podanych współrzędnych
*
* @param float $lat
* @param float $lng
* @param int $distance
* @return ArrayObject $events
*/
public function findEventsInRadius($lat, $lng, $distance = 2)
{
$query = "\n SELECT\n subSel2.*\n FROM (\n SELECT\n sin(subSel.dlat / 2) * \n sin(subSel.dlat / 2) + \n cos(subSel.lat1) * \n cos(subSel.lat2) * \n sin(subSel.dlng / 2) * \n sin(subSel.dlng / 2) sel,\n subSel.*\n FROM (\n SELECT \n (radians(:lat)-radians(lat)) dlat, \n (radians(:lng)-radians(lng)) dlng, \n radians(lat) lat1, \n radians(lng) lng1,\n radians(:lat) lat2,\n radians(:lng) lng2,\n Event.*\n From \n Event \n ) subSel \n ) subSel2\n WHERE\n (6372.797 * \n (2 * atan2(sqrt(subSel2.sel), sqrt(1 - subSel2.sel)))) <= :distance\n ";
$rsm = new ResultSetMappingBuilder($this->entityManger);
$rsm->addRootEntityFromClassMetadata('Events\\Entity\\Event', 'event');
$nativeQuery = $this->entityManger->createNativeQuery($query, $rsm);
$nativeQuery->setParameters(array('lat' => $lat, 'lng' => $lng, 'distance' => $distance));
return $nativeQuery->getResult();
}