微信開發之附近商家地理位置計算和騰訊地圖座標轉百度地圖座標的方法數組
騰訊地圖座標轉百度座標微信
案例:本次開發的系統是一個商家聯盟積分系統。在全國各地都有商家聯盟的網點。微信開發
要求實現的功能函數
a.微信粉絲經過微信號就能查看附近的商家網站
b.個人聯盟系通通計在2千米以內的商家網點spa
c.並標出商家和粉絲位置的距離是多少米。code
d.在商家的詳細介紹頁面設置百度地圖接入步行、公交、駕車一鍵導航功能blog
那麼如今問題來了:接口
問題1:在作微信O2O開發的過程當中,經過微信地理位置功能事件得到的是騰訊地圖座標。而咱們的導航地圖座標是百度的地圖API接口?事件
問題2:騰訊的地圖座標和邊度的座標計量方式是不一樣的計量方式,如何轉換?
谷歌地圖,高德地圖,騰訊地圖用的GCJ-02座標提醒
百度地圖用的BD-09座標體系
問題3:兩點座標的距離如何計算?
程序代碼見下,我已經作了函數處理和註釋提醒,能夠直接拿去用了
/** * 騰訊地圖座標轉百度地圖座標 * @param [String] $lat 騰訊地圖座標的緯度 * @param [String] $lng 騰訊地圖座標的經度 * @return [Array] 返回記錄緯度經度的數組 */ function Convert_GCJ02_To_BD09($lat,$lng){ $x_pi = 3.14159265358979324 * 3000.0 / 180.0; $x = $lng; $y = $lat; $z =sqrt($x * $x + $y * $y) + 0.00002 * sin($y * $x_pi); $theta = atan2($y, $x) + 0.000003 * cos($x * $x_pi); $lng = $z * cos($theta) + 0.0065; $lat = $z * sin($theta) + 0.006; return array('lng'=>$lng,'lat'=>$lat); } //百度地圖座標計算 function rad($d) { return $d * 3.1415926535898 / 180.0; } /** * 騰訊地圖座標轉百度地圖座標 * @param [String] $lat1 A點的緯度 * @param [String] $lng1 A點的經度 * @param [String] $lat2 B點的緯度 * @param [String] $lng2 B點的經度 * @return [String] 兩點座標間的距離,輸出單位爲米 */ function GetDistance($lat1, $lng1, $lat2, $lng2) { $EARTH_RADIUS = 6378.137;//地球的半徑 $radLat1 = rad($lat1); $radLat2 = rad($lat2); $a = $radLat1 - $radLat2; $b = rad($lng1) - rad($lng2); $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2))); $s = $s *$EARTH_RADIUS; $s = round($s * 10000) / 10000; $s=$s*1000; return ceil($s); } /** * 標記大概的距離,作出友好的距離提示 * @param [$number] 距離數量 * @return[String] 距離提示 */ function mToKm($number){ if(!is_numeric($number)) return ' '; switch ($number){ case $number>1800&&$number<=2000: $v='2'; break; case $number>1500&&$number<=1800: $v='1.8'; break; case $number>1200&&$number<=1500: $v='1.5'; break; case $number>1000&&$number<=1200: $v='1.2'; break; case $number>900&&$number<=1000: $v='1'; break; default: $v=ceil($number/100)*100; break; } if($v<100){ $v= '距離我【<font color="#FF4C06"><b>'.$v.'</b></font>】公里內。';} else{ $v= '距離我【<font color="#FF4C06"><b>'.$v.'</b></font>】米內。'; } return $v; } $location1=explode(',','30.625011,104.072701');//騰訊地圖座標 $location1==Convert_GCJ02_To_BD09($location1[0],$location1[1]);//轉換騰訊座標到百度座標 $location2=explode(',','104.102209,30.647363'); $distance=GetDistance($location2[0],$location2[1],$location1[0],$location1[1]);//得出距離 $distance=mToKm($x);//對距離個性化轉換處理
最終實現的微信地理位置呈現的效果圖截圖以下
微信窗口中粉絲地理位置和最近的商家位置呈現的距離提示
微信網站中根據公衆號粉絲的openid和該粉絲當前的地理位置座標計算出相應的距離
百度地圖導航導商家
我接下來再分享一篇文章,關於微信的地理位置的存儲和地理位置和附近商家的調用功能;
1.我就專門來分享關於如何獲取改粉絲的當前位置座標和當前粉絲的用戶標示
2.如何把每一個粉絲的地理位置信息和粉絲用戶信息固話存儲
3.如何方便當前持續的地理位置服務和調用;
微信開發交流 QQ鐵牛:187395037 手機:15889726201