Совет по запросу облачной базы данных на основе гео в питоне

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

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

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

Информация на облачном веб-сайте несовместима с гео.

e.g

Страница по-прежнему говорит, что гео-запрос находится в бета-версии (но служба поддержки говорит, что это не так): tinyurl DOT com SLASH mkcyur2

Отсутствуют таблицы в выборке (вероятно, из-за моего местоположения (выбирается автоматически) и рядом со мной нет данных)? tinurl DOT com SLASH lvxlb4q

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

Гео-запросы могут быть только для выделенных клиентов? 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 минут после даты сохранения записи)?


person Simon Fearby    schedule 26.06.2014    source источник


Ответы (1)


В Cloudant есть слой запросов ГИС (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>"
person Will Holley    schedule 30.06.2014