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'] . "\t");
    $objPHPExcel->setActiveSheetIndex()->setCellValue("L" . $i, (string)$convert['lat'] . "\t");
    //保存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);
}

 

遇到的問題:轉換後的經緯度小數位數不許確,添加\t解決
相關文章
相關標籤/搜索