Python 使用Couchbase搜索给定半径内的文档
我想编写一个地理空间视图,在给定纬度和经度的一英里半径内搜索以下文档。我该怎么做Python 使用Couchbase搜索给定半径内的文档,python,couchbase,couchbase-view,Python,Couchbase,Couchbase View,我想编写一个地理空间视图,在给定纬度和经度的一英里半径内搜索以下文档。我该怎么做 { "agree_allowed":true, "assigned_by":"", "assigned_to":"", "comments_allowed":true, "location": { "coordinates": [ "-74.168868", "40.854655" ], "type": "Point" }, "
{
"agree_allowed":true,
"assigned_by":"",
"assigned_to":"",
"comments_allowed":true,
"location": {
"coordinates": [
"-74.168868",
"40.854655"
],
"type": "Point"
},
"subscribed":{
"user_cfd29b81f0263a380507":true,
"user_cfd29b81f0263a3805010":true
},
"type":"report",
"user_id":"user_cfd29b81f0263a380507",
"username":"test17"
}
查看Couchbase中的地理空间视图文档: 您可以采取的一种方法是在所有文档的位置周围使用一个1英里的边界框对其进行索引 然后,您将查询该视图,开始范围和结束范围是相同的范围,这将是上面文档的位置。这将返回点位于其1英里边界框内的所有文档
您可以使用GeoJSON来创建更精确的边界框,不幸的是,它们在规格中没有圆,因此根据您创建边界框的高级程度,您可能会得到距离查询位置不到一英里的结果。因为您只能对Couchbase空间视图使用边界框查询,您必须将距离查询分为两个步骤:
function(doc, meta)
{
if (doc.location)
emit(doc.location, [meta.id, doc.location]);
}
注意:这是Couchbase 3.0版本的视图,在Couchbase 4中,您不再需要在值中发出meta.id和doc.location
现在,给定一个起点(lat,lon)和半径r,您需要计算一个边界框[lat1,lon1,lat2,lon2],以在视图中查询坐标可能位于所需半径范围内的文档列表。Couchbase中的边界框查询指定左下角和右上角坐标
接下来,在应用程序中,迭代所有结果,并检查它们是否真的落在距离起点R的范围内
根据您需要的精度,您可以假设地球是平的,只需在二维平面上进行计算,这将是不准确的,但对于1英里的距离来说并非如此。或者,使用实际精确的公式来计算一切,如本篇优秀文章所述:
或者更好的是,您可以使用所选语言的地理位置库来计算边界框和距离。这里有一个用于和一个用于。对于空间视图,您只能通过边界框进行搜索 您可能希望在半径范围内搜索-在全文搜索中隐藏。。。
您的意思是要解决以下问题:给定两对(纬度、经度)坐标,计算距离?或者我理解错了吗?我想写一个地理空间视图,它返回距离为1英里的报告作为参考,请参阅关于使用地理空间API的Python文档:注意,在Couchbase中指定边界框的顺序实际上是
lon,lat
而不是lat,lon
@David:-谢谢你的解释,但是我能得到任何用代码解释的链接吗?所以我必须写一个查询,从couchbase获取所有的lat,lon,然后用python编写一个代码来过滤radius,对吗?我如何用一个1英里的边界框来索引文档?