0

我正在尝试使用 $near 来查找靠近我的用户的地方。

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

一切似乎都有效,除了它可以找到远至美国德克萨斯州的地方,而我在加拿大蒙特利尔。我不知道我能做些什么来使 maxDistance 工作。看来我不能使用 GeoNear 或 nearSphere,因为 EMongoDocuments 似乎不支持它们。

所以我错过了一些明显的东西吗?

我知道mongomapper-near-with-maxdistance-mongooperationfailure-geo-values-have-to但没有任何帮助。

编辑:更改经度纬度的顺序

4

3 回答 3

0

MongoDB 需要以下格式的坐标:纬度、经度。你的数组有错误的方法。距离应该以度为单位,除非您使用 nearSphere。nearSphere 的结果应该与 near 相似,因此 EMongoDocuments 应该支持。如果您使用 nearSphere,则 maxdistance 以弧度为单位,因此如果您使用它,则将距离(以 km 为单位)除以地球的半径(以 km 为单位,~6371)。

于 2012-11-12T20:37:27.337 回答
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

YiiMongoDbSuite 中的 EMongoCriteria 改变了 mongo 操作符的 char 大小写,maxDistance 将变为 "$maxdistance",然后 mongodb 服务器将忽略它并返回用户位置附近的所有 100 个项目。使用 MongoYii,它不会改变你的查询条件:http ://sammaye.github.io/MongoYii/

于 2014-06-06T11:58:40.750 回答