2017-01-11 9 views
0

Я хочу получить значения в радиусе 20 км, но я получаю также значения за пределами 20 км. Что я делаю неправильно?

var gquery = [{ $geoNear: {  near: { 
          type: "Point", 
          coordinates: [ -73.935242,40.730610] 
          }, 
          $minDistance: 0, 
          $maxDistance: 20000, 
          distanceField: "dist.calculated", 
          spherical: true 
          }}, 

          {$group:{_id:'$category', total:{$sum:1}} 

         }]; 

          Experiences.aggregate(gquery, 
          function(err, result) { 
           console.log(result); 
          }); 

ответ

0

$ maxdistance не найти координаты в километрах, а в радианах градусов. Таким образом, вам нужно будет преобразовать километры от радиуса в радианах градусов.

Нравится это, например.

var radius = 20 
var maxDistance = radius/111.12; 

Place.find({ 
    'loc': { 
    $near:[-73.935242,40.730610], 
    $maxDistance: maxDistance 
    } 
}).exec() 
.then(...) 

EDIT: Это в градусах и для 2-го круга

EDIT 2: Ok кажется, что я давал вам ответ на 2d. Мои извинения.

В Documentation за $ geoNear Aggregation он говорит:

Укажите расстояние в метрах для данных GeoJSON и в радианах для наследие пар координат.

Поскольку вы сказали мне, что используете GEOJSON, вы должны преобразовать счетчики в радианы в этом случае.

Чтобы преобразовать километры в радианы так просто, как разделить его на радиус Земли (6371 км)

Вот как это должно выглядеть следующим образом:

var radiusInKm = 20 
var radians = radiusInKm/6371 // Divided by earth radius in kilometers 

var gquery = [{ 
     $geoNear: { 
      near: { 
       type: "Point", 
       coordinates: [-73.935242, 40.730610] 
      }, 
      $minDistance: 0, 
      $maxDistance: radians, 
      distanceField: "dist.calculated", 
      spherical: true 
     } 
    }, 

    { 
     $group: { 
      _id: '$category', 
      total: { 
       $sum: 1 
      } 
     } 

    } 
]; 

Experiences.aggregate(gquery, 
    function(err, result) { 
     console.log(result); 
    }); 
+0

Хорошо, что значение 111 , 12 или это просто пример? – Tony

+0

Это как вы его конвертируете – Mockingguy

+0

ok спасибо, но я использую совокупную функциональность, и я пробовал с этим, но он не работает с вашим примером. – Tony