2013-01-02 6 views
0

J'utilise DoctrineMongoDBBundle avec Symfony2 et j'ai un problème avec les géocoordonnées. Cela fonctionne bien mais quand la longitude est par exemple comme ça: 0.635467 le code ne fonctionne pas. J'ai plus de géocoordonnées et seulement échoue quand il commence par 0. et le champ de distance est NULL.Mauvaise distance dans la méthode geonear avec Doctrine MongoDB ODM

Ceci est mon code:

$locations = $dm->createQueryBuilder('MyBundle:Location') 
        ->field('id')->in($arrayIds) 
        ->field('geocoordinates') 
        ->geoNear($geocodes['lat'],$geocodes['lon']) 
        ->getQuery()->execute()->toArray(); 

que je suis ce lien: http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/geospatial-queries.html mais avec la méthode geonear.

+0

La recherche géospatiale recherche l'ordre de la longitude et de la latitude. Est-ce ainsi que vous avez vos documents stockés? – Derick

+0

Oui, le problème est seulement avec la latitude/longitude qui commence par "0". – Biruwon

Répondre

2

La méthode de création de requête geoNear() n'est pas destinée à être utilisée sur un champ. near() est la méthode du générateur qui suit un focus field(). Vous pouvez voir ce que ces deux méthodes de construction font dans Builder.php dans le projet doctrine/mongodb. Notez que geoNear() modifie le type de requête (similaire à ce que fait update()). Le type de requête est ensuite vérifié dans Query.php (suivez l'instruction switch) et détermine comment nous émettons la requête sur la collection. Certains sont des opérations de requête réelles, mais des choses comme map/reduce et geoNear sont des commandes.

Voir si le code suivant fonctionne:

$dm->createQueryBuilder('MyBundle:Location') 
    ->geoNear($geocodes['lat'],$geocodes['lon']) 
    ->field('id')->in($arrayIds) 
    ->getQuery()->execute()->toArray(); 

Sinon, s'il vous plaît les valeurs qui déboguer query.php passe à la méthode Collection::near(). Vous pouvez également déboguer l'intégralité du tableau de requêtes généré par le générateur à l'aide de la méthode Query::getQuery().

Questions connexes