0

$ nearを使用して、ユーザーの近くにある場所を見つけようとしています。

    $places = Places::model ()->findAll(array (
            "conditions" => array (
                'location' => Array('near' => array((float)$this->latitudeUser,(float)$this->longitudeUser)),
            ),
            "maxDistance" => 1,
            "limit" => 5,
        ));

米国テキサス州までの場所を見つけ、私がカナダのモントリオールにいることを除いて、すべてが機能しているようです。maxDistanceを機能させるために何ができるかわかりません。EMongoDocumentsがGeoNearまたはnearSphereをサポートしていないため、GeoNearまたはnearSphereを使用できないようです。

だから私は何か明らかなものが欠けていますか?

私はmongomapper-near-with-maxdistance-mongooperationfailure-geo-values-have-toを知っていますが、何も役に立ちませんでした。

編集:経度緯度の順序を変更

4

3 に答える 3

0

mongolabsの素晴らしい人の引用:maxDistanceを$near条件付きの中に入れる必要があると思います。このようなもの:

$places = Places::model ()->findAll(array (
"conditions" => array (
'location' => Array('near' => array((float)$this->latitudeUser,(float)$this->longitudeUser), 'maxDistance' => 1),
),
"limit" => 5,
));

私はこのフレームワークに精通していないので、それが正しいかどうかは完全にはわかりませんが、同等のMongoDBクエリの適切な構文に基づいています。

db.places.find( { location : { $near : [50,50] , $maxDistance : 5 } } ).limit(5)

$maxDistanceが$nearと同じ条件内にあることに注意してください。それを試してみて、それが役立つかどうかをお知らせください。ありがとう、

于 2012-11-13T14:39:51.770 に答える
0

MongoDBは、緯度、経度の形式の座標を必要としています。あなたのアレイはそれを間違った方向に持っています。nearSphereを使用しない限り、距離は度単位である必要があります。nearSphereからの結果は、nearと同様である必要があるため、EMongoDocumentsがサポートする必要があります。nearSphereを使用する場合、最大距離はラジアンであるため、使用する場合は、距離(km単位)を地球の半径(km単位、〜6371)で除算します。

于 2012-11-12T20:37:27.337 に答える
0

YiiMongoDbSuiteのEMongoCriteriaは、mongo演算子のcharケースを変更し、maxDistanceは「$ maxdistance」に変わり、mongodbサーバーはそれを無視して、ユーザーの場所の近くにある100個のアイテムすべてを返します。MongoYiiを使用するために、クエリ条件は変更されません:http ://sammaye.github.io/MongoYii/

于 2014-06-06T11:58:40.750 に答える