2012-05-15 12 views
6

Allí donde las indicaciones en el GoogleIO talk on Search API que podemos hacer búsquedas basadas en la geolocalización.¿Cómo almacenar el punto de geolocalización lat-lon en un documento para la búsqueda de GAE?

No puedo encontrar un appropriate field para almacenar la información de ubicación.

¿Cómo puedo almacenar la información de geolocalización en el document para poder realizar consultas basadas en la distancia desde una ubicación de GPS en particular?

+0

no creo que hay ag buena respuesta a esto Por el momento, la API de búsqueda está en estado experimental. He buscado a través de la documentación y el código de muestra (http://goo.gl/Yb7n1). No hay mucha información disponible que aborde esta funcionalidad o le permite construir un buen mecanismo para resolver este problema. Recomiendo consultar la página del rastreador de problemas de la API de búsqueda (http://goo.gl/LczvP). Alguien ha solicitado esta funcionalidad y actualmente está clasificada como # 3 (http://goo.gl/SIDqA) en la lista de problemas. – RLH

+0

Creo que sí, pero no estaba seguro. La charla de Google IO es un poco engañosa, hay [mención de GeoPoint] (http://youtu.be/7B7FyU9wW8Y?t=12m30s) pero no existe tal campo. No sabía que aún no se había lanzado o que la implementación de API había cambiado. –

Respuesta

7

El 28 de junio de 2012, Google integró el GeoPoint class en la biblioteca de la API de búsqueda de Google App Engine con la intención específica de hacer que los puntos espaciales sean buscables.

Los GeoPoints se almacenan como GeoFields en el documento de búsqueda. Google proporciona this support documentation que describe el uso de GeoPoint con la API de búsqueda.

El siguiente ejemplo declara un GeoPoint y lo asigna a un GeoField en un documento de búsqueda. Estas nuevas clases proporcionan una funcionalidad mucho más de lo que se enumeran a continuación, pero el código es un punto de partida para una comprensión básica de cómo usar la nueva funcionalidad de búsqueda espacial ..

La construcción de un documento con un GeoPoint asociado

## 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) 
      ]) 

Buscando el campo documento GeoPoint (ligeramente modificado a partir de la documentación de la API de búsqueda)

## 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) 
Cuestiones relacionadas