12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
- declare(strict_types=1);
- namespace algorithm;
- /**
- * 地理算法
- */
- class Geometry
- {
- /**
- * 火星坐标Gcj02 转 百度地图坐标BD09
- * 腾讯地图用的也是GCJ02坐标
- * @param double $lat 纬度
- * @param double $lng 经度
- */
- public static function convertGcj02ToBd09($lat, $lng)
- {
- $lat = floatval($lat);
- $lng = floatval($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;
- $lng = round($lng,6);
- $lat = round($lat,6);
- return array('lng'=>$lng,'lat'=>$lat);
- }
- /**
- * 百度地图坐标Bd09 转 火星坐标Gcj02
- * @param double $lat 纬度
- * @param double $lng 经度
- */
- public static function convertBd09ToGcj02($lat, $lng)
- {
- $lat = floatval($lat);
- $lng = floatval($lng);
- $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
- $x = $lng - 0.0065;
- $y = $lat - 0.006;
- $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);
- $lat = $z * sin($theta);
- $lng = round($lng,6);
- $lat = round($lat,6);
- return array('lng'=>$lng,'lat'=>$lat);
- }
- }
|