0

Mongodb地理空间索引和查询(Geospatial Indexes)

Posted by 撒得一地 on 2016年4月14日 in Mongodb教程

MongoDB 提供大量的索引和查询机制,来处理地理空间信息。本节介绍了 MongoDB 的地理特点。关于 MongoDB 中地理空间查询的完整示例,请参见地理空间索引教程。

表面

在存储地理数据和编写查询之前, 你必须决定使用哪种表面类型用于执行计算。你选择的类型会影响到你将如何存储数据,选择什么类型的索引也会影响到你查询的语法。

MongoDB 提供了两种表面类型(surface types):

球面

若要在类似地球球面上计算几何,存储球面上的地理位置数据,可以使用 2dsphere 索引。

根据坐标轴的顺序 ︰ 经度、 纬度,将你的地理位置数据存储为 GeoJSON 对象。GeoJSON 的坐标参考系使用的是 WGS84 基准。

平面

如果需要计算距离,就像在一个欧几里德平面上,你可以按照正常几何的求解思路,通过存储坐标对的形式存储地理位置数据并使用 2d 索引。

地理位置数据

如果你选择球形表面计算,你可以选择下面任一种方法存储地理位置数据 ︰

GeoJSON对象(GeoJSON Objects)

通常通过对 GeoJSON 对象的查询,来对一个球面进行计算。GeoJSON 默认的坐标参照系统使用的是 WGS84 基准。

在最新的2.4版本中:2.4 版本中的新增 GeoJSON 的存储和查询功能。在版本 2.4 之前, 所有的地理空间数据使用的是坐标对形式。

在2.6版中发生改变:支持更多的 GeoJSON 类型: 多个点,多个线,多个面等混合的几何体数据类型。

MongoDB 支持以下的 GeoJSON 对象:

点(Point)
线(LineString)
多边形(Polygon)
多个点(MultiPoint)
多条线(MultiLineString)
多个多边形(MultiPolygon)
几何集合(GeometryCollection)
多个坐标对(Legacy Coordinate Pairs)

对使用了 2dsphere 索引的坐标对进行球形表面计算,MongoDB 是通过将数据转换为 GeoJSON 类型,。

如果你使用 2d 索引来进行平面计算,那么你仅需要存储坐标对数据就可以了。

操作查询

MongoDB 的地理空间查询运算符可以让你查询如下内容 ︰

Inclusion
包含

MongoDB 对完全包含在一个指定的多边形内的位置进行查询。包含查询使用 $geoWithin 运算符。

2d 和 2dsphere 索引两种都支持包含查询。对于包含查询,MongoDB 并不需要使用到索引;然而,这种索引将提高查询性能。

Intersection
交叉

MongoDB 可以查询与指定几何相交的位置。这些查询仅适用于球面上的数据。这些查询使用 $geoIntersects 操作符。

仅仅 2dsphere 索引支持交叉查询。

Proximity
临近

MongoDB 可以查询离另一个点最近的点。接近度查询使用 $near 运算符。$near 运算符需要一个 2d 或 2dsphere 的索引。

地理空间索引(Geospatial Indexes)

MongoDB 提供下列地理空间索引来支持地理空间查询。

2dsphere

2dsphere 索引(2dsphere indexes)支持:

在球形平面上的计算

GeoJSON 对象,并包括向后遗留的兼容性。

复合索引。这个复合索引可以包含一个 2dsphere 索引字段以及一些按升序或降序建立的普通索引字段(作为 2dsphere 索引的前缀或者后缀)。
2.4 新版功能: 在版本2.4之前“2dsphere“ 索引是不可用的。

2d

2d indexes support:
2d 索引支持:

使用平面几何的方式计算

普通坐标对(比如,在一个平面坐标系中的点)

作为复合索引,额外索引一个键。方法是,把额外的一个键作为 2d 索引键的后缀

地理空间索引和分片(Geospatial Indexes and Sharding)

你不能使用地理索引来作为 shard key 索引。

你可以在一个被分片的集合上创建并维护一个一个地理空间索引,使用的不能是分片键。

对于被分片的几何,使用了 $near 操作的查询是不被支持的。作为替代,您可以使用 geoNear 命令或者 $geoNear 在聚合阶段的时候。

你还可以使用 $geoWithin 对地理空间数据的查询。

其他资源

下面的页面为地理空间索引和查询提供完整的文档︰

2dsphere Indexes

2dsphere 索引支持类似地球球面上几何计算的查询。索引支持对 GeoJSON 对象和坐标对的方式进行数据存储。

2d Indexes

2d索引支持作坐标对存储的数据,在 MongoDB 2.2 及更早的版本使用。

geoHaystack Indexes

haystack堆索引是被特殊优化的索引,用于返回小区域内的结果。对于使用球面几何的查询,比起 haystack 索引,2dsphere 索引更好的选择。

2d Index Internals

提供了关于地理空间索引内部更深入的解释。这种内部机制对正常操作来说是不必要的,但可能是有利于解决问题和更进一步的了解。

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 + 1 = ?

网站地图|XML地图

Copyright © 2015-2017 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.