xianyunyh / geohash
ianyunyehe/geohash
1.0.0
2017-05-21 13:41 UTC
Requires
- php: ^5.3.3 || ^7.0
This package is auto-updated.
Last update: 2024-09-18 06:04:43 UTC
README
如今,与LBS相关的应用越来越受欢迎。从Foursquare的热度就可见一斑,更不用说微信和陌陌了(什么,没听过Foursquare...哥们,你落伍了)。与LBS有关的应用通常包括一些共同的操作,最常见的一个,就是查找附近的商家(餐厅、商店、美女...)。因此,这里就提出了一个问题,如何在大量经纬度数据中检索出附近的点呢?
geohash可以实现 @一个开发者
要求
- PHP >= 4
用法
require_once('geohash.class.php'); $geohash = new Geohash; //得到这点的hash值 $hash = $geohash->encode(39.98123848, 116.30683690); //取前缀,前缀约长范围越小 $prefix = substr($hash, 0, 6); //取出相邻八个区域 $neighbors = $geohash->neighbors($prefix); array_push($neighbors, $prefix); print_r($neighbors);
- 得到9个geohash值
//得到9个geohash值 Array ( [top] => wx4eqx [bottom] => wx4eqt [right] => wx4eqy [left] => wx4eqq [topleft] => wx4eqr [topright] => wx4eqz [bottomright] => wx4eqv [bottomleft] => wx4eqm [0] => wx4eqw )
- 范围如图
- 使用SQL语句查询
SELECT * FROM xy WHERE geohash LIKE 'wx4eqw%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqx%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqt%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqy%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqq%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqr%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqz%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqv%'; SELECT * FROM xy WHERE geohash LIKE 'wx4eqm%';
- 查看是否使用了索引(共有50多万行测试数据)
索引
数据
EXPLAIN SELECT * FROM xy WHERE geohash LIKE 'wx4eqw%';
其他资料: