Python Eve 0.8:如何使用$centerSphere执行$geowithin?



我们已经部署了一个docker容器,其中运行着MongoDB数据库。这是一个简单的数据库,我们在其中存储地理参考传感器数据(例如温度、风速(。由于我们要基于搜索半径查询这些地理参考观测值,因此我们启用了如下所示的空间查询:

db.ObsStationTemp.createIndex({point:"2dsphere"})
db.ObsStationTemp.ensureIndex({"geometry":'2dsphere'})

数据在MongoDB中被正确摄取,我们实际上可以执行空间查询,如下所示:

db.ObsStationTemp.find({geometry:{$geoWithin:{$centerSphere:[[4.925922,51.969035],2/3963.2]}}})

现在我们想使用 Eve 从 HTTP 接口访问这些观察结果。我们将之前的查询转换为 HTTP。我们尝试了许多组合,例如:

http://127.0.0.1:5000/ObsStationTemp?where={"geometry": {"$geoWithin": {"$centerSphere": [ [4.92592, 51.969035],0.02]}}}

但它们都不起作用。 这是 Eve 服务器的回复:

{
"_status": "ERR",
"_error": {
"code": 400,
"message": "Query contains unknown or unsupported operators: $centerSphere"
}
}

我们在当前的 HTTP 查询中缺少什么?任何帮助或分享示例?我们使用 Eve 0.8,查询是使用 Postman 执行的。谢谢。

我们使用 Eve 0.8,查询使用 Postman 执行。

这是因为 PyEve(当前版本 0.8(不支持 $centerSphere 运算符。参见 eve/io/mongo/mongo.py#L94-L102。您可以在PyEve的问题跟踪器上提交请求,以获得操作员支持。

此外,值得注意的是,$geoWithin$centerSphere一起使用仅在MongoDB v3.4+上可用。

最新更新