2015-01-09 19 views
1

я могу получить мои элементы, с помощью следующего кода:

$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 
       ) 

     ) 

) 

Но теперь, мне нужно, чтобы получить расстояние от моей заданной точки.

Возможно ли это?

EDIT:

Это код, используемый для вставки ДАННЫЕ:

$loc = $client->localisation->localisation;  
$loc->ensureIndex(array("loc" => "2dsphere")); 

$loc->insert(
     array(
      "idobject" => $myValue 
      "name" => $myName 
      "loc" => array("type" => "Point", "coordinates" => array($longitude, $latitude)) 
     )); 

ответ

1

Оператор $near не возвращает расстояние вместе с возвращенными результатами. Он только заказывает документы в ответе.

Под драйвером 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, а также, но прямые результаты команды зачастую не так хорошо.

+0

Спасибо, но я получаю эту ошибку: исключения: geoNear команды не удалась: {ОК: 0,0, ErrMsg: «не может получить бегун запрос»} – bahamut100

+0

@ bahamut100 ли вы, возможно, есть более чем один геопространственной индекс коллекции ? Обратите внимание, что эти формы не указывают поле, потому что они ожидают присутствия только одного индекса. –

+0

> Я отредактировал свое сообщение, чтобы добавить способ, которым я вставлял данные – bahamut100

Смежные вопросы