使用$ near和$ geometry不能使用Mongo + meteor获取lat和lng

时间:2016-03-30 14:16:35

标签: mongodb meteor

我正在尝试从中心点获取距离200米范围内的所有文档,但我遇到此错误

  

来自sub getLocNearMe id的异常hg3jRDv8onsZEGvBM错误:异常   轮询查询时   { “集合名”: “Col_Location”, “选择器”:{ “LOC”:{ “$邻近”:{ “$几何”:{ “类型”: “点”, “坐标”:[1.3852457,103.88112509999999]}, “$ maxDistance”:200}}}, “选项”:{ “改造”:空}}:   $ near需要一个点,给定{type:“Point”,坐标:[   1.3852457,103.8811251]}

的客户机/组件/ map.jsx

navigator.geolocation.getCurrentPosition(function (pos) {    
    const sub = Meteor.subscribe("getLocNearMe", pos.coords.latitude, pos.coords.longitude)

    Tracker.autorun(function () {
        if (sub.ready()) {
            Data.MarkersRawData = Col_Location.find().fetch()
        }
    })
})

LIB / collections.jsx

Meteor.publish("getLocNearMe", function(lng, lat) {
    check(lat, Number)
    check(lng, Number)

    const data = Col_Location.find({
        loc: {
            $near: {
                $geometry: {
                    type: "Point" ,
                    coordinates: [lng, lat]
                },
                $maxDistance: 200
            }
        }
    })

    console.log(data)
    if (data) {
        return data
    }

    return this.ready()
})

服务器/ server.jsx

Col_AllQuestion._ensureIndex({"loc": "2dsphere"})

    Col_Location.insert({
        loc: {
            type: "Point",
            coordinates: [103.8, 1.31]
        }
    })

1 个答案:

答案 0 :(得分:1)

测试你" Point"与http://geojsonlint.com/有几个问题。似乎(有点挑剔)规范要求你的键被引用字符串(我认为你的流星处理),但你的坐标被翻转(纬度/长度)的事实。

以这样的方式提供样本会产生有效的GeoJSON结果:

{ 
  "type": "Point", 
  "coordinates": [ 103.8811251, 1.3852457 ] 
}