亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP,Mysql-根據一個給定經緯度的點,進行附近地點查詢

2019-11-06 07:57:55
字體:
來源:轉載
供稿:網友
目前的工作是需要對用戶的一些數據進行分析,每個用戶都有若干條記錄,每條記錄中有用戶的一個位置,是用經度和緯度表示的。還有一個給定的數據庫,存儲的是一些已知地點以及他們的經緯度,內有43W多條的數據。現在需要拿用戶的經緯度和已知地點進行距離匹配,如果它們之間的距離小于一定的數據,比如說500米,就認為用戶是在這個地點。MySQL本身是支持空間索引的,但是在5.x的版本中,取消了對Distance()和Related()的支持,參考這里:MySQL 5.1參考手冊 :: 19. 中的空間擴展 19.5.6. 測試幾何類之間空間關系的函數,無法使用空間的距離函數去直接去查詢距離在一定范圍內的點。所以,我首先想到的是,對每條記錄,去進行遍歷,跟數據庫中的每一個點進行距離計算,當距離小于500米時,認為匹配。這樣做確實能夠得到結果,但是效率極其低下,因為每條記錄都要去循環匹配40W條數據,其消耗的時間可想而知。經過記錄,發現每條記錄處理的時間消耗達到1700ms,針對每天上億的數據量,這樣一個處理速度,讓人情何以堪啊。。。我自己也有個想法,就是找到每條記錄所在點的經緯度周圍的一個大概范圍,比方說正方形的四個點,然后使用mysql的空間計算,使用MBR去得出點在這個矩形內的已知記錄,然后進行匹配。可惜,自己沒想出能計算到四個點經緯度的方法。意外的,查詢到了一個關于這個計算附近地點搜索初探,里面使用python實現了這個想法。所以參考了一下原文中的算法,使用php進行了實現。實現原理也是很相似的,先算出該點周圍的矩形的四個點,然后使用經緯度去直接匹配數據庫中的記錄。

參考wiki百科上的一些球面計算公式:

Great-circle distanceHaversine formula

假設已知點的經緯度分別為$lng, $lat先實現經度范圍的查詢,在haversin公式中令φ1 = φ2,可得:

用PHP進行計算,就是:

//$lat 已知點的緯度$dlng =  2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));$dlng = rad2deg($dlng);//轉換弧度然后是緯度范圍的查詢,在haversin公式中令 Δλ = 0,可得

在PHP中進行計算,就是:

$dlat = $distance/EARTH_RADIUS;//EARTH_RADIUS地球半徑$dlat = rad2deg($dlat);//轉換弧度最后,就可以得出四個點的坐標:left-top : (lat + dlat, lng – dlng)right-top : (lat + dlat, lng + dlng)left-bottom : (lat – dlat, lng – dlng)right-bottom: (lat – dlat, lng + dlng)我把以上方法寫成了一個函數,綜合起來就是:

