返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php gps怎么转gcj-02
  • 539
分享到

php gps怎么转gcj-02

php 2023-05-14 20:05:00 539人浏览 安东尼
摘要

PHP gps转GCj-02的方法:1、创建一个php示例文件;2、通过“public static function wgs84ToGcj02 (float $lng, float $lat):array {...}”方法将WGS84转为

PHP gps转GCj-02的方法:1、创建一个php示例文件;2、通过“public static function wgs84ToGcj02 (float $lng, float $lat):array {...}”方法将WGS84转为GCJ02即可。

php gps怎么转gcj-02

教程操作环境:windows10系统、PHP8.1版、DELL G3电脑

php gps怎么转gcj-02?

php 经纬度坐标转换 WGS84、火星坐标 (GCJ-02)、百度坐标 (BD-09)

项目有gps上报的功能, 由于前端插件问题导致大量gps定位数据转换百度坐标(BD-09)时产生极大偏移, 故需要后端做经纬度坐标转换, 看到一篇java的相关技术帖, 拿来做了修改

Ps: 坐标转换稍有偏差,在可接受范围内

百度经纬度纠偏api: Http://api.map.baidu.com/ag/coord/convert

php代码:

<?php
 
 
namespace App\Tool;
 

class GpsUtils {
    const x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    // π
    const pi = 3.1415926535897932384626;
    // 长半轴
    const a = 6378245.0;
    // 扁率
    const ee = 0.00669342162296594323;
 
    
    public static function bd09ToWgs84 (float $lng, float $lat): array {
        $gcj = self::bd09ToGcj02($lng, $lat);
        return self::gcj02ToWgs84($gcj[0], $gcj[1]);
    }
 
    
    public static function wgs84ToBd09 (float $lng, float $lat): array {
        $gcj = self::wgs84ToGcj02($lng, $lat);
        return self::gcj02ToBd09($gcj[0], $gcj[1]);
    }
 
    
    public static function gcj02ToBd09 (float $lng, float $lat): array {
        $z = sqrt($lng * $lng + $lat * $lat) + 0.00002 * sin($lat * self::x_pi);
        $theta = atan2($lat, $lng) + 0.000003 * cos($lng * self::x_pi);
        $bd_lng = $z * cos($theta) + 0.0065;
        $bd_lat = $z * sin($theta) + 0.006;
        return [$bd_lng, $bd_lat];
    }
 
    
    public static function bd09ToGcj02 (float $bd_lon, float $bd_lat): array {
        $x = $bd_lon - 0.0065;
        $y = $bd_lat - 0.006;
        $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * self::x_pi);
        $theta = atan2($y, $x) - 0.000003 * cos($x * self::x_pi);
        $gg_lng = $z * cos($theta);
        $gg_lat = $z * sin($theta);
        return [$gg_lng, $gg_lat];
    }
 
    
    public static function wgs84ToGcj02 (float $lng, float $lat): array {
        $d_lat = self::transfORMlat($lng - 105.0, $lat - 35.0);
        $d_lng = self::transformlng($lng - 105.0, $lat - 35.0);
        $rad_lat = $lat / 180.0 * self::pi;
        $magic = sin($rad_lat);
        $magic = 1 - self::ee * $magic * $magic;
        $sqrt_magic = sqrt($magic);
        $d_lat = ($d_lat * 180.0) / ((self::a * (1 - self::ee)) / ($magic * $sqrt_magic) * self::pi);
        $d_lng = ($d_lng * 180.0) / (self::a / $sqrt_magic * cos($rad_lat) * self::pi);
        $mg_lat = $lat + $d_lat;
        $mg_lng = $lng + $d_lng;
        return [$mg_lng, $mg_lat];
    }
 
    
    public static function gcj02ToWgs84 (float $lng, float $lat): array {
        $d_lat = self::transformlat($lng - 105.0, $lat - 35.0);
        $d_lng = self::transformlng($lng - 105.0, $lat - 35.0);
        $rad_lat = $lat / 180.0 * self::pi;
        $magic = sin($rad_lat);
        $magic = 1 - self::ee * $magic * $magic;
        $sqrt_magic = sqrt($magic);
        $d_lat = ($d_lat * 180.0) / ((self::a * (1 - self::ee)) / ($magic * $sqrt_magic) * self::pi);
        $d_lng = ($d_lng * 180.0) / (self::a / $sqrt_magic * cos($rad_lat) * self::pi);
        $mg_lat = $lat + $d_lat;
        $mg_lng = $lng + $d_lng;
        return [$lng * 2 - $mg_lng, $lat * 2 - $mg_lat];
    }
 
    
    public static function transFormLat (float $lng, float $lat): float {
        $ret = -100.0 + 2.0 * $lng + 3.0 * $lat + 0.2 * $lat * $lat + 0.1 * $lng * $lat + 0.2 * sqrt(abs($lng));
        $ret += (20.0 * sin(6.0 * $lng * self::pi) + 20.0 * sin(2.0 * $lng * self::pi)) * 2.0 / 3.0;
        $ret += (20.0 * sin($lat * self::pi) + 40.0 * sin($lat / 3.0 * self::pi)) * 2.0 / 3.0;
        $ret += (160.0 * sin($lat / 12.0 * self::pi) + 320 * sin($lat * self::pi / 30.0)) * 2.0 / 3.0;
        return $ret;
    }
 
    
    public static function transFormLng (float $lng, float $lat): float {
        $ret = 300.0 + $lng + 2.0 * $lat + 0.1 * $lng * $lng + 0.1 * $lng * $lat + 0.1 * sqrt(abs($lng));
        $ret += (20.0 * sin(6.0 * $lng * self::pi) + 20.0 * sin(2.0 * $lng * self::pi)) * 2.0 / 3.0;
        $ret += (20.0 * sin($lng * self::pi) + 40.0 * sin($lng / 3.0 * self::pi)) * 2.0 / 3.0;
        $ret += (150.0 * sin($lng / 12.0 * self::pi) + 300.0 * sin($lng / 30.0 * self::pi)) * 2.0 / 3.0;
        return $ret;
    }
}

