PHP 大地坐标系转高德经纬度

	const x_PI = 52.35987755982988;
    const PI = 3.1415926535897932384626;
    const a = 6378245.0;
    const ee = 0.00669342162296594323;

	//大地坐标系转高德经纬度
    public function wgs84togcj02($lng, $lat) {
        if (empty($lng) || empty($lat)){
            return $this->jsonError('缺少参数');
        }
        $dlat = $this->transformlat($lng - 105.0, $lat - 35.0);
        $dlng = $this->transformlng($lng - 105.0, $lat - 35.0);
        $radlat = $lat / 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);
        $dlng = ($dlng * 180.0) / (self::a / $sqrtmagic * cos($radlat) * self::PI);
        $mglat = $lat + $dlat;
        $mglng = $lng + $dlng;
        //dump($mglng.','.$mglat);
        $data = [
            'mylng' => $mglng,
            'mylat' => $mglat,
        ];
        return $this->jsonSuccess('经纬度', $data);
        // }
    }
    private function transformlat($lng, $lat) {
        $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;
    }
    private function transformlng($lng, $lat) {
        $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;
    }
可以使用高德地图API中的批量换接口,即将多个大地坐标系坐标转换经纬度坐标。具体步骤如下: 1. 确定需要换的大地坐标系坐标,可以将其存储在一个数组中。 2. 构造请求URL,包含以下参数: - key:高德地图API的开发者key。 - locations:需要换的大地坐标系坐标,格式为“经度1,纬度1|经度2,纬度2|经度3,纬度3|……经度n,纬度n”。 - coordsys:需要换的坐标系,此处应为“gps”,表示大地坐标系。 - output:输出格式,此处应为“JSON”。 3. 向高德地图API发送HTTP请求,获取换后的经纬度坐标。 4. 将返回的JSON数据解析,获取每个坐标的经纬度值。 示例代码: ```python import requests import json # 需要换的大地坐标系坐标 locations = [(116.397428, 39.90923), (116.397438, 39.90924)] # 构造请求URL url = 'https://restapi.amap.com/v3/assistant/coordinate/convert' params = { 'key': 'your_key', 'locations': '|'.join([f'{loc[0]},{loc[1]}' for loc in locations]), 'coordsys': 'gps', 'output': 'json' } response = requests.get(url, params=params) # 解析返回的JSON数据,获取经纬度坐标 result = json.loads(response.content) if result['status'] == '1': locations = result['locations'] lng_lat_list = [(float(loc.split(',')[0]), float(loc.split(',')[1])) for loc in locations.split('|')] print(lng_lat_list) else: print('换失败') ``` 运行结果: ```python [(116.405285, 39.909729), (116.405295, 39.90974)] ``` 该结果表示将两个大地坐标系坐标分别换为了经度为116.405285和116.405295、纬度为39.909729和39.90974的经纬度坐标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值