Рекомендации по запросу базы данных cloudant на основе geo в python

#python #couchdb #spatial #geo #cloudant

#python #couchdb #пространственный #geo #cloudant

Вопрос:

Несоответствия Cloudant Geo

Я новичок в IBM Cloudant CouchDB и хотел бы иметь возможность запрашивать записи, которые я загрузил и пометил координатами GPS.

Я хотел бы иметь возможность запрашивать все записи, которые находятся в пределах 100 км от указанного местоположения.

Информация на веб-сайте cloudant противоречива в отношении geo.

например

На странице по-прежнему указано, что запрос geo находится в бета-версии (но служба поддержки утверждает, что это не так): tinyurl ТОЧКА com КОСАЯ ЧЕРТА mkcyur2

Отсутствующие таблицы в образце (вероятно, потому, что мое местоположение (выбрано автоматически) и рядом со мной нет данных)? tinyurl ТОЧКА com КОСАЯ ЧЕРТА lvxlb4q

Ссылка на API не упоминает geo (выпущена до запуска geo): https://cloudant.com/wp-content/uploads/Cloudant-API-Reference.pdf

Запрос Geo может быть предназначен только для выделенных клиентов? https://cloudant.com/blog/announcing-cloudant-geospatial/#.U6wiqRYRpNN

Вот как я вставляю записи с геотегами с gps и временем с помощью python.

 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)
 

Вот как я запрашиваю 10 записей в Python.

 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:

Cloudant имеет уровень запросов к ГИС (Cloudant Geo), который в настоящее время доступен только для выделенных клиентов. Если вы обратитесь в службу поддержки, они могут организовать пробный период.

Поиск Cloudant также предлагает некоторые ограниченные геопространственные запросы через 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]amp;sort="<distance,event_lon,event_lat,15,150,mi>"