最近想幫公司線下的門店采集一下經(jīng)緯度,標(biāo)注在地圖上,一研究居然地圖還有這么多標(biāo)準(zhǔn),現(xiàn)總結(jié)相關(guān)知識如下,首先了解一下當(dāng)前互聯(lián)網(wǎng)地圖的坐標(biāo)系現(xiàn)狀
一、坐標(biāo)系介紹
1. 地球坐標(biāo) (WGS84)
- 國際標(biāo)準(zhǔn),從專業(yè)GPS 設(shè)備中取出的數(shù)據(jù)的坐標(biāo)系
- 國際地圖提供商使用的坐標(biāo)系
2. 火星坐標(biāo) (GCJ-02)也叫國測局坐標(biāo)系
- 中國標(biāo)準(zhǔn),從國行移動設(shè)備中定位獲取的坐標(biāo)數(shù)據(jù)使用這個坐標(biāo)系
- 國家規(guī)定: 國內(nèi)出版的各種地圖系統(tǒng)(包括電子形式),必須至少采用GCJ-02對地理位置進(jìn)行首次加密。
- 騰訊地圖用的也是GCJ02坐標(biāo)
3. 百度坐標(biāo) (BD-09)
- 百度標(biāo)準(zhǔn),百度 SDK,百度地圖,Geocoding 使用
- (本來就亂了,百度又在火星坐標(biāo)上來個二次加密)
二、PHP 代碼
<?php
$lng=floatval(112.618056);//用變量替換時注意數(shù)據(jù)類型
$lat=floatval(37.858867);
$locXY=Convert_GCJ02_To_BD09($lng,$lat);
$content="百度地圖坐標(biāo)系,經(jīng)度:".$locXY['lng'].";緯度:".$locXY['lat'];
echo $content;
/**
* 中國正常GCJ02坐標(biāo)-->百度地圖BD09坐標(biāo)
* 騰訊地圖用的也是GCJ02坐標(biāo)
* @param double $lng 經(jīng)度
* @param double $lat 緯度
*/
function Convert_GCJ02_To_BD09($lng,$lat)
{
$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);
}
?>
大家可以通過此工具來驗證準(zhǔn)確性:百度地圖拾取坐標(biāo)系統(tǒng)
百度地圖坐標(biāo)拾取系統(tǒng) 截圖
參考資料:
http://cnodejs.org/topic/564c0a27e4766d487f6fe38d
http://www.open-open.com/code/view/1440854840138