LBS應用之 根據一點的經緯度實現附近點的查詢

2022-08-05 18:36:16 字數 3090 閱讀 4784

這年頭和lbs相關的應用越來越火。從foursquare的熱鬧程度就可見一般(什麼,沒聽過 foursquare…. 哥們,你 out 了)。和 lbs有關的應用一般都包括一些共同的操作,最常見的一個,就是找附近的東東(餐館, 商店, 妞…)。 所以, 這裡就丟擲了一個問題, 怎樣才能知道兩個物體離得近呢?

例如:用iphone/android手機定位得到理想國際大廈的經緯度:39.98123848, 116.30683690然後查詢附近的妞根據一點的經緯度實現附近點的查詢" title="在sae上開發lbs應用之 根據一點的經緯度實現附近點的查詢">

<?php

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);

?>

得到9geohash值:

array

(

[top] => wx4eqx

[bottom] => wx4eqt

[right] => wx4eqy

[left] => wx4eqq

[topleft] => wx4eqr

[topright] => wx4eqz

[bottomright] => wx4eqv

[bottomleft] => wx4eqm

[0] => wx4eqw

)

範圍如圖:

用sql語句查詢:

select*fromxywheregeohashlike'wx4eqw%';

select*fromxywheregeohashlike'wx4eqx%';

select*fromxywheregeohashlike'wx4eqt%';

select*fromxywheregeohashlike'wx4eqy%';

select*fromxywheregeohashlike'wx4eqq%';

select*fromxywheregeohashlike'wx4eqr%';

select*fromxywheregeohashlike'wx4eqz%';

select*fromxywheregeohashlike'wx4eqv%';

select*fromxywheregeohashlike'wx4eqm%';

看一下是否用上索引(一共有50多萬行測試資料):

根據一點的經緯度實現附近點的查詢">

資料:·      geohash演示:  

·      wiki:

·      原理: