<?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解決