Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 谷歌应用引擎:查询geohash_Google App Engine - Fatal编程技术网

Google app engine 谷歌应用引擎:查询geohash

Google app engine 谷歌应用引擎:查询geohash,google-app-engine,Google App Engine,我有一个geohash的db.StringProperty(),通过给定一个hashcode,如何找到更接近10的结果 我在下面试过,但似乎不对 pois = POI.all().filter('geohash <', h_latlng).order('-geohash').fetch(10) pois=POI.all().filter('geohashgeohash无法完成查找n个最近结果的任务。您可以通过前缀查找任何正方形区域的内容。但要查找包含n个最近结果的可靠结果,您需要获取至少

我有一个geohash的db.StringProperty(),通过给定一个hashcode,如何找到更接近10的结果

我在下面试过,但似乎不对

pois = POI.all().filter('geohash <', h_latlng).order('-geohash').fetch(10)

pois=POI.all().filter('geohashgeohash无法完成查找n个最近结果的任务。您可以通过前缀查找任何正方形区域的内容。但要查找包含n个最近结果的可靠结果,您需要获取至少9个前缀,这使得查询成本相当高。更复杂的是,需要计算9个正方形的前缀。

在我看来,这个问题目前是一个很难在app engine上有效解决的问题。到目前为止,我已经研究了一年了,还没有找到一个复杂而快速的解决方案。一个带有地理索引或2个不等式的关系数据库将更好更快地执行这些任务。但我也对好的解决方案感兴趣。:-)

引用大卫·特洛伊:

Geohash还具有如下属性: 位数减少(从 右图),精确度下降。这 属性可用于进行边界处理 框搜索,作为靠近一的点 另一个将共享类似的Geohash 前缀

但是,因为给定的点可能 出现在给定Geohash的边缘 边界框,有必要 在中生成Geohash值的列表 以执行真正的接近 搜索一个点。因为 Geohash算法使用base-32 编号系统,可以 派生周围的Geohash值 使用 简单的查找表


请参阅:

为什么是9?您可以从覆盖感兴趣点的最小正方形开始,然后从那里展开。您必须获取的数字取决于该点周围的点密度。9(或者可能只有4)实际上已经假设您知道“缩放”保存足够数据且数据均匀分布的级别。如果不这样做,情况会更糟。问题是边界情况:如果查询p=(lat,lng)=(0.001,-0.001),并且在伦敦有100个poi,lng>0,而lng<0,则没有。您的查询点散列在(二进制)00*而你的数据是01*你会怎么做?是的,所以如果它靠近一个角落,你可能需要4个,但不是9个。我认为你的假设也非常乐观。:)