微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法

简介: 原文:微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法 腾讯地图坐标转百度坐标 案例:本次开发的系统是一个商家联盟积分系统。
原文: 微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法

微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法

腾讯地图坐标转百度坐标

案例:本次开发的系统是一个商家联盟积分系统。在全国各地都有商家联盟的网点。

要求实现的功能

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

目录
相关文章
|
1月前
|
存储 小程序 JavaScript
【微信小程序】-- 自定义组件 -- 数据、方法和属性(三十三)
【微信小程序】-- 自定义组件 -- 数据、方法和属性(三十三)
|
2月前
|
小程序
微信小程序中识别HTML标签的方法
微信小程序中识别HTML标签的方法
|
2月前
|
存储 缓存 JSON
微信小程序使用本地存储方法
微信小程序使用本地存储方法
128 1
|
3月前
|
Ubuntu Shell 数据安全/隐私保护
百度搜索:蓝易云【Ubuntu密码忘记怎么办 Ubuntu重置root密码方法】
完成上述步骤后,Ubuntu系统的root密码应该已经被成功重置为你设置的新密码。请确保在重置密码后牢记新密码。
50 0
|
13天前
|
小程序 数据库
【微信小程序7】云开发中实时聊天系统的实现方法
【微信小程序7】云开发中实时聊天系统的实现方法
21 0
|
13天前
|
小程序
【微信小程序6】引入第三方UI的方法(ColorUi)
【微信小程序6】引入第三方UI的方法(ColorUi)
17 0
|
1月前
|
小程序 JavaScript 定位技术
微信小程序自动获取地理位置
微信小程序自动获取地理位置
21 0
|
3月前
|
小程序 Android开发
Appium微信小程序自动化之开启webview调试功能方法封装
Appium微信小程序自动化之开启webview调试功能方法封装
78 0
|
3月前
|
Linux
百度搜索:蓝易云【Linux清空日志的五种方法】
这些是在Linux中清空日志文件的五种常用方法。根据您的具体需求和环境,可以选择适合您的方法进行日志清空操作。请注意,清空日志文件可能会导致丢失日志数据,因此在清空之前请确保已备份重要的日志信息。
32 0
|
3月前
|
Linux
百度搜索:蓝易云【Linux系统中查看硬盘信息的方法有哪些?】
这些是在Linux系统中查看硬盘信息的常见方法。根据您的需求和具体环境,您可以选择适合您的方法来查看硬盘信息。
78 0