1

我使用 PyMongo 的语句在我的集合上创建了地理空间索引:

self.geo_collection.create_index([('location',pymongo.GEO2D)],\
         min=0,max=700,name='test_name')

但是当我尝试执行以下查询时:

{'_id': ObjectId('4fa739422d38036937000000'), 'location': {'$within': {'$polygon': [[165, 10], [165, 90], [290, 10], [290, 90]]}}}

我总是得到一个

database error: point not in interval of [ -180, 180 )

谁能帮我弄清楚发生了什么?谢谢。

4

1 回答 1

1

地理空间索引按广告宣传。要使用 $polygon,您必须拥有 mongodb 1.9 或更高版本。我在 mongodb 2.0.4 上运行以下脚本没有任何问题

import pymongo

db = pymongo.Connection().foo
db.foo.create_index([("loc","2d")], min=0, max=700, safe=True)
db.foo.insert({"loc":(180, 50)}, safe=True)
db.foo.insert({"loc":(240, 490)}, safe=True)
db.foo.insert({"loc":(240, 530)}, safe=True)
polygonA = [ [ 165, 10 ], [ 165, 90 ], [ 290, 10 ], [ 290, 90 ] ]
for doc in db.foo.find({"loc":{"$within":{'$polygon':polygonA}}}):
    print doc

结果如下

{u'loc': [180, 50], u'_id': ObjectId('4fa7b47c81dde04973000000')}
于 2012-05-07T11:46:11.713 回答