6

GoogleIO中关于 Search API 的指示表明我们可以根据地理位置进行搜索。

我找不到合适的字段来存储位置信息。

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

4

1 回答 1

7

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

GeoPoints 作为 GeoFields 存储在搜索文档中。Google 提供了此支持文档,概述了 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)
于 2012-06-28T12:54:32.323 回答