He cavado algunas horas a través de toneladas de temas y no podría encontrar ninguna consulta, devolviendo puntos en un radio, definido por km. ST_Distance_Sphere lo hace, sin embargo, el servidor es MariaDB 5.5, no es compatible con ST_Distance_Sphere().
arreglamos para conseguir algo de trabajo, por lo que aquí es mi solución, compatible con la doctrina 2,5 y la Doctrina CrEOF Biblioteca espacial:
$sqlPoint = sprintf('POINT(%f %f)', $lng, $lat);
$rsm = new ResultSetMappingBuilder($this->manager);
$rsm->addRootEntityFromClassMetadata('ApiBundle\\Entity\\Place', 'p');
$query = $this->manager->createNativeQuery(
'SELECT p.*, AsBinary(p.location) as location FROM place p ' .
'WHERE (6371 * acos(cos(radians(Y(ST_GeomFromText(?)))) ' .
'* cos(radians(Y(p.location))) * cos(radians(X(p.location)) ' .
'- radians(X(ST_GeomFromText(?)))) + sin(radians(Y(ST_GeomFromText(?)))) * sin(radians(Y(p.location))))) <= ?',
$rsm
);
$query->setParameter(1, $sqlPoint, 'string');
$query->setParameter(2, $sqlPoint, 'string');
$query->setParameter(3, $sqlPoint, 'string');
$query->setParameter(4, $radius, 'float');
$result = $query->getResult();
Suponiendo GNL y lat es XY del punto fijo, Place es la entidad con un campo de "ubicación" de tipo POINT. No pude usar DQL directamente debido a problemas con la vinculación de param de MySQL, es por eso que la consulta nativa de bajo nivel. Se requiere la rsm para mapear resultados en objetos de entidad. Sin embargo, puedes vivir sin eso.
Siéntase libre de usarlo. Espero que te ahorre algo de tiempo.
posible duplicado de [¿Cuál es el tipo de datos ideal para usar cuando se almacenan latitudes/longitudes en una base de datos MySQL?] (Http://stackoverflow.com/questions/159255/what-is-the-ideal-data-type -to-use-when-storage-latitude-longitudes-in-a-mysql) – Gajus