在使用微信提供的企业号获取接口的过程中,发现获取的坐标和后台使用腾讯地图设置的坐标在距离有200-400米左右的偏差。于是上网搜了一下,发现坐标被区分成火星坐标系(GCJ-02)和地球坐标系(WGS-84 )。

火星坐标系并非真的和火星有很关系,只是它与真实的地球坐标有偏差(200-400米),如果夸张理解为偏到了火星上,那么火星坐标系就不难理解了。。。那么为什么要把真实的坐标进行偏差呢?因为在天朝,地图是战略保密的。为了我们的国土安全,所以大家要理解。

到正题,火星坐标系的偏差算法是公开的秘密,但是又不是我们这种凡夫俗子能够随意得到的,那么我们又要使用到,所以大多是地图都提供坐标转换,获取希望获得的坐标。

对于微信企业号 在getLocation 方法中加入type:'gcj02' 即可获得火星坐标系,如果不加那么获得的就是地球坐标系。由于pc端地图提供的经纬度是火星坐标系的经纬度,所以为了统一,我们都使用火星坐标系来进行距离计算,如果在

某些情况下,你只获得了地球坐标系,需要转换成火星坐标系,那么下面这段代码可以为你提供参考和使用:class getGps{

//

// Krasovsky 1940

//

// a = 6378245.0, 1/f = 298.3

// b = a * (1 - f)

// ee = (a^2 - b^2) / a^2;

const pi = 3.14159265358979324;

const a = 6378245.0;

const ee = 0.00669342162296594323;

//

// World Geodetic System ==> Mars Geodetic System

public function transform($wgLat, $wgLon)

{

if ($this->outOfChina($wgLat, $wgLon))

{

$mgLat = $wgLat;

$mgLon = $wgLon;

return;

}

$dLat = $this->transformLat($wgLon - 105.0, $wgLat - 35.0);

$dLon = $this->transformLon($wgLon - 105.0, $wgLat - 35.0);

$radLat = $wgLat / 180.0 * self::pi;

$magic = sin($radLat);

$magic = 1 - self::ee * $magic * $magic;

$sqrtMagic = sqrt($magic);

$dLat = ($dLat * 180.0) / ((self::a * (1 - self::ee)) / ($magic * $sqrtMagic) * self::pi);

$dLon = ($dLon * 180.0) / (self::a / $sqrtMagic * cos($radLat) * self::pi);

$mgLat = $wgLat + $dLat;

$mgLon = $wgLon + $dLon;

echo $mgLat.','.$mgLon;

}

public function outOfChina($lat, $lon)

{

if ($lon < 72.004 || $lon > 137.8347)

return true;

if ($lat < 0.8293 || $lat > 55.8271)

return true;

return false;

}

public function transformLat($x, $y)

{

$ret = -100.0 + 2.0 * $x + 3.0 * $y + 0.2 * $y * $y + 0.1 * $x * $y + 0.2 * sqrt(abs($x));

$ret += (20.0 * sin(6.0 * $x * self::pi) + 20.0 * sin(2.0 * $x * self::pi)) * 2.0 / 3.0;

$ret += (20.0 * sin($y * self::pi) + 40.0 * sin($y / 3.0 * self::pi)) * 2.0 / 3.0;

$ret += (160.0 * sin($y / 12.0 * self::pi) + 320 *sin($y * self::pi / 30.0)) * 2.0 / 3.0;

return $ret;

}

public function transformLon($x, $y)

{

$ret = 300.0 + $x + 2.0 * $y + 0.1 * $x * $x + 0.1 * $x * $y + 0.1 * sqrt(abs($x));

$ret += (20.0 * sin(6.0 * $x * self::pi) + 20.0 * sin(2.0 * $x * self::pi)) * 2.0 / 3.0;

$ret += (20.0 * sin($x * self::pi) + 40.0 * sin($x / 3.0 * self::pi)) * 2.0 / 3.0;

$ret += (150.0 * sin($x / 12.0 * self::pi) + 300.0 * sin($x / 30.0 * self::pi)) * 2.0 / 3.0;

return $ret;

}

}

$Gps= new getGps();

$Gps->transform('Lat','Lon');不知道会不会被和谐。。。。如果被和谐那我也没办法了,我是爱国家的!只是分享一些知识!

好了,就到这了。。。觉得有用的就给点个赞好么。。。都是自己码的字