相关拓展:

GCJ-02是由中国国家测绘局(G表示Guojia国家,C表示Cehui测绘,J表示Ju局)制订的地理信息系统的坐标系统。

它是一种对经纬度数据的加密算法,即加入随机的偏差。

国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。

以上就是php gps怎么转gcj-02的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: php gps怎么转gcj-02

本文链接: https://lsjlt.com/news/203675.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php gps怎么转gcj-02
    php gps转gcj-02的方法:1、创建一个php示例文件;2、通过“public static function wgs84ToGcj02 (float $lng, float $lat):array {...}”方法将WGS84转为...
    99+
    2023-05-14
    php
  • php gps如何转gcj-02
    这篇文章主要介绍“php gps如何转gcj-02”,在日常操作中,相信很多人在php gps如何转gcj-02问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php gps如何转gcj-02”的疑惑有所帮助!...
    99+
    2023-07-05
  • Java转换坐标系,GPS(WGS84)大地200(CGCS200)、百度(BD-09)、高德(GCJ-02)互转,一文搞懂坐标系、坐标转换
    1.分不清的坐标系 WG-S84: 地理坐标系统,GPS仪器记录的经纬度信息,Google Earth采用,Google Map中国范围外使用,高德地图中国范围外使用。 GCJ-02: 投影坐标系统,火星坐标系,中国国家测绘局制定的坐标系统...
    99+
    2023-12-22
    java 开源
  • GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)
    文章目录 前言一、坐标系1.地球坐标 (WGS84)2.国测局坐标系(GCJ-02、火星坐标系)3.百度坐标(BD-09)4.国家大地2000坐标系(CGCS2000) 二、百度坐标系(B...
    99+
    2023-09-10
    信息可视化 python
  • 怎么使用gps校时母钟
    这篇文章主要讲解了“怎么使用gps校时母钟”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用gps校时母钟”吧!gps校时母钟采用的是先进的多模卫星接收...
    99+
    2024-04-02
  • curl 怎么转php
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑curl 怎么转php?curl命令转换成php源码获取状态:curl -X GET -H "Content-Type:application/json&quo...
    99+
    2016-08-02
    curl php
  • php 怎么转换 decimal
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php 怎么转换 decimalphp string 转换为decimal类型怎么做使用floatval 函数转换float floatval ( mixed $var ...
    99+
    2017-04-04
    php decimal
  • php svg怎么转jpg
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php svg怎么转svgphp imagick svg转成jpg代码如下:public function svgtojpg() { $image = '<...
    99+
    2021-07-03
    php svg jpg
  • php blob 怎么转base64
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php blob 怎么转base64在PHP中将本地图像Blob转换为base64具体问题描述:我正在为内部工具编写(HTML)表单.用户可以填写有关问题的数据并附加屏幕...
    99+
    2018-06-19
    php blob base64
  • php jpg怎么转webp
    本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑。php jpg怎么转webpPHP图片转为webp格式 把图片1.jpg转成1.webp,1.jpg是图片的真实地址代码如下:$img = new \Imagick(&...
    99+
    2017-06-22
    php jpg webp
  • php image怎么转base64
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php image怎么转base64?PHP 图片转 base64以下代码使用 PHP 将图片转换为 base64 字符串格式:实例<php //$file:图片地...
    99+
    2020-08-02
    php image base64
  • php 怎么转换int
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php 怎么转换int?php int类型转换int 是集合 ℤ = {…, -2, -1, 0, 1, 2, …} 中的某个数。要将一个值转换为 int,用 (in...
    99+
    2024-04-02
  • php blob怎么转file
    php blob转file的方法:1、创建一个php示例文件;2、通过“function blobToFile(blob) {return new File([blob], 'screenshot.png', { type:...
    99+
    2023-05-14
    file blob php
  • Android开发之GPS定位功能怎么实现
    要实现Android中的GPS定位功能,你可以按照以下步骤进行操作:1. 在AndroidManifest.xml文件中添加相应的权...
    99+
    2023-09-13
    Android
  • php int怎么转为byte
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php int怎么转为bytePHP整数型(int)转字节集(byte)代码如下:$i = 123456; $ar = unpack("C*", pa...
    99+
    2016-08-06
    php int byte
  • php怎么强制转码
    本文操作环境:Windows7系统、PHP7.1版、Dell G3电脑。php怎么强制转码?php 数据类型转换强制转换的三种方式:(int)、(integer):转换成整形(float)、(double)、(real):转换成浮点型(st...
    99+
    2022-01-08
    php 转码
  • php int怎么转时间
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php int怎么转时间?php把int类型转换成时间类型这次做项目遇到了时间戳转换的问题数据库设计的时间戳为int格式的,所有需要一定的转换$lasTtime=time...
    99+
    2016-01-14
    php int
  • php怎么转txt文件
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php怎么转txt文件?找到需要转换格式的PHP文件;鼠标右键在弹出的菜单中选择【重命名】直接修改后缀名为txt保存即可,如下:...
    99+
    2019-07-30
    php txt
  • php怎么转换成txt
    php转换为txt的方法:1、双击此电脑,找到查看。2:找到文件扩展名。3:重命名php文件后缀。具体操作步骤:双击此电脑,找到查看并点击。找到文件扩展名并勾选。第三步;右键php文件点击重命名,把文件后缀php改为txt。...
    99+
    2024-04-02
  • php怎么实现翻转
    小编给大家分享一下php怎么实现翻转,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php实现翻转的方法:1、使用strrev()函数实现英文字符串翻转;2、通过自...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作