将geojson多边形插入到mongodb中,并根据点的坐标查询位于距离它一定距离的所有多边形

时间:2015-10-06 13:52:30

标签: mongodb mongoose geospatial geojson

我需要一些帮助:如何将geojson多边形插入mongodb数据库并根据某个点的坐标查询位于该点一定距离的所有多边形

以下是我将使用的geojson样本:

var testJson =  {
    "type" : "Polygon",
    "properties": {},
    "geometry" : [
        [
            [ 40.8003, -73.9580 ],
            [ 40.7968, -73.9498 ],
            [ 40.7648, -73.9737 ],
            [ 40.7681, -73.9814 ],
            [ 40.8003, -73.9580 ]
        ]
    ]
};

我想将它保存到mongodb数据库中并能够查询它。 为此,我执行以下操作:

  1. 我创建了一个mongoose架构:

    var GeoSchema = mongoose.Schema({             "输入":{" type":String},             "属性":{" type":Object},             " geometry":{                 "输入":数组,                 "索引":' 2dsphere'             }         });

  2. 我创建了一个猫鼬模型:

    var GeoModel = mongoose.model(' GeoModel',GeoSchema);

  3. 我将geojson保存到我的数据库:

    var post = new GeoModel(testJson);

    post.save(function(err,doc){       if(err)throw err;       的console.log(         "保存后:\ n%s",JSON.stringify(doc,undefined,4)); });

  4. 最后,我搜索并找到记录:

    GeoModel.find({         几何:[             [40.8003,-73.9580],             [40.7968,-73.9498],             [40.7648,-73.9737],             [40.7681,-73.9814],             [40.8003,-73.9580]         ]     },function(err,records){         if(err)return console.log(err);         的console.log(记录);     });

  5. 我需要帮助的问题:

    我将以多边形的形式加载大量的geojson数据。

    假设我位于以下坐标: 40.8003,-73.9580

    对于x公里的距离,我希望能够使用范围内的所有多边形。

    所以,我正在考虑做一个类似于此的查询,这当然不起作用:):

    GeoModel.find(
        {
            geometry: {
                $near : {
                    $geometry : { 
                        type : "Point" , 
                        coordinates : [40.8003, -73.9580]  
                    }, 
                    $maxDistance : 20000
                }
            },
        }, function(err, records) {
            if (err) return console.log(err);
            console.log(records);
        }
    );
    

    我收到了这个错误:

    { [MongoError: Unable to execute query: error processing query: ns=coverageMap.geomodels limit=1000 skip=0
    Tree: GEONEAR  field=geometry maxdist=20000 isNearSphere=0
    Sort: {}
    Proj: {}
     planner returned error: unable to find index for $geoNear query]
      name: 'MongoError',
      message: 'Unable to execute query: error processing query: ns=coverageMap.geomodels limit=1000 skip=0\nTree: GEONEAR  field=geometry maxdist=20000 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query',
      '$err': 'Unable to execute query: error processing query: ns=coverageMap.geomodels limit=1000 skip=0\nTree: GEONEAR  field=geometry maxdist=20000 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query',
      code: 17007 }
    

    关于如何解决这个问题的任何想法?

    谢谢!

0 个答案:

没有答案