如何在文档中存储lat-lon地理定位点以进行GAE搜索?

时间:2012-05-15 15:25:39

标签: google-app-engine gae-search

GoogleIO talk on Search API中我们可以根据地理位置进行搜索。

我找不到存储位置信息的appropriate field

如何在document中存储地理定位信息,以便根据距离特定GPS位置的距离发出查询?

1 个答案:

答案 0 :(得分:7)

2012年6月28日,Google将GeoPoint class集成到Google App Engine搜索API库中,其具体目的是使空间点可搜索。

GeoPoints在搜索文档中存储为GeoFields。 Google提供this support documentation概述了GeoPoint与Search API的使用。

以下示例声明了GeoPoint并将其分配给搜索文档中的GeoField。这些新类提供了比下面列出的功能更多的功能,但是这段代码是基本理解如何使用新的空间搜索功能的起点。

使用关联的GeoPoint构建文档

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

搜索GeoPoint文档字段(从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)