日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

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

發(fā)布時(shí)間:2024/1/23 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 微信定位,微信企业号(服务号)坐标定位发生偏移解决方案记录( 附PHP代码)... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在使用微信提供的企業(yè)號(hào)獲取接口的過(guò)程中,發(fā)現(xiàn)獲取的坐標(biāo)和后臺(tái)使用騰訊地圖設(shè)置的坐標(biāo)在距離有200-400米左右的偏差。于是上網(wǎng)搜了一下,發(fā)現(xiàn)坐標(biāo)被區(qū)分成火星坐標(biāo)系(GCJ-02)和地球坐標(biāo)系(WGS-84 )。

火星坐標(biāo)系并非真的和火星有很關(guān)系,只是它與真實(shí)的地球坐標(biāo)有偏差(200-400米),如果夸張理解為偏到了火星上,那么火星坐標(biāo)系就不難理解了。。。那么為什么要把真實(shí)的坐標(biāo)進(jìn)行偏差呢?因?yàn)樵谔斐?#xff0c;地圖是戰(zhàn)略保密的。為了我們的國(guó)土安全,所以大家要理解。

到正題,火星坐標(biāo)系的偏差算法是公開(kāi)的秘密,但是又不是我們這種凡夫俗子能夠隨意得到的,那么我們又要使用到,所以大多是地圖都提供坐標(biāo)轉(zhuǎn)換,獲取希望獲得的坐標(biāo)。

對(duì)于微信企業(yè)號(hào) 在getLocation 方法中加入type:'gcj02' 即可獲得火星坐標(biāo)系,如果不加那么獲得的就是地球坐標(biāo)系。由于pc端地圖提供的經(jīng)緯度是火星坐標(biāo)系的經(jīng)緯度,所以為了統(tǒng)一,我們都使用火星坐標(biāo)系來(lái)進(jìn)行距離計(jì)算,如果在

某些情況下,你只獲得了地球坐標(biāo)系,需要轉(zhuǎn)換成火星坐標(biāo)系,那么下面這段代碼可以為你提供參考和使用: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');不知道會(huì)不會(huì)被和諧。。。。如果被和諧那我也沒(méi)辦法了,我是愛(ài)國(guó)家的!只是分享一些知識(shí)!

好了,就到這了。。。覺(jué)得有用的就給點(diǎn)個(gè)贊好么。。。都是自己碼的字

總結(jié)

以上是生活随笔為你收集整理的php 微信定位,微信企业号(服务号)坐标定位发生偏移解决方案记录( 附PHP代码)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。