xianyunyh/geohash

ianyunyehe/geohash

维护者

详细信息

github.com/xianyunyh/geohash

源代码

安装: 15

依赖: 0

建议: 0

安全性: 0

星标: 0

关注者: 2

分支: 109

1.0.0 2017-05-21 13:41 UTC

This package is auto-updated.

Last update: 2024-09-18 06:04:43 UTC


README

如今,与LBS相关的应用越来越受欢迎。从Foursquare的热度就可见一斑,更不用说微信和陌陌了(什么,没听过Foursquare...哥们,你落伍了)。与LBS有关的应用通常包括一些共同的操作,最常见的一个,就是查找附近的商家(餐厅、商店、美女...)。因此,这里就提出了一个问题,如何在大量经纬度数据中检索出附近的点呢?

geohash可以实现 @一个开发者

paypaldonate

要求

  • PHP >= 4

用法

  • 例如:用iPhone/Android手机定位得到理想国际大厦的经纬度:39.98123848, 116.30683690,然后查找附近的商家
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%';

其他资料: