在python中基于geo查询cloudant数据库的建议

时间:2014-06-26 14:13:52

标签: python couchdb spatial geo cloudant

Cloudant Geo Inconsistencies

我是IBM Cloudant CouchDB的新手,希望能够查询我上传并使用GPS坐标标记的记录。

我希望能够查询距所提供位置100公里范围内的所有记录。

cloudant网站信息与地理位置不一致。

例如

Page仍然表示地理查询处于测试阶段(但支持称不是):tinyurl DOT com SLASH mkcyur2

示例中缺少表格(可能是因为我的位置(自动选择)并且我附近没有数据)? tinyurl DOT com SLASH lvxlb4q

API ref没有提到geo(在geo启动之前发布): https://cloudant.com/wp-content/uploads/Cloudant-API-Reference.pdf

地理查询可能只适用于专门的客户? https://cloudant.com/blog/announcing-cloudant-geospatial/#.U6wiqRYRpNN

这就是我用gps插入带有gps和时间的地理标记记录的方式。

import requests
import json

auth = ('username', 'password')
headers = {'Content-type': 'application/json'}
doc = r.json()
doc['event_title'] = "Blah"
doc['event_datetime_utc_epoch'] = 1403768195000
doc['event_lat'] = -31.089675
doc['event_lon'] = 150.932309
post_url = "https://account.cloudant.com/database".format(auth[0])
r = requests.post( post_url, auth=auth, headers=headers, data=json.dumps(doc) )
print json.dumps(r.json(), indent=1)

这是我在Python中查询10条记录的方式。

import requests
import json
auth = ('username', 'password')
get_url = "https://account.cloudant.com/database/_all_docs?limit=10".format(auth[0])
r = requests.get(get_url, auth=auth)
print json.dumps(r.json(), indent=1)

我希望能够查询我附近的所有记录(半径100公里)和一段时间后(记录保存日期的30分钟内)?

1 个答案:

答案 0 :(得分:2)

Cloudant有一个GIS查询图层(Cloudant Geo),目前仅供专门客户使用。如果您联系支持团队,他们可以安排试用期。

Cloudant Search还通过Lucene提供一些有限的地理空间查询 - 您可以按距离点对搜索结果进行排序并执行边界框查询。这听起来像是目前最合适的选项(虽然它不是真正的径向搜索)。

我建议按照

的方式进行搜索
function(doc) {
    index('event_lat', doc.event_lat);
    index('event_lon', doc.event_lon);
    index('event_datetime', doc.event_datetime_utc_epoch);     
}

然后查询:

https://account.cloudant.com/database/_design/myddoc/_search/mysearch?q=event_lat:[10 to 30] AND event_lon:[140 TO 160] AND event_datetime:[1403768195000 TO Infinity]&sort="<distance,event_lon,event_lat,15,150,mi>"