地理散列串长度和准确性(geohash string length and accuracy)

如果地理散列串的长度越多,它更准确。 但有一样,如果长度为7它将提供百米精度任何直接的关系,

即如果两个地理散列(和它们的任一边界框)的具有第一7字符匹配,都应该接近百米等?

我使用的地理散列查找,所有近的位置给定的地理散列,与他们的距离

同时,任何directway计算两个地理散列之间的距离? (一种方式是对它们进行解码,以纬度/经度,然后计算距离)

谢谢

Answer 1:

看到了很多混乱的周围geohashing所以我张贴我的理解为止。 背后地理散列原理很简单,你可以创建自己的版本。 例如考虑以下地理点,

156.34234534,-23.343423345

在上述例子中,156表示度,DECMAL(34)后2位数字表示小数分钟和休息,(34.5334)代表秒。

如果你还记得在地球赤道的中学地理周长约40,000kms和,绕地球(纬度经度或)度号是360。所以在最宽点的经度和纬度跨度的每度约等于110kms(40,000 / 360 )。

所以,如果你编码上述坐标,“156-23”(包括负值),这会给你(110kmx110km)框。

你可以去和提高精度,分(156.3-23.3)的拳数字会给你(10kmx10km)箱(每分钟跨度等于1公里)。

增加这包括第二你(100mx100m)对话框的第一个数字,每一个额外的数字将增加精度在另一种程度。 Geohashing只是代表编码形式上图中的方式。 您可以愉快地使用上述格式以及!



Answer 2:

很好奇这个自己。 如果其任何好处任何人,我把一个电子表格这里不是100%肯定其右-随时,如果你发现一个问题发表评论。

通过下面的图来看,使用6至10位数给出精度〜1公里到〜1米在60度纬度。 在这里输入图像描述



Answer 3:

下面是在度的长度为n个字符的地理散列的高度和宽度的公式:

首先定义这个函数:

奇偶校验(N)= 0,如果n是偶数,否则1

然后

高度= 180/2(5N奇偶校验(N))/ 2

宽度= 180/2(5N +奇偶校验(N)-2)/ 2

请注意,这是唯一度的高度和宽度。 将其转换为米,您需要知道地球上的哈希。

在Java代码,这是在http://github.com/davidmoten/geo



Answer 4:

同时,任何directway计算两个地理散列之间的距离? (一种方式是对它们进行解码,以纬度/经度,然后计算距离)

这是你应该做的。 所述地理散列看作一个纬度的只是另一个表示和经度作为一对印刷十进制数的同样。 如果我给你一对纬度和经度的字符串,你把它解析为数字(在您选择的编程语言),然后做数学题。 这是一个与geohashes没有什么不同 - 解码以纬度和经度,然后做数学题。

要非常小心,你正试图与基于对点之间的共同前缀的长度推断亲近做任何推理。 如果还有很长的共同的前缀,那么他们接近, 但反之则不然 ! - 即两个点没有共同的前缀可能是相隔毫米。



Answer 5:

下面是可以逼近最优地理散列长度具有一定精度的纬度/经度对的方程(在伪代码):

geohash_length = FLOOR ( LOG_2(5000000/precision_in_meters) / 2,5 + 1 )
if geohash_length > 12 then geohash_length = 12
if geohash_length < 1 then geohash_length = 1

我用它来创建从由所接收的数据的最佳地理散列gpsd守护程序,其也经由提供精度信息epxepy值。



标签