geohash經(jīng)緯度地址編碼
geohash是一種地址編碼,它能把二維的經(jīng)緯度編碼成一維的字符串。
特點(diǎn):
首先,geohash用一個(gè)字符串表示經(jīng)度和緯度兩個(gè)坐標(biāo)。某些情況下無法在兩列上同時(shí)應(yīng)用索引 (例如MySQL 4之前的版本,Google App Engine的數(shù)據(jù)層等),利用geohash,只需在一列上應(yīng)用索引即可。
其次,geohash表示的并不是一個(gè)點(diǎn),而是一個(gè)矩形區(qū)域。比如編碼wx4g0ec19,它表示的是一個(gè)矩形區(qū)域。 使用者可以發(fā)布地址編碼,既能表明自己位于北海公園附近,又不至于暴露自己的精確坐標(biāo),有助于隱私保護(hù)。
第三,編碼的前綴可以表示更大的區(qū)域。例如wx4g0ec1,它的前綴wx4g0e表示包含編碼wx4g0ec1在內(nèi)的更大范圍。 這個(gè)特性可以用于附近地點(diǎn)搜索。首先根據(jù)用戶當(dāng)前坐標(biāo)計(jì)算geohash(例如wx4g0ec1)然后取其前綴進(jìn)行查詢 (SELECT * FROM place WHERE geohash LIKE 'wx4g0e%'),即可查詢附近的所有地點(diǎn)。Geohash比直接用經(jīng)緯度的高效很多。
用途:
移動(dòng)互聯(lián)網(wǎng),lbs可以說是一個(gè)基礎(chǔ)應(yīng)用,geohash對(duì)于解決附近地點(diǎn)搜索提供了一個(gè)有效的解決方案。
擴(kuò)展:
這個(gè)php擴(kuò)展,提供了三個(gè)函數(shù):
/** * $latitude //緯度 * $longitude //經(jīng)度 * $precision //精密度, 默認(rèn)是12 * 返回 $precision 長(zhǎng)度的 string */ geohash_encode($latitude, $longitude, $precision=12); /** * $hash //geohash_encode后的值 * 返回 array // Array * ( * [latitude] => 39.416916975752 * [longitude] => 100.92223992571 * [north] => 39.416917059571 * [east] => 100.92224009335 * [south] => 100.92223992571 * [west] => 100.92223975807 * ) */ geohash_decode($hash); /** * $hash //geohash_encode后的值 * 返回 在$hash 8個(gè) (東南西北各二個(gè))附近的hash值 */ geohash_neighbors($hash);
