首頁 >後端開發 >php教程 >根據經緯度查詢附近地點資訊

根據經緯度查詢附近地點資訊

WBOY
WBOY原創
2016-10-22 00:14:222573瀏覽

現在有這樣的需求,我要根據當前地點的經緯度,在數據表中查詢附近兩公里的五個地點,如果查詢的結果沒有五個地點我要擴大附近的範圍,直到查詢到五個地點位置。我想到了兩個方案:

第一種方案是完全用sql語句實現,如果完全用sql語句實現,我不知道這個sql怎麼寫,

第二種方案是先查詢,然後在業務成進行判斷,如果不滿足5個地點,在進行擴大附近範圍,再次在數據庫裡查詢,直到查詢到5個地點。

我不知道這兩種方案那個效率高,請大家給點建議。感激不盡。

回覆內容:

現在有這樣的需求,我要根據當前地點的經緯度,在數據表中查詢附近兩公里的五個地點,如果查詢的結果沒有五個地點我要擴大附近的範圍,直到查詢到五個地點位置。我想到了兩個方案:

第一種方案是完全用sql語句實現,如果完全用sql語句實現,我不知道這個sql怎麼寫,

第二種方案是先查詢,然後在業務成進行判斷,如果不滿足5個地點,在進行擴大附近範圍,再次在數據庫裡查詢,直到查詢到5個地點。

我不知道這兩種方案那個效率高,請大家給點建議。感激不盡。

完全看不懂你兩種方案。

你就不能先簡化你的邏輯嗎?

你的要求不就是等於:查詢最近的五個地點。 為什麼還要分兩公里內還是兩公里外。

如果查詢最近的五個點,那為什麼還要考慮什麼業務判斷呢,直接SQL一個Limit不就行了嗎?

第二種方案可行,完全用sql去實現,對資料庫的壓力較大,資料層和業務層分開執行效率要高

你需要高德LBS雲,他會滿足你的需求的

試下mysql的空間座標資料庫,

<code>CREATE TABLE `spa` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  `loc` point DEFAULT NULL,
    /*  ^---------------------------------- 保存经纬度  */
  PRIMARY KEY (`id`)
)</code>
<code>/* 查询 */
SELECT * FROM spa WHERE DISTANCE(POINT($当前经度, $当前纬度), loc) < ($距离(单位米) / 111195) LIMIT 5;
/*                      ^-----单位为度                                                ^---1度多少米  */</code>

如果要排序, 可以把distance order一下.

你需要使用GEOHASH將二維座標變成字串,然後再比較

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn