7

我最近开始从事一个涉及地理位置、地图(Google Maps V3)等的个人项目。

该项目是用 Python 开发的,旨在在 Google App Engine 上运行。我了解到,为了找到接近某个位置的标记/位置,可以使用 geohash 算法(这很酷)。

我不明白的是:假设我在数据存储中拥有所有位置(以及每个位置的纬度、经度和 geohash(高精度)。)

我知道我应该使用 geohash 的前缀(以匹配其中的位置),但是如何计算边界框的 geohash?考虑到边界框由两点组成,东北和西南,我不明白如何去做。

为了让我查询应该为当前可见边界框返回哪些位置,我需要可见/可见边界框的 geohash -现在我知道我可以对可视地图上的中心位置进行 geohash,但我不知道如何许多字母要切断(以降低精度)以实现与实际边界框的“匹配”。(或者也许不是这样......?)

当边界框容器到geohashes时你会怎么做?(就像在可视区域的中间它在'dqcjr0'和'dqcjqb'之间分裂)

另外,假设我有一个 5 个字母的 geohash,如何将其转换回可见的边界框?或者换句话说,我怎么知道什么是“包含”的散列,以及相邻的散列中是什么?

在此先感谢您的帮助,

肯。

4

2 回答 2

0

我经常将 geohash 与谷歌应用引擎数据类型一起db.GeoPt使用,并且我曾经保留一个 geohash,我发现它db.GeoPt与非常好的但有点慢的名为geomodel的库相结合不如Geomodel 可以做边界框和半径映射,我建议您尝试使用边界框,因为它不像半径那么昂贵。我可以像这样执行边界框查询:

    articles = Article.bounding_box_fetch(Article.all().filter('modified >',
                          timeline).filter('published =',
                          True).filter('modified <=',
                          bookmark).order('-modified'),
                          bounds,
                          max_results=PAGESIZE + 1)

因此,即使我为每篇文章都存储了 geohash,在我的情况下使用 geomodel 要好得多。也许您已经评估了 geomodel 并发现它不适合您的目的,并且您绝对必须使用 geohash 我建议我们同意一个通用的 geohash 库,以便我们的坐标散列到相同的值。我确实保留了我在某处使用的 geohash 库的一个版本,但它可能已经过时了,最近关于地理空间查询的文章也提到了 geomodel,所以如果你还没有查看 geomodel,我真的建议你查看 geomodel 库来执行您的地理空间查询。

于 2011-12-03T22:39:30.213 回答
0

Ken 您可能想更新您的问题,说明您是否使用 django / django-nonrel?

我正要尝试将 Geomodel 的这个(当前存档)端口移植到 django:

https://bitbucket.org/scotch/django-geomodel/

Kyle 建议即将推出的谷歌“全文搜索”将取代他的 Geomodel 实施。尽管如此,我需要它在接下来的几天内工作。

(我目前的谈话是:这个话题:

https://groups.google.com/forum/#!topic/django-non-relational/WCxFjkUzw18

乔恩

于 2011-12-12T21:29:01.420 回答