define(EARTH_RADIUS, 6371);//地球半徑,平均半徑為6371km /** *計算某個經緯度的周圍某段距離的正方形的四個點 * *@param lng float 經度 *@param lat float 緯度 *@param distance float 該點所在圓的半徑,該圓與此正方形內切,默認值為0.5千米 *@return array 正方形的四個點的經緯度坐標 */ function returnSquarePoint($lng, $lat,$distance = 0.5){     $dlng =  2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));    $dlng = rad2deg($dlng);         $dlat = $distance/EARTH_RADIUS;    $dlat = rad2deg($dlat);         return array(                'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),                'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),                'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),                'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)                ); }//使用此函數計算得到結果后,帶入sql查詢。$squares = returnSquarePoint($lng, $lat);$info_sql = "select id,locateinfo,lat,lng from `lbs_info` where lat<>0 and lat>{$squares['right-bottom']['lat']} and lat<{$squares['left-top']['lat']} and lng>{$squares['left-top']['lng']} and lng<{$squares['right-bottom']['lng']} "; 在lat和lng上建立一個聯合索引后,使用此項查詢,每條記錄的查詢消耗平均為0.8毫秒,相比以前的1700ms,真的是天壤之別啊。效率真真的是以前的2125倍~~總結:這應該也不是效率最好的辦法,但是效率比以前確實有明顯的提升。請記住,總有辦法更好的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费自拍视频| 欧美成人在线免费视频| 欧美亚洲在线播放| 亚洲欧美日韩天堂| 欧美成人亚洲成人日韩成人| 成人黄色在线免费| 欧美猛交ⅹxxx乱大交视频| 九九九热精品免费视频观看网站| 国产精品视频不卡| 亚洲成人教育av| 日韩精品一二三四区| 国产亚洲欧美日韩精品| 日韩人体视频一二区| 国产91免费看片| 欧美日韩精品中文字幕| 久久久久久久久久久人体| 精品亚洲一区二区三区在线播放| 日韩av电影在线播放| 亚洲美女激情视频| 欧美激情一级精品国产| 欧美亚洲一级片| 欧美成人免费全部观看天天性色| 亚洲国产精品va在线| 国产人妖伪娘一区91| 色偷偷av一区二区三区乱| 国产视频综合在线| 久久精品国产亚洲一区二区| 永久免费毛片在线播放不卡| 久久视频国产精品免费视频在线| 成人高清视频观看www| 91在线观看免费| 91久久在线播放| 91sao在线观看国产| 91精品国产乱码久久久久久久久| 亚洲精品永久免费精品| 日韩精品视频在线观看免费| 亚洲视频在线视频| 欧美精品中文字幕一区| 欧美精品www| 最近中文字幕mv在线一区二区三区四区| 欧美日韩亚洲精品内裤| 国产精品美女999| 日韩精品视频中文在线观看| 亚洲网址你懂得| 国产午夜精品一区理论片飘花| 美女性感视频久久久| 亚洲一区二区久久| 欧美成人全部免费| 亚洲一级黄色av| 欧美成人黄色小视频| 91精品国产沙发| 中文字幕在线亚洲| 国产一区二区欧美日韩| 成人激情视频网| 91成品人片a无限观看| 欧美在线视频网| 欧美成人一区二区三区电影| 亚洲国产精品资源| 日韩av综合网站| 久久久久成人网| 亚洲欧美国产一本综合首页| 欧美专区在线视频| 国产美女搞久久| 欧美日韩国产在线看| 国产精品一二三视频| 在线视频国产日韩| 中文日韩电影网站| y97精品国产97久久久久久| 精品视频在线观看日韩| 欧美亚洲国产日韩2020| 中文字幕国产精品久久| 国产在线精品成人一区二区三区| 欧美性猛交xxxx免费看漫画| 色中色综合影院手机版在线观看| 久久久久久久97| 亚洲成人黄色在线观看| 丝袜亚洲欧美日韩综合| 日韩国产中文字幕| 精品国内自产拍在线观看| 性金发美女69hd大尺寸| 亚洲男人天天操| 韩曰欧美视频免费观看| 欧美夫妻性生活视频| 一区二区中文字幕| 国产精品久久久| 亚洲精品v欧美精品v日韩精品| 美女av一区二区三区| 亚洲色图在线观看| 日韩国产精品一区| 亚洲国产又黄又爽女人高潮的| 成人精品一区二区三区电影免费| 久久久天堂国产精品女人| 日本精品一区二区三区在线播放视频| 久久久久久一区二区三区| 亚洲欧美制服第一页| 精品久久久久久久大神国产| 成人午夜在线视频一区| 国产精品视频xxx| 日韩欧美国产激情| 欧美一级bbbbb性bbbb喷潮片| 亚洲跨种族黑人xxx| 日韩欧美大尺度| 久久6精品影院| 久99久在线视频| 7777精品久久久久久| 久久亚洲精品小早川怜子66| 欧美精品videosex性欧美| 日韩在线视频中文字幕| 亚洲视频在线观看| 91精品国产综合久久男男| 91视频国产一区| 欧美日韩第一页| 亚洲精品成人久久久| 成人免费看片视频| 成人免费在线视频网站| 亚洲一区美女视频在线观看免费| 成人a在线观看| 影音先锋欧美精品| 欧美中文字幕在线视频| 一个人看的www久久| 亚洲高清免费观看高清完整版| 欧美大尺度激情区在线播放| 中文字幕一区二区精品| 欧美性猛交xxxx黑人| 国产精品视频网站| 亚洲国产精品yw在线观看| 亚洲美女av在线播放| 国产精品日韩欧美综合| 2019日本中文字幕| 欧美xxxwww| 国产亚洲精品日韩| 欧美精品在线免费播放| 7m第一福利500精品视频| 97视频在线观看免费高清完整版在线观看| 欧美激情啊啊啊| 亚洲欧美国产视频| 日韩在线播放av| 亚洲全黄一级网站| 久久不射热爱视频精品| 中日韩美女免费视频网址在线观看| 俺去亚洲欧洲欧美日韩| 国产精品视频专区| 91久久久久久久久| 国产丝袜一区二区三区| 日韩一区二区精品视频| 欧美裸体视频网站| 久久青草福利网站| 精品色蜜蜜精品视频在线观看| 国产+成+人+亚洲欧洲| 久久免费少妇高潮久久精品99| 动漫精品一区二区| 国产精品一区二区女厕厕| 69av成年福利视频| 国产精品18久久久久久麻辣| 久久影院中文字幕| 中文日韩在线观看| 136fldh精品导航福利| 国产精品99一区| 精品亚洲国产视频| 日韩精品一二三四区| 色噜噜狠狠狠综合曰曰曰| 亚洲黄页视频免费观看| 欧美日韩另类在线| 久久久国产精品视频|