2012-05-15 7 views
6

Ci sono delle indicazioni nello GoogleIO talk on Search API che possiamo eseguire ricerche basate sulla geolocalizzazione.Come memorizzare il punto di geolocalizzazione lat-lon in un documento per la ricerca GAE?

Non riesco a trovare un appropriate field per memorizzare le informazioni sulla posizione.

Come posso memorizzare le informazioni di geolocalizzazione nello document in modo da poter eseguire query in base alla distanza da una particolare posizione GPS?

+0

non credo ci sia ag ood rispondere a questo. Al momento, l'API di ricerca si trova in uno stato sperimentale. Ho cercato attraverso la documentazione e il codice di esempio (http://goo.gl/Yb7n1). Non ci sono molte informazioni disponibili che risolvono questa funzionalità o ti permettono di costruire un buon meccanismo per risolvere questo problema. Ti consiglio di verificare la pagina del tracker dei problemi dell'API di ricerca (http://goo.gl/LczvP). Qualcuno ha richiesto questa funzionalità ed è attualmente classificato # 3 (http://goo.gl/SIDqA) nell'elenco dei problemi. – RLH

+0

Lo penso anch'io, ma non ne ero sicuro. Il Google IO talk è in qualche modo fuorviante, c'è [menzione di GeoPoint] (http://youtu.be/7B7FyU9wW8Y?t=12m30s) ma non esiste un tale campo. Non sapevo che non fosse ancora stato rilasciato o che l'implementazione dell'API fosse cambiata. –

risposta

7

Il 28 giugno 2012, Google ha integrato lo GeoPoint class nella libreria dell'API di ricerca di Google App Engine con l'intento specifico di rendere ricercabili i punti spaziali.

I punti geografici sono memorizzati come campi geografici all'interno del documento di ricerca. Google fornisce this support documentation che illustra l'utilizzo di GeoPoint con l'API di ricerca.

L'esempio seguente dichiara un GeoPoint e lo assegna a un GeoField in un documento di ricerca. Queste nuove classi forniscono un più funzionalità molto di quello che è elencato di seguito, ma questo codice è un punto di partenza per una conoscenza di base di come utilizzare la nuova funzionalità di ricerca spaziale ..

Costruzione di un documento con un GeoPoint associato

## IMPORTS ## 
from google.appengine.api import search 

def CreateDocument(content, lat, long): 
    geopoint = search.GeoPoint(lat, long) 
    return search.Document(
    fields=[ 
      search.HtmlField(name='content', value=content), 
      search.DateField(name='date', value=datetime.now().date()) 
      search.GeoField(name='location', value=geopoint) 
      ]) 

Ricerca campo documento GeoPoint (leggermente modificato dalla documentazione Search API)

## IMPORTS ## 
from google.appengine.api import search 

ndx = search.Index(DOCUMENT_INDEX) 
loc = (-33.857, 151.215) 

query = "distance(location, geopoint(-33.857, 151.215)) < 4500" 

loc_expr = "distance(location, geopoint(-33.857, 151.215))" 

sortexpr = search.SortExpression(
    expression=loc_expr, 
    direction=search.SortExpression.ASCENDING, default_value=4501) 

search_query = search.Query(
    query_string=query, 
    options=search.QueryOptions(
    sort_options=search.SortOptions(expressions=[sortexpr]))) 

results = index.search(search_query) 
Problemi correlati