如何在mongoDB中存储地理空间信息

时间:2013-03-07 15:18:57

标签: mongodb geospatial

根据mongoDB文档 (link) 如果要将地理空间信息存储在文档字段中,则有两个选项,即数组或嵌入文档,顺序应始终为经度,纬度。

如果我想使用嵌入式文档,我该如何确保字段的顺序?

或者嵌入文档中的字段是否必须具有特定名称?

5 个答案:

答案 0 :(得分:32)

带有嵌入文档的

,无论嵌入文档中字段的名称如何,第一个字段都应包含经度值,第二个字段应包含纬度值。例如:

 db.zips2.insert( { _id: 1, city: "b", loc: { x: -73.974, y: 40.764 } } )
 db.zips2.insert( { _id: 2, city: "b", loc: { x: -73.981, y: 40.768 } } )

这里 x 字段是经度;而 y 字段将是纬度。

此致

答案 1 :(得分:32)

2D Geospatial Index, Store Location Data

“所有文档必须以相同的顺序存储位置数据。如果使用纬度和经度作为坐标系,始终存储经度 .MongoDB的2d球形索引运算符仅识别[经度,纬度]排序。“

Here's a good post about Geospatial Queries in MongoDB万一你需要它。

答案 2 :(得分:7)

我建议您为自己的字段命名:x and y,而不是longitude/latitude,因为在更新后,经度和纬度将按字母顺序重新排序,因此反转。

答案 3 :(得分:2)

地理空间索引允许我们根据地理位置查找内容。

我们有2个选项:

  • 2D
  • 3D

在二维中,我们有x&笛卡尔飞机。 y坐标和一堆不同的对象。

2D cartesian plane

该文档需要存储某种xy位置ensureIndex({'location':'2d', 'type':1})

type(可选)选项指定索引的方向,即升序或降序。它可以是复合指数。

使用示例:

要查找附近的位置,请使用命令:

db.collectionName.find({location: {$near:[x,y]}})

在实践中,经常使用的方式是limit。要将结果限制为例如 20 ,请附加.limit(20)

db.collectionName.find({location: {$near:[x,y]}}).limit(20)

答案 4 :(得分:1)

MongoDB文档说明如下:

一个名为坐标的字段,用于指定对象的坐标。 如果指定纬度和经度坐标,请先列出经度然后是纬度

有效经度值介于-180和180之间(包括两者)。 有效纬度值介于-90和90之间(包括两者)。

Oficial MongoDB文档:https://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes