如何使用 $near 获取距离?
How to get distance with $near?
我可以使用以下代码获取我的元素:
$lines = $loc->find(
array("loc" =>
array('$near' =>
array('$geometry' =>
array('type' => 'Point', 'coordinates' =>
array(floatval($longitude), floatval($latitude))
),
'$maxDistance' => 10000 //meters
)
)
)
);
这是结果:
Array
(
[_id] => MongoId Object
(
[$id] => 5490003c815289663d8bbd95
)
[name] => My adress
[loc] => Array
(
[type] => Point
[coordinates] => Array
(
[0] => 5.050948
[1] => 45.040419
)
)
)
但是现在,我需要得到与给定点的距离。
可能吗?
编辑:
这是用于插入数据的代码:
$loc = $client->localisation->localisation;
$loc->ensureIndex( array("loc" => "2dsphere"));
$loc->insert(
array(
"idobject" => $myValue
"name" => $myName
"loc" => array("type" => "Point", "coordinates" => array($longitude, $latitude))
));
$near
运算符不会 return 与 return 编辑的结果相距很远。它只对响应中的文档进行排序。
在 PHP 驱动程序下,最简单的形式是使用 $geoNear
聚合管道阶段。这允许您在结果中投射一个字段,甚至可以在其他管道阶段使用它:
$loc->aggregate(
array(
array(
'$geoNear' => array(
'near' => array(
'type' => 'Point',
'coordinates' =>array(floatval($longitude), floatval($latitude))
),
'maxDistance' => 1000,
'distanceField' => 'distance',
'spherical' => true
)
)
)
);
geoNear也有数据库命令形式,但是直接命令的结果往往不是那么好。
我可以使用以下代码获取我的元素:
$lines = $loc->find(
array("loc" =>
array('$near' =>
array('$geometry' =>
array('type' => 'Point', 'coordinates' =>
array(floatval($longitude), floatval($latitude))
),
'$maxDistance' => 10000 //meters
)
)
)
);
这是结果:
Array
(
[_id] => MongoId Object
(
[$id] => 5490003c815289663d8bbd95
)
[name] => My adress
[loc] => Array
(
[type] => Point
[coordinates] => Array
(
[0] => 5.050948
[1] => 45.040419
)
)
)
但是现在,我需要得到与给定点的距离。
可能吗?
编辑:
这是用于插入数据的代码:
$loc = $client->localisation->localisation;
$loc->ensureIndex( array("loc" => "2dsphere"));
$loc->insert(
array(
"idobject" => $myValue
"name" => $myName
"loc" => array("type" => "Point", "coordinates" => array($longitude, $latitude))
));
$near
运算符不会 return 与 return 编辑的结果相距很远。它只对响应中的文档进行排序。
在 PHP 驱动程序下,最简单的形式是使用 $geoNear
聚合管道阶段。这允许您在结果中投射一个字段,甚至可以在其他管道阶段使用它:
$loc->aggregate(
array(
array(
'$geoNear' => array(
'near' => array(
'type' => 'Point',
'coordinates' =>array(floatval($longitude), floatval($latitude))
),
'maxDistance' => 1000,
'distanceField' => 'distance',
'spherical' => true
)
)
)
);
geoNear也有数据库命令形式,但是直接命令的结果往往不是那么好。