0

Symfony2 で DoctrineMongoDBBundle を使用していますが、地理座標に問題があります。これは正常に機能しますが、たとえば経度が 0.635467 の場合、コードは機能しません。より多くの地理座標があり、0 で始まる場合にのみ失敗し、距離フィールドが NULL です。

これは私のコードです:

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

私はこのリンクをたどっています: http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/geospatial-queries.htmlただし、ジオニア方式を使用しています。

4

1 に答える 1

2

geoNear()クエリビルダーメソッドは、フィールドでの使用を目的としたものではありません。フォーカスnear()に従うビルダーメソッドです。doctrine / mongodbプロジェクト内のBuilder.phpfield()で、これらのビルダーメソッドの両方が何をするかを確認できます。クエリタイプを変更することに注意してください(変更と同様)。次に、クエリタイプがQuery.phpでチェックされ(switchステートメントに従って)、コレクションでクエリを発行する方法が決定されます。一部は実際のクエリ操作ですが、map/reduceやgeoNearなどはコマンドです。geoNear()update()

次のコードが機能するかどうかを確認します。

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

そうでない場合は、Query.phpがCollection::near()メソッドに渡す値をデバッグしてください。または、メソッドを使用して、ビルダーによって生成されたクエリ配列全体をデバッグすることもできますQuery::getQuery()

于 2013-02-07T16:39:38.237 に答える