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

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

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

腾讯地图坐标转百度坐标

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

要求实现的功能

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

目录
相关文章
|
4月前
|
小程序
|
4月前
|
编解码 小程序
微信小程序11177版本开启控制台方法
微信小程序11177版本开启控制台方法
|
4月前
|
小程序 JavaScript
微信小程序中的页面跳转(通过点击按钮、调用方法的形式)
这篇文章讲解了微信小程序中页面跳转的方法,包括使用按钮点击事件和调用方法实现跳转,以及推荐使用`this.pageRouter.navigateTo`代替`wx.navigateTo`的方式。
微信小程序中的页面跳转(通过点击按钮、调用方法的形式)
|
4月前
|
缓存 JavaScript 前端开发
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)
|
5月前
|
小程序
微信小程序APPID的两种查看方法
查看微信小程序APPID的两种方法:1) 在小程序内点击右上角“...”,进入查看页面,点击“更多资料”查看;2) 登录微信公众平台([https://mp.weixin.qq.com/](https://mp.weixin.qq.com/)),进入【设置】查看“账号信息”。
3263 1
|
5月前
|
小程序 JavaScript 安全
【微信小程序-原生开发】转发给好友/群,分享到朋友圈(含单页模式访问云开发数据库的方法)
【微信小程序-原生开发】转发给好友/群,分享到朋友圈(含单页模式访问云开发数据库的方法)
189 0
|
5月前
|
小程序
【微信小程序-原生开发】wxml 支持 includes (wxml中执行函数的方法)
【微信小程序-原生开发】wxml 支持 includes (wxml中执行函数的方法)
333 0
|
5月前
|
小程序 数据库 C++
【微信小程序-原生开发】实用教程16 - 查看详情(含页面跳转的传参方法--简单传参 vs 复杂传参)
【微信小程序-原生开发】实用教程16 - 查看详情(含页面跳转的传参方法--简单传参 vs 复杂传参)
50 0
|
5月前
|
小程序 定位技术 开发工具
【微信小程序-原生开发+TDesign】通用功能页封装——地点搜索(含腾讯地图开发key 的申请方法)
【微信小程序-原生开发+TDesign】通用功能页封装——地点搜索(含腾讯地图开发key 的申请方法)
61 0
|
5月前
|
小程序 定位技术
微信小程序实战——获取用户地理位置信息
微信小程序实战——获取用户地理位置信息
80 0