geohash字符串长度和准确性

时间:2012-11-19 06:17:00

标签: geohashing

如果geohash字符串的长度更长,则更准确。但有没有直接的关系,如果长度为7则提供100米精度,

即。如果两个geohash(和它们的任何一个边界框)有前7个字符匹配,那么它们都应该接近100米等?

我正在使用geohash查找给定geohash的所有附近位置及其距离

还有任何直接计算两个地理哈希之间的距离? (一种方法是将它们解码为lat / lng,然后计算距离)

由于

5 个答案:

答案 0 :(得分:14)

在geohashing方面看到了很多混乱,所以我到目前为止发表了我的理解。 geohash背后的原理非常简单,您可以创建自己的版本。 例如,考虑遵循地理点,

  

156.34234534,-23.343423345

在上面的例子中,156表示度数,decmal(34)表示后的2位数 小数分钟和休息,(34.5334)表示秒。

如果你还记得学校地理位置赤道地球的周长约为40,000公里, 地球周围的度数(纬度或经度)是360.因此最宽 指出每个纬度和经度跨度等于大约110公里(40,000 / 360)。

因此,如果您将上述坐标编码为" 156-23" (包括负号),这将给你(110kmx110km)的盒子。

你可以继续增加精度, 分钟的拳头数(156.3-23.3)将给你(10kmx10km)盒子(每分钟跨度等于1km)。

增加此值以包括第二个你得到的第二位数字(100mx100m), 每个额外的数字将增加精度到另一个程度。 Geohashing只是以编码形式表示上图的方式。您也可以愉快地使用上述格式!

答案 1 :(得分:13)

我自己很好奇。 如果对任何人有任何好处,我会将电子表格here放在一起 不是100%肯定它的权利 - 如果您发现问题,请随时发表评论。

通过下图来判断,使用6到10位数字可以在60度纬度时提供~1km到~1m的精度。 enter image description here

答案 2 :(得分:4)

以下是长度为n个字符的geohash的高度和宽度(以度为单位)的公式:

首先定义此功能:

如果n为0则奇偶校验(n)= 0

然后

身高= 180/2 (5n-parity(n))/ 2

宽度= 180/2 (5n + parity(n)-2)/ 2

请注意,这是仅以度为单位的高度和宽度。要将其转换为米,需要知道哈希值在地球上的哪个位置。

java中的代码是http://github.com/davidmoten/geo

答案 3 :(得分:2)

  

还有任何直接计算两个地理哈希之间的距离? (一种方法是将它们解码为lat / lng,然后计算距离)

这就是你应该做的。将geohash视为纬度和经度的另一种表示,因为一对打印的十进制数字也是如此。如果我给你一双lat& lon字符串,您可以将它们解析为数字(使用您选择的编程语言),然后进行数学运算。与地理位置没什么不同 - 解码到lat&然后做数学。

在尝试根据一对点之间的公共前缀长度推断亲密度时,要非常小心。如果有一个很长的公共前缀,那么它们很接近,但反之则不正确! - 即没有共同前缀的两个点可以相隔一毫米。

答案 4 :(得分:2)

这是一个方程式(伪代码),它可以近似具有一定精度的纬度/经度对的最佳Geohash长度:

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守护程序收到的数据创建最佳Geohash,它还通过epxepy值提供精确信息。