php 微信定位,微信企业号(服务号)坐标定位发生偏移解决方案记录( 附PHP代码)...相关推荐

  1. 用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入

    2019独角兽企业重金招聘Python工程师标准>>> 阅读目录 一.用法 二.实现方法 最近研究了下服务号的服务器配置和企业号的回调模式.真正实现完后,觉得很简单,但一开始还是走了 ...

  2. 微信服务通知消息找回_如何通过微信第三方平台群发服务号消息通知?

    在公众号后台可以群发功能实现,第三方平台可以用微号帮功能服务号每月400次群发实现,服务号每个月可以群发400次消息,但每个粉丝每月只能收到4次消息,不可突破微信规则.本功能主要为微信服务号实现千人千 ...

  3. 微信小程序通过服务号推送模板消息

    前言 公司要做一款新的微信小程序,因为业务需求要加入消息推送.因为之前APP是通过服务号推送给用户消息的,所以微信小程序要做消息推送也是首先想到了通过服务号推送.事实上在使用过程中服务号推送还是非常好 ...

  4. 微信公众平台的服务号和订阅号

    微信公众平台 服务号 订阅号  作者:方倍工作室  地址:http://www.cnblogs.com/txw1958/p/ServiceNumber-subscriptionNumber.html ...

  5. 微信公众号企业号服务号订阅号个体号如何突破限制服务

    公众号分为两种,一种是个人注册的,还有一种是组织注册的,个人最多能注册几个?组织最多能注册几个?下面我们就详细介绍一下,需要的朋友可以参考下. 之前我们知道微信公众号可以注册多个,最近微信限制公众号的 ...

  6. 微信开发(4) -- 推送微信模板信息到服务号

    在这篇微信公众平台开发教程中,我们将介绍如何开发模板消息,即如何用程序发送模板消息功能. 本文分为以下三个部分: 一.申请模板消息权限 模板消息的申请需账号已经开通微信支付权限. 在微信公众平台的后台 ...

  7. 微信 和 支付宝 公众服务号开发者文档

    支付宝 https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?k ...

  8. 微信公众号获取地理位置存在偏移解决方案

    使用微信获取的地理位置是有偏移加密的wgs84坐标系(另外一种是火星坐标暂不讨论)是一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系.如果直接使用到业务中,偏差会很大,不符合业务场 ...

  9. 微信小程序的 websocket 以及 微信开发者工具测试 ws 协议没有数据的 离奇解决方案 记录

    微信小程序的 websocket 在本地web能够使用ws协议去链接websocket,但是小程序不能使用. 一.WSS 协议与 WS 协议 二.业务场景记录 : 使用 ws 协议的 websocek ...

最新文章

  1. 基于视觉的在线地图:一种Transformer网络方法
  2. 服务器怎么清除日志文件,如何清理服务器数据库日志文件
  3. boost::gil::is_planar用法的测试程序
  4. [html] 可以给内联元素设置宽和高吗?为什么?
  5. “睡服”面试官系列第六篇之set数据结构(建议收藏学习)
  6. Python的正则匹配
  7. error_logs
  8. linux列举网卡,linux下快速列出局域网中所有主机名(计算机名)的脚本
  9. AC自动机(Aho-Corasick automation)(转)
  10. Hyperledger Fabric MSP Identity Validity Rules——MSP身份验证规则
  11. 2021十大 Python 机器学习库
  12. 西门子1200走总线FB284控制3台V90伺服和相机调整角 度,DP通讯控制FANUC机器人
  13. bios sgx需要开启吗_惠普HP笔记本预装win8改装成win7系统BIOS设置与安装方法
  14. 厂区 3D 室内定位及电子围栏
  15. 个人作业4 结对开发地铁
  16. 产品logo的设计:图标与几何构成
  17. cpuz测试分数天梯图_PC电脑桌面CPU天梯图2020 单路CPU性能排名
  18. 2019ubc转学分计算机科学gpa,吐血整理2019年本科转学分申请UBC
  19. IT从业者考证最高补贴30000元,持NISP二级/CISP证书可申请
  20. dw html怎么导入视频,如何在dw中将视频插入

热门文章

  1. 在JS中如何判断undefined和null
  2. ACM练习 校赛83C:纸片儿(测试用例通过但WA/TLE)
  3. Python基础之:Python中的流程控制
  4. Google Spanner 论文笔记
  5. JUC锁-CyclicBarrier(七)
  6. BSP细分时代即将来临
  7. Vue_template是什么
  8. 5行代码AC——L1-029 是不是太胖了 (5分)
  9. Python程序开发——第三章 列表与元组
  10. MHA+LAMP+Keepalived实现高可负载均衡综合实验