Poiché è possibile utilizzare solo le query di selezione-box con Couchbase viste spaziali, si dovrà dividere la query distanza in due fasi:
- Query Couchbase per le coordinate che rientrano in un riquadro che corrisponde al tuo raggio .
- Filtra le coordinate restituite dal n. 1 oltre il raggio specificato.
Per il primo passo, avrete bisogno di scrivere un vista spaziale come segue:
function(doc, meta)
{
if (doc.location)
emit(doc.location, [meta.id, doc.location]);
}
Nota: questa è la versione 3.0 Couchbase della vista, in Couchbase 4 non lo fai bisogno di emettere il meta.id e doc.location nel valore più.
Ora, dato un punto di partenza (lat, lon) e raggio r, è necessario calcolare un rettangolo di selezione [LAT1, lon1, Lat2, lon2] per interrogare la vista per un elenco di documenti le cui coordinate potenzialmente rientrano nel raggio desiderato. La query del riquadro di delimitazione in Couchbase specifica le coordinate in basso a sinistra e in alto a destra.
Successivamente, nella propria applicazione, scorrere tutti i risultati e verificare se si trovano effettivamente nella distanza R del punto di partenza.
A seconda della precisione necessaria, è possibile ipotizzare che la Terra sia piatta e fare i calcoli su un piano 2D, che sarà impreciso ma non terribilmente così per una distanza di 1 miglio. In alternativa, utilizzare le formule effettivamente accurate per calcolare tutto, come descritto in questo eccellente articolo: http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates
O meglio ancora, è possibile utilizzare una libreria di geolocalizzazione per la lingua di propria scelta per calcolare il riquadro di delimitazione e le distanze. Ecco uno per C# e uno per Java.
fonte
2015-07-31 17:02:01
Intendi risolvere il seguente problema: date due coppie di coordinate (latitudine, longitudine), calcola la distanza?o ho capito che hai torto – supinf
voglio scrivere una geoSpatialview, che restituisce report entro 1miglia di distanza – rash
Per riferimento, vedere la documentazione di Python sull'uso dell'API geospaziale: http://pythonhosted.org/couchbase/api/views.html # viste geospaziali –