微信開發之附近商家地理位置計算和騰訊地圖坐標轉百度地圖坐標的方法


微信開發之附近商家地理位置計算和騰訊地圖坐標轉百度地圖坐標的方法

騰訊地圖坐標轉百度坐標

案例:本次開發的系統是一個商家聯盟積分系統。在全國各地都有商家聯盟的網點。

要求實現的功能

a.微信粉絲通過微信號就能查看附近的商家

b.我的聯盟系統統計在2公里之內的商家網點

c.並標出商家和粉絲位置的距離是多少米。

d.在商家的詳細介紹頁面設置百度地圖接入步行、公交、駕車一鍵導航功能

那么現在問題來了:

問題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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM