LBS地理位置距離計算方法之geohash演算法

2021-09-18 02:45:15 字數 3975 閱讀 5248

隨著移動終端的普及,很多應用都基於lbs功能,附近的某某(餐館、銀行、妹紙等等)。

基礎資料中,一般儲存了目標位置的經緯度;利用使用者提供的經緯度,進行對比,從而獲得是否在附近。這裡需要在設定出乙個字段,是關於編碼的字段,一會看下文哈……

地理位置距離實現目標:

查詢附近多少公里內的人或者商家

geohash有以下幾個特點:

第一:geohash用乙個字串表示經度和緯度兩個座標。

(這裡插一句:我們的mysql為字段建立的索引,其實原理就是利用二分法演算法來做路徑查詢簡化,快速查詢出想要的字段位置)

第二:geohash表示的並不是乙個點,而是乙個矩形區域。比如編碼wx4g0ec19,它表示的是乙個矩形區域。

第三:編碼的字首可以表示更大的區域。

例如wx4g0ec1,它的字首wx4g0e表示包含編碼wx4g0ec1在內的更大範圍。 這個特性可以用於附近地點搜尋。首先根據使用者當前座標計算geohash(例如wx4g0ec1)然後取其字首進行查詢 (select * from place where geohash like 'wx4g0e%'),即可查詢附近的所有地點。

geohash比直接用經緯度的高效很多。

geohash的原理

geohash的最簡單的解釋就是:將乙個經緯度資訊,轉換成乙個可以排序,可以比較的字串編碼

geohash能做到:

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

2

3

4

5

6

7

8

9

10

11

12

13

14

//得到9個geohash值

array

(

[top] => wx4eqx

[bottom] => wx4eqt

[right] => wx4eqy

[left] => wx4eqq

[topleft] => wx4eqr

[topright] => wx4eqz

[bottomright] => wx4eqv

[bottomleft] => wx4eqm

[0] => wx4eqw

)

其他資料:

- geohash演示: 

- wiki: 

- 原理: 

隨著移動終端的普及,很多應用都基於lbs功能,附近的某某(餐館、銀行、妹紙等等)。

基礎資料中,一般儲存了目標位置的經緯度;利用使用者提供的經緯度,進行對比,從而獲得是否在附近。這裡需要在設定出乙個字段,是關於編碼的字段,一會看下文哈……

地理位置距離實現目標:

查詢附近多少公里內的人或者商家

geohash有以下幾個特點:

第一:geohash用乙個字串表示經度和緯度兩個座標。

(這裡插一句:我們的mysql為字段建立的索引,其實原理就是利用二分法演算法來做路徑查詢簡化,快速查詢出想要的字段位置)

第二:geohash表示的並不是乙個點,而是乙個矩形區域。比如編碼wx4g0ec19,它表示的是乙個矩形區域。

第三:編碼的字首可以表示更大的區域。

例如wx4g0ec1,它的字首wx4g0e表示包含編碼wx4g0ec1在內的更大範圍。 這個特性可以用於附近地點搜尋。首先根據使用者當前座標計算geohash(例如wx4g0ec1)然後取其字首進行查詢 (select * from place where geohash like 'wx4g0e%'),即可查詢附近的所有地點。

geohash比直接用經緯度的高效很多。

geohash的原理

geohash的最簡單的解釋就是:將乙個經緯度資訊,轉換成乙個可以排序,可以比較的字串編碼

geohash能做到:

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

2

3

4

5

6

7

8

9

10

11

12

13

14

//得到9個geohash值

array

(

[top] => wx4eqx

[bottom] => wx4eqt

[right] => wx4eqy

[left] => wx4eqq

[topleft] => wx4eqr

[topright] => wx4eqz

[bottomright] => wx4eqv

[bottomleft] => wx4eqm

[0] => wx4eqw

)

其他資料:

- geohash演示: 

- wiki: 

- 原理: 

地理位置geo處理之mongodb geo 索引

title 地理位置geo處理之mongodb geo 索引 date 2017 12 01 10 34 category 方案 目前越來越多的業務都會基於lbs,附近的人,外賣位置,附近商家等等,現就討論離我最近這一業務場景的解決方案。目前已知解決方案有 本文測試下mongodb geo索引 函式...

基於LBS的地理位置附近的搜尋以及由近及遠的排序

from nosql學習之redis資料 一 目前基於lbs地理位置的搜尋已經應用非常廣了,的確是個很方便的東西。我們做程式的就是要考慮如何通過這些功能,來做出更符合使用者的內容來。在網頁端,可以使用html5獲取地理定位。檢視 資料庫中要預存自己的位置資料,如何獲取資料請檢視相關地圖api。字段 ...

常見距離計算方法

不能直接走兩點連線的直線,紅 藍 黃距離一樣長 西洋棋中,國王走一步可以移動到相鄰8個方格中的任意乙個,如下圖。a到b的距離為紅色線,需要走4步,和綠色線距離是相同的。閔氏距離不是一種距離,而是一組距離的定義,是對多個距離度量公式的概括性的表述。兩個n維變數a x11,x12,x1n 與b x21,...