#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>"