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

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

腾讯地图坐标转百度坐标

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

要求实现的功能

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

时间: 2024-12-26 19:40:32

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

微信JS-SDK之地理位置的获取与在线导航,集成百度地图实现在线地图搜索

原创声明:本文来源于本人另一博客[微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索]原创作品,绝非他处摘取,转载请联系博主 本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与在线导航. 官方文档地址:https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.htm

Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

标签: Android百度地图API Key  分类: Android 百度地图开发(2)  最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!   一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/a

夺命雷公狗---微信开发47----获取用户地理位置接口(2)

我们现在要做的是查找距离最近的“肯德基”,我们需要通过百度提供的LBS云服务定位距离您最近的肯德基,该程序需要到LBS后台进行相关设置,然后在完成程序 用户在客户端输入“肯德基”公众号就会自动回复距离用户最近的”肯德基“ 废话不多说,我们先到http://developer.baidu.com/里面找到LBS云------再到服务接口--------再到LBS云,如下图所示: 点击进来后,我们首先要获取一个密钥, 然后出了红色框部分填下数据即可,别的地方都不用改,直接提交即可 上面的0.0.0.

夺命雷公狗---微信开发48----获取用户地理位置接口(3)

这节课程我们来做一个游戏,这个游戏的名字叫“寻找美女做老婆”, 用户该游戏后,每隔5s(秒)会收到他距离未来老婆的信息,如果找到美女后,输入“老婆”即可成功. 这次我们涉及到一个车联网API,我们先来看下他在哪,张成什么样. http://lbsyun.baidu.com/index.php?title=car 找到接口说明,里面有一个测距,如下所示: 我们可以看到这就是他的接口 参数说明以及返回的参数如下所示: 很明显他就是返回一个XML或者是json格式的数据,默认返回的是一个XML格式的数

夺命雷公狗---微信开发46----获取用户地理位置接口(1)

我们先来看下手册有啥要求的先 我们先来写一个小功能,客户端每隔5s(秒)钟自动向公众平台报告自己的地理位置,服务器返回该地理位置给客户端. 我们要先到公众号管理界面里打开他才可以,因为默认的情况下他是关闭的,打开方法如下图所示: 如果开启成功后,他将会显示修改陈功,如下图所示: 我们在从新写过一个index.php的文件,代码如下所示: <?php /** * wechat php test */ //define your token require_once "common.php&q

GPS坐标转百度地图并且加载地图示例.支持微信端访问

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Wx_VehicleLocation.aspx.cs" Inherits="DTMS.WeiXin.wxmgr.govmgr.Wx_VehicleLocation" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999

微信企业号开发:微信考勤百度地图定位,错误修正

在使用百度地图进行微信考勤时,遇到很多问题,尤其是定位问题,我知道定位有偏差,但使用百度地图,几十次后,偶尔一次会错的离谱,例如直接就定位到了外省,例如我一直在西安,一次定位到了天津,一次定位到了石家庄,我不知道为什么会这样.偏差几千米还能理解,可偏差几百公里就是在让人不能理解了.是因为我用的百度API是免费的吗?当然出现的次数不多,一般情况下,四五十次,会偶尔出现一两次这么离谱的偏差. 实在找不到原因,也不能是缓存,因为我没有去过石家庄,天津.没办法,但这个问题,又不能不解决,于是只能把四种计

(收藏)微信公众平台开发 百度地图导航

一.获取目的地坐标 打开百度地图API 鼠标点击拾取坐标网页,http://developer.baidu.com/map/jsdemo/demo/a6_3.htm,通过先缩小再放大,定位到拾取坐标的建筑物. 以深圳市飞亚达科技大厦为例,定位如下: 鼠标点击大厦名称,获得坐标: 113.962182, 22.544976 这分别表示经度和纬度. 二.百度地图公交.驾车.步行导航 导航接口为 http://api.map.baidu.com/direction //PC&Webapp服务地址 参数

微信JS-SDK坐标位置转换为百度地图坐标

微信JS-SDK开发过程中,使用getLocation获取坐标位置,如何将微信获取的坐标直接应用到百度地图中,显示以下效果: 说明:红色图标是从微信转换过来的位置,蓝色图标是周边位置.首先从微信开发流程讲解. 1.微信JS-SDK开发文档 首先进入官网的帮助文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN 可对文档进行详细的研读,要获取位置信息,分以下步骤: