日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

微信lbs开发 php,【LBS】基于地理位置的搜索之微信 附近的人 简单实现

發布時間:2023/12/19 php 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信lbs开发 php,【LBS】基于地理位置的搜索之微信 附近的人 简单实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

緣由

本周技術群有一個同學說我們該怎么實現 由近到遠的基于地理位置的搜索,我創業做電商的系統做過類似這樣的服務,我把我們以前的操作給大家分享下

什么是LBS

LBS 全稱是 Location ?Based Service ,基于位置的服務。我們可以使用到這種服務,真是由于我國移動設備的大量增加,讓我們加速進入了 移動互聯網的時代。

由近到遠的基于地理位置的搜索 ?其實就是 通過當前使用用戶的經緯度,然后從我們自己的數據庫中查出指定范圍內(例如5km)的數據,按照由近到遠的順序 進行展示。

這句話中有四個條件

用戶的經緯度,我們定義 用戶維度為:$lat 、經度:$lng

指定范圍,定義范圍:distince

數據庫中商家的經緯度字段,定義 維度為:lat,經度:lng

計算 用戶經緯度 與 數據庫中商家的經緯度 距離,由遠及近進行排序

接下來,我們一起來用兩種方案實現

實現方案一:

這種方案會比較挫,

理想模型計算閥值點

計算某個經緯度的周圍某段距離的正方形的四個點

為什么這么計算,我給大家舉個例子,如果我們把我們的地球儀中國區域直接摁平,是不是地球儀就滅有弧度了 ,我們理想方式就是在一定距離上這么計算的。計算代碼如下

/**

*?php代碼

*計算某個經緯度的周圍某段距離的正方形的四個點

*@param?float?$lng??經度

*@param?float?$lat??緯度

*@param?float?$distance??該點所在圓的半徑,該圓與此正方形內切,默認值為5千米

*@return?array?正方形的四個點的經緯度坐標

*/

function?squarePoint($lat,?$lng,$distance?=?5.0){

$earth_radius?=?6371;//地球半徑

$dlng?=??2?*?asin(sin($distance?/?(2?*?$earth_radius))?/?cos(deg2rad($lat)));

$dlng?=?rad2deg($dlng);

$dlat?=?$distance/$earth_radius;

$dlat?=?rad2deg($dlat);

return?[

'left-top'????=>['lat'=>$lat?+?$dlat,?'lng'=>$lng?-?$dlng],

'right-top'???=>['lat'=>$lat?+?$dlat,?'lng'=>$lng?+?$dlng],

'left-bottom'?=>['lat'=>$lat?-?$dlat,?'lng'=>$lng?-?$dlng],

'right-bottom'=>['lat'=>$lat?-?$dlat,?'lng'=>$lng?+?$dlng],

];

}

取出用戶指定距離的數據

根據上面的方法,我們計算出來了4個點,接下來我們直接從數據庫取出符合條件的數據

$geo_data?=?squarePoint($lat,$lng,$distance);

$left_bottom?=??$geo_data['left-bottom'];

$right_top?=?$geo_data['right-top'];

$lat_min?=?$left_bottom['lat'];

$lat_max?=?$right_top['lat'];

$lng_min?=?$left_bottom['lng'];

$lng_max?=?$right_top['lng'];

$sql?=?"SELECT?*?FROM?table_name

WHERE?lat?>?{$lat_min}?lat??{$lng_min}?and?lng?

按照距離遠近排序

這個將 上面的符合條件的結果集取出來,在代碼中排序,計算 兩個經緯度之間距離的方法如下

/**

*

*?根據經緯度計算距離?單位(公里)

*?@param??$lng1 float?經度1

*?@param??$lat1 float?緯度2

*?@param??$lng2 float?經度1

*?@param??$lat2 float?緯度2

*?@return?float

*/

function?getdistance($lng1,$lat1,$lng2,$lat2)

{

$dx?=?$lng1?-?$lng2;?//?經度差值

$dy?=?$lat1?-?$lat2;?//?緯度差值

$b?=?($lat1?+?$lat2)?/?2.0;?//?平均緯度

$Lx?=?deg2rad($dx)?*?cos(deg2rad($b));?//?東西距離

$Ly?=?deg2rad($dy);?//?南北距離

return?round(6371*sqrt($Lx?*?$Lx?+?$Ly?*?$Ly),4);??//?用平面的矩形對角距離公式計算總距離

}

按照方法一計算出來,基本問題不大,但是在數據量大(第二步結果集)到一定程度了是有很嚴重的效率問題的。這里給出一個衍生版本,直接計算距離

