zoukankan      html  css  js  c++  java
  • PHP 之转换excel表格中的经纬度

    <?php
    set_time_limit(0);
    include './plugin/PHPExcel/PHPExcel.php';
    include './plugin/PHPExcel/PHPExcel/IOFactory.php';
    include './plugin/PHPExcel/PHPExcel/Reader/Excel5.php';
    
    $inputFileName = "./20190514-165802.xlsx";
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
    $sheet = $objPHPExcel->getSheet(0); // 读取第一個工作表
    $highestColumm = $sheet->getHighestColumn(); // 取得总列数
    $highestRow = $sheet->getHighestRow(); // 取得总行数
    $file = pathinfo($inputFileName);
    $saveTo = $file['filename'] . "_convert." . $file['extension'];
    for ($i = 2; $i <= $highestRow; $i++) {
        //获取经纬度
        $lng = (string)$objPHPExcel->setActiveSheetIndex()->getCell("K" . $i);
        $lat = (string)$objPHPExcel->setActiveSheetIndex()->getCell("L" . $i);
        if (empty($lng) || empty($lat)) {
            continue;
        }
        //转换为百度地图经纬度
        $convert = Convert_GCJ02_To_BD09(doubleval($lat), doubleval($lng));
        $objPHPExcel->setActiveSheetIndex()->setCellValue("K" . $i, (string)$convert['lng'] . "	");
        $objPHPExcel->setActiveSheetIndex()->setCellValue("L" . $i, (string)$convert['lat'] . "	");
        //保存excel
        /** 输出到指定目录 */
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save($saveTo);//文件保存路径
    }
    echo "转换成功";
    
    
    /**
     * 中国正常GCJ02坐标---->百度地图BD09坐标
     * 腾讯地图用的也是GCJ02坐标
     * @param double $lat 纬度
     * @param double $lng 经度
     */
    function Convert_GCJ02_To_BD09($lat, $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;
        return array('lng' => $lng, 'lat' => $lat);
    }
    
    /**
     * 百度地图BD09坐标---->中国正常GCJ02坐标
     * 腾讯地图用的也是GCJ02坐标
     * @param double $lat 纬度
     * @param double $lng 经度
     * @return array();
     */
    function Convert_BD09_To_GCJ02($lat, $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);
        return array('lng' => $lng, 'lat' => $lat);
    }

    遇到的问题:转换后的经纬度小数位数不准确,添加 解决
  • 相关阅读:
    LeetCode:25 K个一组翻转链表
    LeetCode:3 无重复字符的最长子串(双指针)
    Java——参数问题与final实例域
    Java——对象的构造
    配置远程服务器 安装iis 远程服务器网络无法连接
    未能找到元数据文件
    ef 设计model 标签
    visualsvn for vs2017 初始化错误
    resharper 2018.2.3破解
    C# winform 自定义函数中找不到Form中的控件和定义的全局变量
  • 原文地址:https://www.cnblogs.com/yang-2018/p/10867853.html
Copyright © 2011-2022 走看看