20

我是 mongodb 地理定位功能的新手。

我在数据库中存储了一些代表国家边界的多边形以及国家名称。现在我想做的是检查一个点在哪个国家。例如,如果我给出自己的地理位置,我想得到我所在的国家。

有没有办法用 mongodb 做到这一点?也许与geoWithin?

谢谢

4

4 回答 4

9

You must store your location data like this schema:

{"loc":
     {"coordinates":[
       [
         [1.0,1.0],
         [1.0,10.0],
         [10.0,10.0],
         [10.0,1.0],
         [1.0,1.0]
       ]
      ],
     "type":"Polygon"
   }
}

and then send $geoIntersects queries

db.polygons.find({"loc":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[x, y]}}}}
于 2014-09-10T08:02:31.483 回答
7

你必须使用$geoIntersects它。

db.features.find({mystoredpolygon:{$geoIntersects:{$geometry:{type:'Point', coordinates:[22,38]}}}})
于 2014-02-05T21:49:24.640 回答
4

是的,您可以$geoWithin用于检查,前提是您使用 将国家定义为多边形GeoJSON。为此,请尝试此 GitHub 存储库

于 2013-04-08T02:28:44.313 回答
0

您的场景似乎与使用$geoIntersects而不是 $geoWithin.

如 MongoDB 文档中所示的示例,您可以使用 MongoDB 的$geoIntersects地理空间查询功能,假设您的数据库中存储了一个表示国家/地区的多边形并且一个点是您的当前位置,您可以使用以下查询。

db.neighborhoods.findOne({
     geometry: { 
        $geoIntersects: {
             $geometry: { 
                type: "Point", 
                coordinates: [ -73.93414657, 40.82302903 ] 
            }
        } 
    } 
})

在哪里,neighborhood是您的收藏,它存储在您所在国家/地区的多边形中。geometry在第二行查询中是存储在 DB 中的实际多边形(它是 Geo-Json 格式)。并且"Point"里面$geometry是您当前所在的位置,您想要的国家/地区。

于 2020-02-20T05:08:16.217 回答