SELECT?*,SQRT(?POWER(?$lat?-?lat,?2)?+?POWER($lng??-?lng,?2)?)?AS?d

FROM?table_name

WHERE?(lat?BETWEEN?$lat_min?AND?$lat_max?)?AND?(lng?BETWEEN?$lng_min?AND?$lng_max?)?AND?d?

ORDER?BY?d?ASC?LIMIT?10;

實現方案二

這個方法很快,直接可以SQL實現,由于數據庫本身也支持很多函數的,我們直接在數據庫本身計算就可以了。具體計算代碼如下:

/**

*?$lat:用戶維度

*?$lng:用戶精度

*?$as_name:查詢出來的SQL字段名稱

*/

get_distance_sql($lat,$lng,$as_name='distance')

{

return?sprintf('round(6371*sqrt(?pow((PI()*(abs(`lat`-%f))/180)?*?cos(PI()*(`lat`+%f)/360),2)

+?pow((PI()*abs(`lng`-%f)/180),2)),4)?as?%s',$lat,$lat,$lng,$as_name);

}

具體SQL如下:

/**

*?shop_id?商家id

*/

$sql?=?"SELECT?shop_id,lat,lng,".get_distance_sql(?$lat,$lng)."?FROM?table_name

WHERE?distance

這樣就可以直接查出結果并排序了

結論

以上兩種方案中,第二個是我我們當時使用的,我們當時數據庫幾十萬,效率還可以。上百萬乃至更高的需要大家去實現了

總結

以上是生活随笔為你收集整理的微信lbs开发 php,【LBS】基于地理位置的搜索之微信 附近的人 简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久九九视频 | 亚洲第一页在线 | 国产激情一区二区三区 | 少妇性xxxxxxxxx色武功 | 午夜老湿机 | 久久精品无码专区 | 亚洲第一福利视频 | 色哟哟在线 | 色av综合| 亚洲天堂免费 | 午夜视频福利 | 对白超刺激精彩粗话av | 中国老太婆性做爰 | 国产情侣在线视频 | 亚洲91久久 | 深夜影院在线观看 | 婷婷中文网 | 欧美囗交做爰视频 | 久久久久9| 国产不卡在线视频 | 国产真实乱在线更新 | 爱爱视频网站 | 免费污视频在线观看 | 天天爽天天爽 | 成人av一区二区三区在线观看 | 麻豆av一区| 97在线国产| 96免费视频 | 免费成人美女女 | 在线一区观看 | 国产精品2区 | 日本高清免费不卡视频 | 国产污污 | 欧美 亚洲 激情 一区 | 亚洲黄色一区二区三区 | 精品不卡在线 | 五月天色网站 | av观看网| 一区二区欧美精品 | 黄色二级毛片 | 国产精品国产三级国产aⅴ无密码 | 免费超碰在线 | 亚洲国产精品久久久久爰色欲 | 香蕉午夜视频 | 日本黄色一区二区三区 | 美女主播在线观看 | 欧美色图3p | 日韩欧美成人免费视频 | www日本视频 | 特级做a爰片毛片免费69 | 色噜噜狠狠一区二区 | 黄色a级网站 | 999国产在线 | 国产成人aⅴ | 国产网红在线 | 波多野结衣一区二区三区中文字幕 | 亚洲av综合色区无码另类小说 | 免费的黄色的视频 | 男人操女人免费视频 | 日韩毛片一级 | 国产99久久九九精品无码免费 | 青青青在线 | 黄色三级网站在线观看 | 性chinese天美传媒麻 | 毛片3 | 久久国产免费视频 | 蜜臀久久精品久久久用户群体 | 国产视频播放 | 中文字幕乱视频 | 国产一在线观看 | 日本不卡一区二区 | 黄色一级一级 | 韩国av三级 | 国产精品一区二区网站 | 日韩精品一区二区电影 | 黄色中文视频 | 特级特黄aaaa免费看 | 电影中文字幕 | 久久久久免费 | 久久综合激的五月天 | 欧美69久成人做爰视频 | 亚洲一区二区三区观看 | 91播放在线 | 精品无码成人久久久久久免费 | 日本黄a三级三级三级 | 午夜成人影视 | 一女二男一黄一片 | 久久精品国产精品亚洲毛片 | 日韩精品电影 | 成人h网站| 中文字幕无线码一区 | 浴室里强摁做开腿呻吟男男 | 精品无码久久久久 | 毛片视频免费 | 一区二区三区四区免费观看 | 日韩操| 青青草这里只有精品 | 亚洲精品视频一区二区 | 国产乱子伦视频一区二区三区 |