要解決的問題:
2.獲取到地理位置後,記錄使用者的座標
3.計算出當前的使用者座標和資料表裡商戶的座標的距離
4.距離排序與距離的使用者體驗顯示
好吧,現在我們開始具體的細節問題解決
通過這種方式,我們的服務端接收到的資訊格式是這樣的
<可以看到其中有元素latitude和longitude,獲取到了座標就好說啦xml>
<
tousername
>
gh_f6bce85ce621
]]>
tousername
>
<
fromusername
>
obxlljpchqwixh0mazyr1esewv3y
]]>
fromusername
>
<
createtime
>1460636400
createtime
>
<
msgtype
>
event
]]>
msgtype
>
<
event
>
location
]]>
event
>
<
latitude
>30.660822
latitude
>
<
longitude
>104.066566
longitude
>
<
precision
>65.000000
precision
>
xml>
什麼是js-sdk呢?
這種方式獲取到使用者座標是基於網頁的形式獲得的,所以使用者的地理位置座標需要通過非同步的模式儲存到你自己的系統中
這個是通過js-sdk的部分**
wx.getlocation(2.獲取到地理位置後,記錄使用者的座標使用者的座標獲取到後,自行記錄到你的系統裡,通過快取也好,session也好,cookie也好,還是資料表也好隨便你})
3.計算出當前的使用者座標和資料表裡商戶的座標的距離
我們目前來個假設乙個獲取到座標
例如我的座標是:30.664385188806,104.07559730274
表名:merchants
表字段:itemid,title,hits,lat,lng lat是經度 lat是緯度
通過sql語句的運算把距離和排序一次性解決。
mysql函式計算座標距離
其中30.664385188806是你的經度,104.07559730274是你的緯度
以下sql語句是全部查詢並運算出座標的的語句
select itemid,title,hits,telephone,round(6378.138*2*asin(sqrt(pow(sin((30.664385188806*pi()/180-lat*pi()/180)/2),2)+cos(30.664385188806*pi()/180)*cos(lat*pi()/180)*pow(sin((104.07559730274*pi()/180-lng*pi()/180)/2),2)))*1000) as distance from merchants order by distance通過如下方式的sql執行就可查詢出相應的距離+排序+多少公里範圍的條件檢索
下面的檢索出5公里範圍的語句
select * from (select itemid,title,hits,telephone, round(6378.138*2*asin(sqrt(pow(sin((30.664385188806*pi()/180-lat*pi()/180)/2),2)+cos(30.664385188806*pi()/180)*cos(lat*pi()/180)*pow(sin((104.07559730274*pi()/180-lng*pi()/180)/2),2)))*1000) as distance from merchants order by distance ) as a where a.distance<=5000查詢結果見下圖
4.距離排序與距離的使用者體驗顯示
查詢計算出的distance是數字,需要顯示的使用者體驗更好一點
例如:我和這個商家的精確距離是1290公尺,因為精度的原因,其實精確距離其實偏差非常大,不能顯示乙個具體的數字 ,所以要優化顯示為1.3公里或者1.5公里內的模式更好
我自用的方法是這樣的
a方式
//輸入distance,然後對數字做優化顯示
function mtokm($number)
if($v
<100)
else
return
$v;
}
b方式
function distancedesc($number) if($number
<=300)
else
return
$distance
; }
基於微信地理位置的附近商家距離座標資料查詢方法
這陣子我剛好有一點時間,特意寫了一篇文件分享這方面的東西。要解決的問題 2.獲取到地理位置後,記錄使用者的座標 3.計算出當前的使用者座標和資料表裡商戶的座標的距離 4.距離排序與距離的使用者體驗顯示 好吧,現在我們開始具體的細節問題解決 通過這種方式,我們的服務端接收到的資訊格式是這樣的 xml ...
elasticsearch基於地理位置的搜尋
參考 elasticsearch基於地理位置的搜尋,有乙個專門的物件geo point儲存地理位置資訊 經度,緯度 並且提供了一些基本的查詢方法,如geo bounding box。put my geo name 建立了乙個my geo索引,新增了乙個欄位location,它的型別是geo poin...
微信小程式API 地理位置location
屬性 型別預設值 必填說明 latitude number 是緯度,範圍為 90 90,負數表示南緯。使用 gcj02 國測局座標系 longitude number 是經度,範圍為 180 180,負數表示西經。使用 gcj02 國測局座標系 scale number18否 縮放比例,範圍5 18...