如何计算可视区域/边界框的geohash?

时间:2011-12-03 20:32:46

标签: google-app-engine google-maps google-maps-api-3 geolocation geohashing

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

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

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

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

为了让我查询当前可见边界框应该返回哪些位置,我需要的可见/可见边界框的geohash - 现在我知道我可以在中心位置进行地理位置可查看的地图,但我不知道要切断多少个字母(以降低精度)以实现“适合”实际的边界框。 (或者也许那不是......?)

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

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

先谢谢你的帮助,

2 个答案:

答案 0 :(得分: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,发现它不适合你的目的,你绝对必须使用geohashes我建议我们同意geohash的公共库,以便我们的坐标散列到相同的值。我确实保留了我在某个地方使用的geohash库的版本,但它可能已经过时了,recent articles关于地理空间查询也提到了地理模型,所以如果你还没有查看geomodel,我真的建议你看一下geomodel库来执行地理空间查询。

答案 1 :(得分:0)

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

我正准备尝试这个(目前存档的)Geomodel端口到django:

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

凯尔建议即将推出的谷歌“全文搜索”将取代他的Geomodel计划。尽管如此,我还是需要在接下来的几天内开展工作。

(我目前的对话:这个话题:

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

乔恩