- 编码经纬度为Geohash:输入纬度(-90到90)和经度(-180到180),选择精度级别(1-12),Geohash会自动生成。
- 解码Geohash为坐标:切换到「解码」标签页,粘贴Geohash字符串,即可看到对应的经纬度和地图位置。
- 调整精度控制准确性:精度1覆盖约5000公里,精度6覆盖约1.2公里,精度9覆盖约5米,精度12覆盖约3.7厘米。
- 启用「显示相邻区域」可视化所有8个相邻的Geohash单元格——这对实现邻近搜索至关重要。
- 点击Geohash可复制到剪贴板,方便在代码、数据库查询或API调用中使用。
什么是Geohash?它是如何工作的?
Geohash是一种分层空间索引系统,将世界划分为网格单元。它使用base32编码将经纬度编码为单个字母数字字符串。每增加一个字符,就将单元格细分为32个更小的单元格,从而提高精度。例如,'u4pruydqqvj'精确定位一个特定位置,而'u4pru'则表示包含该点的更大区域。
不同长度的Geohash精度是多少?
Geohash精度随字符串长度变化:1字符≈5000km×5000km,2字符≈1250km×625km,3字符≈156km×156km,4字符≈39km×19.5km,5字符≈4.9km×4.9km,6字符≈1.2km×0.6km,7字符≈153m×153m,8字符≈38m×19m,9字符≈4.8m×4.8m,10字符≈1.2m×0.6m,11字符≈15cm×15cm,12字符≈3.7cm×1.8cm。
为什么使用Geohash而不是分别存储经纬度?
Geohash有几个关键优势:(1) 单字符串存储——更容易在数据库中建立索引;(2) 基于前缀的邻近性——附近位置共享相同前缀,可实现快速范围查询;(3) 分层精度——截断字符串即可降低精度,无需重新计算;(4) URL安全——可直接用于URL和API。它是Redis、MongoDB、Elasticsearch等数据库和众多位置服务的空间索引标准。
如何使用Geohash进行邻近/附近搜索?
进行邻近搜索时,需要查询目标Geohash及其8个相邻区域。这确保即使在单元格边界处也能捕获所有附近的点。我们工具的「显示相邻区域」功能可以可视化这些相邻单元格。在Redis中使用GEOSEARCH命令;在MongoDB中使用带geohash索引的$geoNear;在Elasticsearch中使用geo_bounding_box查询。
Geohash有什么局限性?
Geohash有一些边界情况:(1) 边缘效应——相邻的点在单元格边界处可能有完全不同的geohash;(2) 非均匀单元格——单元格是矩形而非正方形,随纬度变化;(3) 不适合精确距离计算——应使用Haversine公式计算精确距离。尽管如此,geohash仍然是空间索引和邻近搜索最高效的方法。
如何在不同编程语言中实现Geohash?
大多数语言都有geohash库:JavaScript(ngeohash、latlon-geohash)、Python(python-geohash、pygeohash)、Java(geohash-java)、Go(go-geohash)、Ruby(geohash gem)。数据库方面:Redis内置GEOADD/GEOHASH命令,MongoDB支持geohash索引,PostgreSQL有PostGIS扩展,Elasticsearch原生支持带geohash的geo_point类型。
如何将Geohash解码为经纬度坐标?
使用我们的Geohash解码功能非常简单:(1) 切换到「解码」标签页;(2) 在输入框中粘贴Geohash字符串(如'wx4g0s');(3) 点击「解码」按钮,即可获得对应的经纬度坐标;(4) 地图会自动定位到该位置并显示覆盖区域。解码结果会显示中心点坐标以及该Geohash覆盖的边界范围。
Geohash在线地图可视化有什么用途?
Geohash地图可视化功能可以帮助你:(1) 直观理解Geohash覆盖的地理区域大小;(2) 验证编码结果是否正确;(3) 查看不同精度级别的区域差异;(4) 显示8个相邻区域,用于规划邻近搜索策略;(5) 通过点击地图直接获取任意位置的Geohash。这对于开发基于位置的应用和调试空间查询非常有用。