使用MongoDB的地理空间索引处理三维数据

17

我有一组文档,每个文档都包含一个在 MongoDB 集合中存储的 3D 空间点。目前 MongoDB 只为 2D 提供地理空间索引。是否有办法利用地理空间索引来在 3D 数据上执行类似的查询?


你的意思是,你想要 x、y、z 而不是只有 x? - Justin Thomas
4
+1 - 我甚至不知道Mongo有地理空间索引.. - NG.
它具有球体和盒子模型用于地理空间,盒子模型对于硬核GIS类型并不是特别有用,但对于位置应用程序来说很有趣。 - Justin Thomas
是的,Mongodb对于平面2D和球面2D均具有地理空间索引。(http://www.mongodb.org/display/DOCS/Geospatial+Indexing)如果您正在映射地球表面上的点,则可以构建地理空间索引并执行快速的相邻查询,但不幸的是,我的数据具有第三个维度。 - John F. Miller
3
MongoDB中关于n维地理空间支持的功能请求链接为http://jira.mongodb.org/browse/SERVER-691。 - Sridhar
@Sridhar:谢谢,知道它正在“进行中”是很好的!有趣的一面是,我希望看到n<=4的索引,可能更容易实现n空间一般情况,但随着n的增加,索引值会减少(我认为是n!,但不要引用我)。搜索“维度诅咒”的整个故事。 - John F. Miller
1个回答

1

你可以通过压缩其中一个维度来解决问题,但你会失去一半的精度。

比如说,如果它们是64位密钥,而你想要存储三个32位坐标:[(x << 32) + y, z]

甚至可以交错三个坐标并将其存储在一个密钥中:

xxx

yyy

zzz

xyzxyzyz


1
我认为这会破坏地理空间索引使用的“附近”概念,不是吗? - John F. Miller
是和否。如果您使用最随机的变量设置破碎尺寸的低位,则应该没问题。交错位的第二个技巧非常适用于将任意数量的维度压缩为一个维度。 - Chad Brewbaker
我真的不太理解这个。在MongoDB JavaScript shell代码中,这实际上是如何工作的?你能提供一个定义索引和样本查询的例子吗?谢谢!另外,你会怎么做:https://dev59.com/zlfUa4cB1Zd3GeqPFjJl - ma11hew28
1
对于精确查询——是的,但是您不需要空间索引——常规索引就可以正常工作,并且您可以进行多列索引,因此不需要任何巧妙的处理。对于近似查询——您已经有效地放弃了y维度(更糟糕的是,在x维度引入了噪声),因此您可能会跳过这个巧妙的处理,只需在[x,z]上进行空间索引即可。 - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接